From 8485b1ec868b0eddacdd60c03aeb33ba072b40ed Mon Sep 17 00:00:00 2001 From: Yugma Moradia Date: Thu, 3 Sep 2020 18:02:12 -0700 Subject: [PATCH 1/8] Adding python sdks for user management --- dynatademand/api.py | 38 +++++++++++++++++++ .../body/upsert_project_permissions.json | 30 +++++++++++++++ .../request/path/get_project_permissions.json | 12 ++++++ .../path/upsert_project_permissions.json | 12 ++++++ .../schemas/request/query/get_roles.json | 16 ++++++++ dynatademand/validator.py | 5 +++ 6 files changed, 113 insertions(+) create mode 100644 dynatademand/schemas/request/body/upsert_project_permissions.json create mode 100644 dynatademand/schemas/request/path/get_project_permissions.json create mode 100644 dynatademand/schemas/request/path/upsert_project_permissions.json create mode 100644 dynatademand/schemas/request/query/get_roles.json diff --git a/dynatademand/api.py b/dynatademand/api.py index da50910..db554f7 100644 --- a/dynatademand/api.py +++ b/dynatademand/api.py @@ -291,6 +291,44 @@ def get_project_detailed_report(self, project_id): ) return self._api_get('/projects/{}/detailedReport'.format(project_id)) + def get_user_info(self): + return self._api_get('/users/info') + + def get_company_users(self): + return self._api_get('/users') + + def get_company_teams(self): + return self._api_get('/teams') + + def get_roles(self, **kwargs): + self.validator.validate_request( + 'get_roles', + query_params=kwargs + ) + return self._api_get('/roles', kwargs) + + def get_project_permissions(self, project_id): + self.validator.validate_request( + 'get_project_permissions', + path_data={'extProjectId': '{}'.format(project_id)}, + ) + return self._api_get('/projects/{}/permissions'.format(project_id)) + + def upsert_project_permissions(self, project_id, upsert_permissions_data): + self.validator.validate_request( + 'upsert_project_permissions', + path_data={'extProjectId': '{}'.format(project_id)}, + request_body=upsert_permissions_data, + ) + response_data = self._api_post('/projects/{}/permissions'.format(project_id), upsert_permissions_data) + if response_data.get('status').get('message') != 'success': + raise DemandAPIError( + "Could not upsert project permissions. Demand API responded with: {}".format( + response_data + ) + ) + return response_data + def add_line_item(self, project_id, lineitem_data): ''' A line item is a project entity that exist for a specific market and diff --git a/dynatademand/schemas/request/body/upsert_project_permissions.json b/dynatademand/schemas/request/body/upsert_project_permissions.json new file mode 100644 index 0000000..0a13463 --- /dev/null +++ b/dynatademand/schemas/request/body/upsert_project_permissions.json @@ -0,0 +1,30 @@ +{ + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "role": { + "type": "string" + } + } + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer" + } + } + } + } + } +} \ No newline at end of file diff --git a/dynatademand/schemas/request/path/get_project_permissions.json b/dynatademand/schemas/request/path/get_project_permissions.json new file mode 100644 index 0000000..fc6287c --- /dev/null +++ b/dynatademand/schemas/request/path/get_project_permissions.json @@ -0,0 +1,12 @@ +{ + "type": "object", + "properties": { + "extProjectId": { + "type": "string", + "required": true + } + }, + "required": [ + "extProjectId" + ] +} \ No newline at end of file diff --git a/dynatademand/schemas/request/path/upsert_project_permissions.json b/dynatademand/schemas/request/path/upsert_project_permissions.json new file mode 100644 index 0000000..fc6287c --- /dev/null +++ b/dynatademand/schemas/request/path/upsert_project_permissions.json @@ -0,0 +1,12 @@ +{ + "type": "object", + "properties": { + "extProjectId": { + "type": "string", + "required": true + } + }, + "required": [ + "extProjectId" + ] +} \ No newline at end of file diff --git a/dynatademand/schemas/request/query/get_roles.json b/dynatademand/schemas/request/query/get_roles.json new file mode 100644 index 0000000..d4eab67 --- /dev/null +++ b/dynatademand/schemas/request/query/get_roles.json @@ -0,0 +1,16 @@ +{ + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the role. eg: manager" + }, + "id": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [] +} \ No newline at end of file diff --git a/dynatademand/validator.py b/dynatademand/validator.py index 7edddff..55f2fe4 100644 --- a/dynatademand/validator.py +++ b/dynatademand/validator.py @@ -17,7 +17,12 @@ 'buy_project': ['path', 'body', ], 'get_project_detailed_report': ['path', ], 'reconcile_project': ['path', ], + 'get_project_permissions':['path', ], + 'upsert_project_permissions':['path', 'body', ], + # Roles + 'get_roles': ['query', ] + # Invoices 'get_invoice': ['path', ], 'get_invoices_summary': ['query', ], From fc6d11362e4baa20dc46e9c2215ac9ffd372623a Mon Sep 17 00:00:00 2001 From: Yugma Moradia Date: Fri, 4 Sep 2020 12:38:12 -0700 Subject: [PATCH 2/8] Adding missing requirements file and adding test cases --- dynatademand/validator.py | 4 +- requirements.txt | 2 + tests/test_files/get_company_users.json | 14 +++++ tests/test_files/get_project_permissions.json | 21 ++++++++ tests/test_files/get_roles.json | 22 ++++++++ tests/test_files/get_teams.json | 11 ++++ tests/test_files/get_user_info.json | 23 ++++++++ .../upsert_project_permissions.json | 21 ++++++++ tests/test_permissions.py | 54 +++++++++++++++++++ tests/test_roles.py | 26 +++++++++ tests/test_teams.py | 26 +++++++++ tests/test_users.py | 36 +++++++++++++ 12 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 requirements.txt create mode 100644 tests/test_files/get_company_users.json create mode 100644 tests/test_files/get_project_permissions.json create mode 100644 tests/test_files/get_roles.json create mode 100644 tests/test_files/get_teams.json create mode 100644 tests/test_files/get_user_info.json create mode 100644 tests/test_files/upsert_project_permissions.json create mode 100644 tests/test_permissions.py create mode 100644 tests/test_roles.py create mode 100644 tests/test_teams.py create mode 100644 tests/test_users.py diff --git a/dynatademand/validator.py b/dynatademand/validator.py index 55f2fe4..b7a0601 100644 --- a/dynatademand/validator.py +++ b/dynatademand/validator.py @@ -21,8 +21,8 @@ 'upsert_project_permissions':['path', 'body', ], # Roles - 'get_roles': ['query', ] - + 'get_roles': ['query', ], + # Invoices 'get_invoice': ['path', ], 'get_invoices_summary': ['query', ], diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..87608f6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +responses>=0.10.0 +jsonschema>=2.5.0 diff --git a/tests/test_files/get_company_users.json b/tests/test_files/get_company_users.json new file mode 100644 index 0000000..91e9dcc --- /dev/null +++ b/tests/test_files/get_company_users.json @@ -0,0 +1,14 @@ +[ + { + "email": "samplifyweb@dynata.com", + "id": 71, + "name": "Bears Beets", + "userName": "battlestargalactica" + }, + { + "email": "samplify@dynata.com", + "id": 102, + "name": "Michael Scott", + "userName": "papercompany" + } +] \ No newline at end of file diff --git a/tests/test_files/get_project_permissions.json b/tests/test_files/get_project_permissions.json new file mode 100644 index 0000000..3ab73ba --- /dev/null +++ b/tests/test_files/get_project_permissions.json @@ -0,0 +1,21 @@ +{ + "currentUser": { + "roles": [ + "PROJECT_MANAGER" + ] + }, + "extProjectId": "1910a9fe-59de-4796-aac6-8b7356a7d340", + "teams": [ + { + "id": 139, + "name": "All Users" + } + ], + "users": [ + { + "id": 71, + "role": "PROJECT_MANAGER", + "username": "samplifyweb" + } + ] +} \ No newline at end of file diff --git a/tests/test_files/get_roles.json b/tests/test_files/get_roles.json new file mode 100644 index 0000000..3c372ff --- /dev/null +++ b/tests/test_files/get_roles.json @@ -0,0 +1,22 @@ +[ + { + "allowedActions": [ + { + "action": "GET PROJECT", + "description": "Ability to view all the project details", + "id": "GET_PROJECT" + }, + { + "action": "LIST ALL PROJECTS", + "description": "Ability to view a list of projects on samplify", + "id": "LIST_ALL_PROJECTS" + } + ], + "assignableRoles": [ + "SURVEY_AUTHOR" + ], + "description": "", + "id": "SURVEY_AUTHOR", + "name": "Survey Author" + } +] \ No newline at end of file diff --git a/tests/test_files/get_teams.json b/tests/test_files/get_teams.json new file mode 100644 index 0000000..1fe435d --- /dev/null +++ b/tests/test_files/get_teams.json @@ -0,0 +1,11 @@ +[ + { + "createdAt": "2020/05/06 15:39:03", + "default": true, + "description": "", + "id": 139, + "name": "That's what she said", + "status": "ACTIVE", + "updatedAt": "2020/05/06 15:39:03" + } +] \ No newline at end of file diff --git a/tests/test_files/get_user_info.json b/tests/test_files/get_user_info.json new file mode 100644 index 0000000..60159c5 --- /dev/null +++ b/tests/test_files/get_user_info.json @@ -0,0 +1,23 @@ +{ + "companies": [ + { + "default": true, + "defaultRole": "PROJECT_MANAGER", + "id": 51, + "name": "Samplify Web", + "teams": [ + { + "default": true, + "id": 139, + "name": "All Users", + "role": "PROJECT_MANAGER", + "status": "ACTIVE" + } + ] + } + ], + "email": "samplifyweb@dynata.com", + "fullName": "Monica Faloola Gellar", + "id": 71, + "userName": "monicagellarrr" +} \ No newline at end of file diff --git a/tests/test_files/upsert_project_permissions.json b/tests/test_files/upsert_project_permissions.json new file mode 100644 index 0000000..3ab73ba --- /dev/null +++ b/tests/test_files/upsert_project_permissions.json @@ -0,0 +1,21 @@ +{ + "currentUser": { + "roles": [ + "PROJECT_MANAGER" + ] + }, + "extProjectId": "1910a9fe-59de-4796-aac6-8b7356a7d340", + "teams": [ + { + "id": 139, + "name": "All Users" + } + ], + "users": [ + { + "id": 71, + "role": "PROJECT_MANAGER", + "username": "samplifyweb" + } + ] +} \ No newline at end of file diff --git a/tests/test_permissions.py b/tests/test_permissions.py new file mode 100644 index 0000000..f2c48c3 --- /dev/null +++ b/tests/test_permissions.py @@ -0,0 +1,54 @@ +# encoding: utf-8 +from __future__ import unicode_literals, print_function + +import json +import unittest +import responses + +from dynatademand.api import DemandAPIClient +from dynatademand.errors import DemandAPIError + +BASE_HOST = "http://test-url.example" + + +class TestUsersEndpoints(unittest.TestCase): + def setUp(self): + self.api = DemandAPIClient(client_id='test', username='testuser', password='testpass', base_host=BASE_HOST) + self.api._access_token = 'Bearer testtoken' + + @responses.activate + def test_get_project_permissions(self): + with open('./tests/test_files/get_project_permissions.json', 'r') as get_permissions_file: + permissions_json = json.load(get_permissions_file) + responses.add(responses.GET, '{}/sample/v1/projects/1/permissions'.format(BASE_HOST), json=permissions_json, status=200) + self.api.get_project_permissions(1) + self.assertEqual(len(responses.calls), 1) + self.assertEqual(responses.calls[0].response.json(), permissions_json) + + @responses.activate + def test_upsert_project_permissions(self): + # Tests updating a project. + with open('./tests/test_files/upsert_project_permissions.json', 'r') as upsert_project_file: + upsert_project_data = json.load(upsert_project_file) + + # Success response + responses.add( + responses.POST, + '{}/sample/v1/projects/1/permissions'.format(BASE_HOST), + json={'status': {'message': 'success'}}, + status=200) + # Error message included + responses.add( + responses.POST, + '{}/sample/v1/projects/1/permissions'.format(BASE_HOST), + json={'status': {'message': 'error'}}, + status=200) + + # Test successful response. + self.api.upsert_project_permissions(1, upsert_project_data) + self.assertEqual(len(responses.calls), 1) + + # Test response with error included. + with self.assertRaises(DemandAPIError): + self.api.upsert_project_permissions(1, upsert_project_data) + self.assertEqual(len(responses.calls), 2) \ No newline at end of file diff --git a/tests/test_roles.py b/tests/test_roles.py new file mode 100644 index 0000000..20b13b1 --- /dev/null +++ b/tests/test_roles.py @@ -0,0 +1,26 @@ +# encoding: utf-8 +from __future__ import unicode_literals, print_function + +import json +import unittest +import responses + +from dynatademand.api import DemandAPIClient + +BASE_HOST = "http://test-url.example" + + +class TestUsersEndpoints(unittest.TestCase): + def setUp(self): + self.api = DemandAPIClient(client_id='test', username='testuser', password='testpass', base_host=BASE_HOST) + self.api._access_token = 'Bearer testtoken' + + @responses.activate + def test_get_roles(self): + # Tests getting all roles. + with open('./tests/test_files/get_roles.json', 'r') as roles: + roles_json = json.load(roles) + # Success response + responses.add(responses.GET,'{}/sample/v1/roles'.format(BASE_HOST), json=roles_json, status=200) + self.api.get_roles() + self.assertEqual(len(responses.calls), 1) \ No newline at end of file diff --git a/tests/test_teams.py b/tests/test_teams.py new file mode 100644 index 0000000..7b48db7 --- /dev/null +++ b/tests/test_teams.py @@ -0,0 +1,26 @@ +# encoding: utf-8 +from __future__ import unicode_literals, print_function + +import json +import unittest +import responses + +from dynatademand.api import DemandAPIClient + +BASE_HOST = "http://test-url.example" + + +class TestUsersEndpoints(unittest.TestCase): + def setUp(self): + self.api = DemandAPIClient(client_id='test', username='testuser', password='testpass', base_host=BASE_HOST) + self.api._access_token = 'Bearer testtoken' + + @responses.activate + def test_get_teams(self): + # Tests getting all teams. + with open('./tests/test_files/get_teams.json', 'r') as teams: + teams_json = json.load(teams) + # Success response + responses.add(responses.GET,'{}/sample/v1/teams'.format(BASE_HOST), json=teams_json, status=200) + self.api.get_company_teams() + self.assertEqual(len(responses.calls), 1) \ No newline at end of file diff --git a/tests/test_users.py b/tests/test_users.py new file mode 100644 index 0000000..e689ae4 --- /dev/null +++ b/tests/test_users.py @@ -0,0 +1,36 @@ +# encoding: utf-8 +from __future__ import unicode_literals, print_function + +import json +import unittest +import responses + +from dynatademand.api import DemandAPIClient + +BASE_HOST = "http://test-url.example" + + +class TestUsersEndpoints(unittest.TestCase): + def setUp(self): + self.api = DemandAPIClient(client_id='test', username='testuser', password='testpass', base_host=BASE_HOST) + self.api._access_token = 'Bearer testtoken' + + @responses.activate + def test_get_user_info(self): + # Tests getting currently logged in user info. + with open('./tests/test_files/get_user_info.json', 'r') as user_info: + user_info_json = json.load(user_info) + # Success response + responses.add(responses.GET,'{}/sample/v1/users/info'.format(BASE_HOST), json=user_info_json, status=200) + self.api.get_user_info() + self.assertEqual(len(responses.calls), 1) + + @responses.activate + def test_get_company_users(self): + # Tests getting all company users. + with open('./tests/test_files/get_company_users.json', 'r') as company_users: + company_users_json = json.load(company_users) + # Success response + responses.add(responses.GET,'{}/sample/v1/users'.format(BASE_HOST), json=company_users_json, status=200) + self.api.get_company_users() + self.assertEqual(len(responses.calls), 1) \ No newline at end of file From c0b60c3fbcbe75e57663d7b519c5f6073d422c4d Mon Sep 17 00:00:00 2001 From: Yugma Moradia Date: Fri, 4 Sep 2020 12:54:08 -0700 Subject: [PATCH 3/8] Fixing the indentations --- .../schemas/request/body/upsert_project_permissions.json | 2 +- .../schemas/request/path/get_project_permissions.json | 2 +- .../schemas/request/path/upsert_project_permissions.json | 2 +- dynatademand/schemas/request/query/get_roles.json | 2 +- tests/test_files/get_company_users.json | 2 +- tests/test_files/get_project_permissions.json | 2 +- tests/test_files/get_roles.json | 2 +- tests/test_files/get_teams.json | 2 +- tests/test_files/get_user_info.json | 2 +- tests/test_files/upsert_project_permissions.json | 2 +- tests/test_permissions.py | 4 ++-- tests/test_roles.py | 4 ++-- tests/test_teams.py | 4 ++-- tests/test_users.py | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dynatademand/schemas/request/body/upsert_project_permissions.json b/dynatademand/schemas/request/body/upsert_project_permissions.json index 0a13463..10416d2 100644 --- a/dynatademand/schemas/request/body/upsert_project_permissions.json +++ b/dynatademand/schemas/request/body/upsert_project_permissions.json @@ -27,4 +27,4 @@ } } } -} \ No newline at end of file +} diff --git a/dynatademand/schemas/request/path/get_project_permissions.json b/dynatademand/schemas/request/path/get_project_permissions.json index fc6287c..42fe507 100644 --- a/dynatademand/schemas/request/path/get_project_permissions.json +++ b/dynatademand/schemas/request/path/get_project_permissions.json @@ -9,4 +9,4 @@ "required": [ "extProjectId" ] -} \ No newline at end of file +} diff --git a/dynatademand/schemas/request/path/upsert_project_permissions.json b/dynatademand/schemas/request/path/upsert_project_permissions.json index fc6287c..42fe507 100644 --- a/dynatademand/schemas/request/path/upsert_project_permissions.json +++ b/dynatademand/schemas/request/path/upsert_project_permissions.json @@ -9,4 +9,4 @@ "required": [ "extProjectId" ] -} \ No newline at end of file +} diff --git a/dynatademand/schemas/request/query/get_roles.json b/dynatademand/schemas/request/query/get_roles.json index d4eab67..363c981 100644 --- a/dynatademand/schemas/request/query/get_roles.json +++ b/dynatademand/schemas/request/query/get_roles.json @@ -13,4 +13,4 @@ } }, "required": [] -} \ No newline at end of file +} diff --git a/tests/test_files/get_company_users.json b/tests/test_files/get_company_users.json index 91e9dcc..f8fe240 100644 --- a/tests/test_files/get_company_users.json +++ b/tests/test_files/get_company_users.json @@ -11,4 +11,4 @@ "name": "Michael Scott", "userName": "papercompany" } -] \ No newline at end of file +] diff --git a/tests/test_files/get_project_permissions.json b/tests/test_files/get_project_permissions.json index 3ab73ba..e9a6d36 100644 --- a/tests/test_files/get_project_permissions.json +++ b/tests/test_files/get_project_permissions.json @@ -18,4 +18,4 @@ "username": "samplifyweb" } ] -} \ No newline at end of file +} diff --git a/tests/test_files/get_roles.json b/tests/test_files/get_roles.json index 3c372ff..dd41fa9 100644 --- a/tests/test_files/get_roles.json +++ b/tests/test_files/get_roles.json @@ -19,4 +19,4 @@ "id": "SURVEY_AUTHOR", "name": "Survey Author" } -] \ No newline at end of file +] diff --git a/tests/test_files/get_teams.json b/tests/test_files/get_teams.json index 1fe435d..5e3e868 100644 --- a/tests/test_files/get_teams.json +++ b/tests/test_files/get_teams.json @@ -8,4 +8,4 @@ "status": "ACTIVE", "updatedAt": "2020/05/06 15:39:03" } -] \ No newline at end of file +] diff --git a/tests/test_files/get_user_info.json b/tests/test_files/get_user_info.json index 60159c5..52e893f 100644 --- a/tests/test_files/get_user_info.json +++ b/tests/test_files/get_user_info.json @@ -20,4 +20,4 @@ "fullName": "Monica Faloola Gellar", "id": 71, "userName": "monicagellarrr" -} \ No newline at end of file +} diff --git a/tests/test_files/upsert_project_permissions.json b/tests/test_files/upsert_project_permissions.json index 3ab73ba..e9a6d36 100644 --- a/tests/test_files/upsert_project_permissions.json +++ b/tests/test_files/upsert_project_permissions.json @@ -18,4 +18,4 @@ "username": "samplifyweb" } ] -} \ No newline at end of file +} diff --git a/tests/test_permissions.py b/tests/test_permissions.py index f2c48c3..6cea3d1 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -11,7 +11,7 @@ BASE_HOST = "http://test-url.example" -class TestUsersEndpoints(unittest.TestCase): +class TestProjectPermissionsEndpoints(unittest.TestCase): def setUp(self): self.api = DemandAPIClient(client_id='test', username='testuser', password='testpass', base_host=BASE_HOST) self.api._access_token = 'Bearer testtoken' @@ -51,4 +51,4 @@ def test_upsert_project_permissions(self): # Test response with error included. with self.assertRaises(DemandAPIError): self.api.upsert_project_permissions(1, upsert_project_data) - self.assertEqual(len(responses.calls), 2) \ No newline at end of file + self.assertEqual(len(responses.calls), 2) diff --git a/tests/test_roles.py b/tests/test_roles.py index 20b13b1..4bb3c45 100644 --- a/tests/test_roles.py +++ b/tests/test_roles.py @@ -10,7 +10,7 @@ BASE_HOST = "http://test-url.example" -class TestUsersEndpoints(unittest.TestCase): +class TestRolesEndpoints(unittest.TestCase): def setUp(self): self.api = DemandAPIClient(client_id='test', username='testuser', password='testpass', base_host=BASE_HOST) self.api._access_token = 'Bearer testtoken' @@ -23,4 +23,4 @@ def test_get_roles(self): # Success response responses.add(responses.GET,'{}/sample/v1/roles'.format(BASE_HOST), json=roles_json, status=200) self.api.get_roles() - self.assertEqual(len(responses.calls), 1) \ No newline at end of file + self.assertEqual(len(responses.calls), 1) diff --git a/tests/test_teams.py b/tests/test_teams.py index 7b48db7..cb6ff24 100644 --- a/tests/test_teams.py +++ b/tests/test_teams.py @@ -10,7 +10,7 @@ BASE_HOST = "http://test-url.example" -class TestUsersEndpoints(unittest.TestCase): +class TestTeamsEndpoints(unittest.TestCase): def setUp(self): self.api = DemandAPIClient(client_id='test', username='testuser', password='testpass', base_host=BASE_HOST) self.api._access_token = 'Bearer testtoken' @@ -23,4 +23,4 @@ def test_get_teams(self): # Success response responses.add(responses.GET,'{}/sample/v1/teams'.format(BASE_HOST), json=teams_json, status=200) self.api.get_company_teams() - self.assertEqual(len(responses.calls), 1) \ No newline at end of file + self.assertEqual(len(responses.calls), 1) diff --git a/tests/test_users.py b/tests/test_users.py index e689ae4..34da080 100644 --- a/tests/test_users.py +++ b/tests/test_users.py @@ -33,4 +33,4 @@ def test_get_company_users(self): # Success response responses.add(responses.GET,'{}/sample/v1/users'.format(BASE_HOST), json=company_users_json, status=200) self.api.get_company_users() - self.assertEqual(len(responses.calls), 1) \ No newline at end of file + self.assertEqual(len(responses.calls), 1) From da585d9aafce661aa7af3e6943350b6aed2051b3 Mon Sep 17 00:00:00 2001 From: Yugma Moradia Date: Fri, 4 Sep 2020 12:58:48 -0700 Subject: [PATCH 4/8] Fixing the missing spaces --- dynatademand/validator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dynatademand/validator.py b/dynatademand/validator.py index b7a0601..b1886ea 100644 --- a/dynatademand/validator.py +++ b/dynatademand/validator.py @@ -17,8 +17,8 @@ 'buy_project': ['path', 'body', ], 'get_project_detailed_report': ['path', ], 'reconcile_project': ['path', ], - 'get_project_permissions':['path', ], - 'upsert_project_permissions':['path', 'body', ], + 'get_project_permissions': ['path', ], + 'upsert_project_permissions': ['path', 'body', ], # Roles 'get_roles': ['query', ], From a470b85ec154802685ca0aa0290b42ecde8a7e81 Mon Sep 17 00:00:00 2001 From: Yugma Moradia Date: Fri, 4 Sep 2020 13:05:17 -0700 Subject: [PATCH 5/8] Fixing length of line --- dynatademand/validator.py | 2 +- tests/test_permissions.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dynatademand/validator.py b/dynatademand/validator.py index b1886ea..5070380 100644 --- a/dynatademand/validator.py +++ b/dynatademand/validator.py @@ -20,7 +20,7 @@ 'get_project_permissions': ['path', ], 'upsert_project_permissions': ['path', 'body', ], - # Roles + # Roles 'get_roles': ['query', ], # Invoices diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 6cea3d1..8355317 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -20,7 +20,8 @@ def setUp(self): def test_get_project_permissions(self): with open('./tests/test_files/get_project_permissions.json', 'r') as get_permissions_file: permissions_json = json.load(get_permissions_file) - responses.add(responses.GET, '{}/sample/v1/projects/1/permissions'.format(BASE_HOST), json=permissions_json, status=200) + responses.add(responses.GET, '{}/sample/v1/projects/1/permissions'.format(BASE_HOST), + json=permissions_json, status=200) self.api.get_project_permissions(1) self.assertEqual(len(responses.calls), 1) self.assertEqual(responses.calls[0].response.json(), permissions_json) From d6607e2f8455765efc7a74531c65d9bd944fe225 Mon Sep 17 00:00:00 2001 From: Yugma Moradia Date: Fri, 18 Sep 2020 11:18:19 -0700 Subject: [PATCH 6/8] Changing the userinfo path --- dynatademand/api.py | 2 +- tests/test_users.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dynatademand/api.py b/dynatademand/api.py index db554f7..bcbe088 100644 --- a/dynatademand/api.py +++ b/dynatademand/api.py @@ -292,7 +292,7 @@ def get_project_detailed_report(self, project_id): return self._api_get('/projects/{}/detailedReport'.format(project_id)) def get_user_info(self): - return self._api_get('/users/info') + return self._api_get('/user') def get_company_users(self): return self._api_get('/users') diff --git a/tests/test_users.py b/tests/test_users.py index 34da080..b443249 100644 --- a/tests/test_users.py +++ b/tests/test_users.py @@ -21,7 +21,7 @@ def test_get_user_info(self): with open('./tests/test_files/get_user_info.json', 'r') as user_info: user_info_json = json.load(user_info) # Success response - responses.add(responses.GET,'{}/sample/v1/users/info'.format(BASE_HOST), json=user_info_json, status=200) + responses.add(responses.GET,'{}/sample/v1/user'.format(BASE_HOST), json=user_info_json, status=200) self.api.get_user_info() self.assertEqual(len(responses.calls), 1) From 7bc9f8e7ab42f2423bf14fa47b52631fdc4214f1 Mon Sep 17 00:00:00 2001 From: Ridley Larsen Date: Wed, 23 Sep 2020 17:27:00 -0600 Subject: [PATCH 7/8] Fixed linting errors. --- dynatademand/api.py | 4 ++-- tests/test_permissions.py | 8 ++++++-- tests/test_roles.py | 2 +- tests/test_teams.py | 2 +- tests/test_users.py | 4 ++-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/dynatademand/api.py b/dynatademand/api.py index bcbe088..939e90a 100644 --- a/dynatademand/api.py +++ b/dynatademand/api.py @@ -316,7 +316,7 @@ def get_project_permissions(self, project_id): def upsert_project_permissions(self, project_id, upsert_permissions_data): self.validator.validate_request( - 'upsert_project_permissions', + 'upsert_project_permissions', path_data={'extProjectId': '{}'.format(project_id)}, request_body=upsert_permissions_data, ) @@ -562,7 +562,7 @@ def delete_template(self, id): self.validator.validate_request( 'delete_template', path_data={'id': '{}'.format(id)}, - ) + ) return self._api_delete('/templates/quotaplan/{}'.format(id)) def get_templates(self, country, lang, **kwargs): diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 8355317..60ff85f 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -20,8 +20,12 @@ def setUp(self): def test_get_project_permissions(self): with open('./tests/test_files/get_project_permissions.json', 'r') as get_permissions_file: permissions_json = json.load(get_permissions_file) - responses.add(responses.GET, '{}/sample/v1/projects/1/permissions'.format(BASE_HOST), - json=permissions_json, status=200) + responses.add( + responses.GET, + '{}/sample/v1/projects/1/permissions'.format(BASE_HOST), + json=permissions_json, + status=200 + ) self.api.get_project_permissions(1) self.assertEqual(len(responses.calls), 1) self.assertEqual(responses.calls[0].response.json(), permissions_json) diff --git a/tests/test_roles.py b/tests/test_roles.py index 4bb3c45..5bfc717 100644 --- a/tests/test_roles.py +++ b/tests/test_roles.py @@ -21,6 +21,6 @@ def test_get_roles(self): with open('./tests/test_files/get_roles.json', 'r') as roles: roles_json = json.load(roles) # Success response - responses.add(responses.GET,'{}/sample/v1/roles'.format(BASE_HOST), json=roles_json, status=200) + responses.add(responses.GET, '{}/sample/v1/roles'.format(BASE_HOST), json=roles_json, status=200) self.api.get_roles() self.assertEqual(len(responses.calls), 1) diff --git a/tests/test_teams.py b/tests/test_teams.py index cb6ff24..47b987e 100644 --- a/tests/test_teams.py +++ b/tests/test_teams.py @@ -21,6 +21,6 @@ def test_get_teams(self): with open('./tests/test_files/get_teams.json', 'r') as teams: teams_json = json.load(teams) # Success response - responses.add(responses.GET,'{}/sample/v1/teams'.format(BASE_HOST), json=teams_json, status=200) + responses.add(responses.GET, '{}/sample/v1/teams'.format(BASE_HOST), json=teams_json, status=200) self.api.get_company_teams() self.assertEqual(len(responses.calls), 1) diff --git a/tests/test_users.py b/tests/test_users.py index b443249..486ccd8 100644 --- a/tests/test_users.py +++ b/tests/test_users.py @@ -21,7 +21,7 @@ def test_get_user_info(self): with open('./tests/test_files/get_user_info.json', 'r') as user_info: user_info_json = json.load(user_info) # Success response - responses.add(responses.GET,'{}/sample/v1/user'.format(BASE_HOST), json=user_info_json, status=200) + responses.add(responses.GET, '{}/sample/v1/user'.format(BASE_HOST), json=user_info_json, status=200) self.api.get_user_info() self.assertEqual(len(responses.calls), 1) @@ -31,6 +31,6 @@ def test_get_company_users(self): with open('./tests/test_files/get_company_users.json', 'r') as company_users: company_users_json = json.load(company_users) # Success response - responses.add(responses.GET,'{}/sample/v1/users'.format(BASE_HOST), json=company_users_json, status=200) + responses.add(responses.GET, '{}/sample/v1/users'.format(BASE_HOST), json=company_users_json, status=200) self.api.get_company_users() self.assertEqual(len(responses.calls), 1) From bb1b277197616d54cacf03a4a2ca0fa61005721c Mon Sep 17 00:00:00 2001 From: Ridley Larsen Date: Wed, 23 Sep 2020 17:46:30 -0600 Subject: [PATCH 8/8] Added correct version of pyrsistent to pyproject.toml for 2.7.18 compatibility. --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 81303fd..d02265e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ pytest = "4.6.6" jsonschema = "3.2.0" pytest-runner = "5.2" flake8 = "^3.7.9" +pyrsistent = "0.14.11" [build-system] requires = ["poetry>=0.12"]