Skip to content

Commit

Permalink
added project delete functions
Browse files Browse the repository at this point in the history
  • Loading branch information
wogsland committed Jan 22, 2020
1 parent 49a6664 commit 4bc0b06
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
16 changes: 16 additions & 0 deletions CmixAPIClient/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,22 @@ def api_get(self, endpoint, error=''):
)
return response.json()

def api_delete(self, endpoint, error=''):
self.check_auth_headers()
url = '{}/{}'.format(CMIX_SERVICES['survey'][self.url_type], endpoint)
response = requests.delete(url, headers=self._authentication_headers)
if response.status_code != 200:
if '' == error:
error = 'CMIX returned a non-200 response code'
raise CmixError(
'{}: {} and error {}'.format(
error,
response.status_code,
response.text
)
)
return response.json()

def get_surveys(self, status, *args, **kwargs):
'''kwargs:
Expand Down
12 changes: 12 additions & 0 deletions CmixAPIClient/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,18 @@ def __init__(self, client, project_id):
self.client = client
self.project_id = project_id

def delete_project(self):
project_endpoint = 'projects/{}'.format(self.project_id)
project_error = 'CMIX returned a non-200 response code while deleting project'
project_response = self.client.api_delete(project_endpoint, project_error)
return project_response

def delete_group(self, group_id):
project_endpoint = 'projects/{}/groups/{}'.format(self.project_id, group_id)
project_error = 'CMIX returned a non-200 response code while deleting group'
project_response = self.client.api_delete(project_endpoint, project_error)
return project_response

def get_project(self):
project_endpoint = 'projects/{}'.format(self.project_id)
project_error = 'CMIX returned a non-200 response code while getting project'
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ A Python client library for the [Dynata Cmix API](https://wiki2.criticalmix.net/

### CmixProject

delete_group(group_id)
delete_project()
get_full_links()
get_groups()
get_links()
Expand Down
39 changes: 39 additions & 0 deletions tests/test_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,45 @@ def helper_get(self, function_name, endpoint):
with self.assertRaises(CmixError):
func()

def helper_delete(self, function_name, endpoint, group_id=None):
project = CmixProject(self.cmix_api, self.project_id)
func = getattr(project, function_name)

# success case
with mock.patch('CmixAPIClient.api.requests') as mock_request:
mock_delete = mock.Mock()
mock_delete.status_code = 200
mock_delete.json.return_value = {}
mock_request.delete.return_value = mock_delete

if group_id is not None:
func(group_id)
else:
func()

base_url = CMIX_SERVICES['survey']['BASE_URL']
project_url = '{}/projects{}'.format(base_url, endpoint)
mock_request.delete.assert_any_call(project_url, headers=self.cmix_api._authentication_headers)

# error case (survey not found)
with mock.patch('CmixAPIClient.api.requests') as mock_request:
mock_delete = mock.Mock()
mock_delete.status_code = 404
mock_delete.json.return_value = {}
mock_request.delete.return_value = mock_delete

with self.assertRaises(CmixError):
if group_id is not None:
func(group_id)
else:
func()

def test_delete_group(self):
self.helper_delete('delete_group', '/{}/groups/{}'.format(self.project_id, 13), 13)

def test_delete_project(self):
self.helper_delete('delete_project', '/{}'.format(self.project_id))

def test_get_project(self):
self.helper_get('get_project', '/{}'.format(self.project_id))

Expand Down

0 comments on commit 4bc0b06

Please sign in to comment.