Skip to content

Commit 104d9bd

Browse files
Merge pull request #12 from dynata/POP-2287
[POP-2287] Added close project function and tests.
2 parents 6d29cf3 + fb5703a commit 104d9bd

File tree

4 files changed

+50
-0
lines changed

4 files changed

+50
-0
lines changed

dynatademand/api.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,22 @@ def create_project(self, project_data):
187187
)
188188
return response_data
189189

190+
def close_project(self, project_id):
191+
# Closes the requested project. Once a project is closed, all traffic
192+
# is stopped, and the project is automatically sent for invoicing.
193+
self.validator.validate_request(
194+
'close_project',
195+
path_data={'extProjectId': '{}'.format(project_id)},
196+
)
197+
response_data = self._api_post('/projects/{}/close'.format(project_id), {})
198+
if response_data.get('status').get('message') != 'success':
199+
raise DemandAPIError(
200+
"Could not close project. Demand API responded with: {}".format(
201+
response_data
202+
)
203+
)
204+
return response_data
205+
190206
def get_project(self, project_id):
191207
self.validator.validate_request(
192208
'get_project',
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"type": "object",
3+
"properties": {
4+
"extProjectId": {
5+
"type": "string",
6+
"required": true
7+
}
8+
},
9+
"required": [
10+
"extProjectId"
11+
]
12+
}

dynatademand/validator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
'create_project': ['body', ],
1212
'get_projects': ['query', ],
1313
'get_project': ['path', ],
14+
'close_project': ['path', ],
1415
'update_project': ['path', 'body', ],
1516
'get_project_detailed_report': ['path', ],
1617

tests/test_projects.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,27 @@ def test_create_project(self):
6060
self.api.create_project(new_project_data)
6161
self.assertEqual(len(responses.calls), 1)
6262

63+
@responses.activate
64+
def test_close_project(self):
65+
# Tests closing a project.
66+
responses.add(
67+
responses.POST,
68+
'{}/sample/v1/projects/24/close'.format(BASE_HOST),
69+
json={'status': {'message': 'success'}},
70+
status=200
71+
)
72+
responses.add(
73+
responses.POST,
74+
'{}/sample/v1/projects/24/close'.format(BASE_HOST),
75+
json={'status': {'message': 'error'}},
76+
status=200
77+
)
78+
self.api.close_project(24)
79+
self.assertEqual(len(responses.calls), 1)
80+
with self.assertRaises(DemandAPIError):
81+
self.api.close_project(24)
82+
self.assertEqual(len(responses.calls), 2)
83+
6384
@responses.activate
6485
def test_update_project(self):
6586
# Tests creating a project. This also tests validating the project data as part of `api.create_project`.

0 commit comments

Comments
 (0)