From ea5faa99cd9429e1fd9945b19a3106820fc0eb71 Mon Sep 17 00:00:00 2001 From: renatodamas Date: Sun, 21 Aug 2022 19:44:10 +0100 Subject: [PATCH 1/7] fix: add required parameter field 'permissions' to my_permissions method --- jira/client.py | 5 +++++ tests/tests.py | 44 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/jira/client.py b/jira/client.py index 3ec6a2417..af6bf498d 100644 --- a/jira/client.py +++ b/jira/client.py @@ -2630,6 +2630,7 @@ def my_permissions( projectId: Optional[str] = None, issueKey: Optional[str] = None, issueId: Optional[str] = None, + permissions: Optional[str] = None, ) -> Dict[str, Dict[str, Dict[str, str]]]: """Get a dict of all available permissions on the server. @@ -2638,6 +2639,7 @@ def my_permissions( projectId (Optional[str]): limit returned permissions to the specified project issueKey (Optional[str]): limit returned permissions to the specified issue issueId (Optional[str]): limit returned permissions to the specified issue + permissions (Optional[str]): limit returned permissions to the specified csv permission keys (cloud required field) Returns: Dict[str, Dict[str, Dict[str, str]]] @@ -2651,6 +2653,9 @@ def my_permissions( params["issueKey"] = issueKey if issueId is not None: params["issueId"] = issueId + if permissions is not None: + params["permissions"] = permissions + return self._get_json("mypermissions", params=params) # Priorities diff --git a/tests/tests.py b/tests/tests.py index c2a673cad..d611c4c43 100755 --- a/tests/tests.py +++ b/tests/tests.py @@ -154,9 +154,11 @@ def test_fields(self): self.assertGreater(len(fields), 10) -class MyPermissionsTests(JiraTestCase): +class MyPermissionsServerTests(JiraTestCase): def setUp(self): - JiraTestCase.setUp(self) + super().setUp() + if self.jira._is_cloud: + self.skipTest("server only test class") self.issue_1 = self.test_manager.project_b_issue1 def test_my_permissions(self): @@ -178,6 +180,44 @@ def test_my_permissions_by_issue(self): self.assertGreaterEqual(len(perms["permissions"]), 10) +class MyPermissionsCloudTests(JiraTestCase): + def setUp(self): + super().setUp() + if not self.jira._is_cloud: + self.skipTest("cloud only test class") + self.issue_1 = self.test_manager.project_b_issue1 + self.permission_keys = "BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS" + + def test_my_permissions(self): + perms = self.jira.my_permissions(permissions=self.permission_keys) + self.assertEqual(len(perms["permissions"]), 3) + + def test_my_permissions_by_project(self): + perms = self.jira.my_permissions( + projectKey=self.test_manager.project_a, permissions=self.permission_keys + ) + self.assertEqual(len(perms["permissions"]), 3) + perms = self.jira.my_permissions( + projectId=self.test_manager.project_a_id, permissions=self.permission_keys + ) + self.assertEqual(len(perms["permissions"]), 3) + + def test_my_permissions_by_issue(self): + perms = self.jira.my_permissions( + issueKey=self.issue_1, permissions=self.permission_keys + ) + self.assertEqual(len(perms["permissions"]), 3) + perms = self.jira.my_permissions( + issueId=self.test_manager.project_b_issue1_obj.id, + permissions=self.permission_keys, + ) + self.assertEqual(len(perms["permissions"]), 3) + + def test_invalid_param_my_permissions_raises_exception(self): + with self.assertRaises(JIRAError): + self.jira.my_permissions("INVALID_PERMISSION") + + class SearchTests(JiraTestCase): def setUp(self): JiraTestCase.setUp(self) From 3f436d7d4a752d2544ea3c7c618883165e5966f5 Mon Sep 17 00:00:00 2001 From: adehad <26027314+adehad@users.noreply.github.com> Date: Tue, 23 Aug 2022 21:32:52 +0100 Subject: [PATCH 2/7] add `@allow_on_cloud` --- tests/tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/tests.py b/tests/tests.py index d611c4c43..0f6f1e897 100755 --- a/tests/tests.py +++ b/tests/tests.py @@ -22,7 +22,7 @@ from jira import JIRA, Issue, JIRAError from jira.client import ResultList from jira.resources import Dashboard, Resource, cls_for_resource -from tests.conftest import JiraTestCase, rndpassword +from tests.conftest import JiraTestCase, allow_on_cloud, rndpassword LOGGER = logging.getLogger(__name__) @@ -180,6 +180,7 @@ def test_my_permissions_by_issue(self): self.assertGreaterEqual(len(perms["permissions"]), 10) +@allow_on_cloud class MyPermissionsCloudTests(JiraTestCase): def setUp(self): super().setUp() From 4b97f12e0c6c59fc2270efed1acdb5888afd3b0b Mon Sep 17 00:00:00 2001 From: Renato Damas Date: Tue, 23 Aug 2022 22:45:53 +0100 Subject: [PATCH 3/7] Update tests/tests.py tag class MyPermissionsCloudTests with marker allow_on_cloud Co-authored-by: Adel Haddad <26027314+adehad@users.noreply.github.com> --- tests/tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/tests.py b/tests/tests.py index d611c4c43..23261d3e1 100755 --- a/tests/tests.py +++ b/tests/tests.py @@ -180,6 +180,7 @@ def test_my_permissions_by_issue(self): self.assertGreaterEqual(len(perms["permissions"]), 10) +@allow_on_cloud class MyPermissionsCloudTests(JiraTestCase): def setUp(self): super().setUp() From 830addc26f0359c23b84dc3f243c348f98a18d0d Mon Sep 17 00:00:00 2001 From: renatodamas Date: Tue, 23 Aug 2022 22:48:19 +0100 Subject: [PATCH 4/7] fix: add missing import --- tests/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests.py b/tests/tests.py index 23261d3e1..0f6f1e897 100755 --- a/tests/tests.py +++ b/tests/tests.py @@ -22,7 +22,7 @@ from jira import JIRA, Issue, JIRAError from jira.client import ResultList from jira.resources import Dashboard, Resource, cls_for_resource -from tests.conftest import JiraTestCase, rndpassword +from tests.conftest import JiraTestCase, allow_on_cloud, rndpassword LOGGER = logging.getLogger(__name__) From f9d0067740916fcad1047828053762d933c1f91a Mon Sep 17 00:00:00 2001 From: Renato Damas Date: Tue, 23 Aug 2022 22:59:18 +0100 Subject: [PATCH 5/7] Update tests/tests.py refactor: remove redundant check to skip cloud-run test Co-authored-by: Adel Haddad <26027314+adehad@users.noreply.github.com> --- tests/tests.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/tests.py b/tests/tests.py index 0f6f1e897..d539a81cd 100755 --- a/tests/tests.py +++ b/tests/tests.py @@ -157,8 +157,6 @@ def test_fields(self): class MyPermissionsServerTests(JiraTestCase): def setUp(self): super().setUp() - if self.jira._is_cloud: - self.skipTest("server only test class") self.issue_1 = self.test_manager.project_b_issue1 def test_my_permissions(self): From 67192e7068c62b3cf23ad1d092d4abc8f0924417 Mon Sep 17 00:00:00 2001 From: renatodamas Date: Tue, 23 Aug 2022 23:02:40 +0100 Subject: [PATCH 6/7] test: add test case for missing required 'permissions' field --- tests/tests.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/tests.py b/tests/tests.py index 0f6f1e897..73d0c0d9f 100755 --- a/tests/tests.py +++ b/tests/tests.py @@ -214,6 +214,10 @@ def test_my_permissions_by_issue(self): ) self.assertEqual(len(perms["permissions"]), 3) + def test_missing_required_param_my_permissions_raises_exception(self): + with self.assertRaises(JIRAError): + self.jira.my_permissions() + def test_invalid_param_my_permissions_raises_exception(self): with self.assertRaises(JIRAError): self.jira.my_permissions("INVALID_PERMISSION") From 7f82941c8539196ad45f3a9f4e153539e2e79da2 Mon Sep 17 00:00:00 2001 From: renatodamas Date: Tue, 23 Aug 2022 23:16:38 +0100 Subject: [PATCH 7/7] refactor: improve docstring to explain 'permissions' field --- jira/client.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jira/client.py b/jira/client.py index af6bf498d..fec48d9cf 100644 --- a/jira/client.py +++ b/jira/client.py @@ -2634,6 +2634,10 @@ def my_permissions( ) -> Dict[str, Dict[str, Dict[str, str]]]: """Get a dict of all available permissions on the server. + ``permissions`` is a comma-separated value list of permission keys that is + required in Jira Cloud. For possible and allowable permission values, see + https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permission-schemes/#built-in-permissions + Args: projectKey (Optional[str]): limit returned permissions to the specified project projectId (Optional[str]): limit returned permissions to the specified project