forked from dynata/python-demandapi-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_projects.py
More file actions
135 lines (120 loc) · 5.34 KB
/
test_projects.py
File metadata and controls
135 lines (120 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# 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 TestProjectEndpoints(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(self):
with open('./tests/test_files/get_project.json', 'r') as project_file:
project_json = json.load(project_file)
responses.add(responses.GET, '{}/sample/v1/projects/1'.format(BASE_HOST), json=project_json, status=200)
self.api.get_project(1)
self.assertEqual(len(responses.calls), 1)
self.assertEqual(responses.calls[0].response.json(), project_json)
@responses.activate
def test_get_projects(self):
with open('./tests/test_files/get_projects.json', 'r') as project_file:
project_json = json.load(project_file)
responses.add(responses.GET, '{}/sample/v1/projects'.format(BASE_HOST), json=project_json, status=200)
self.api.get_projects()
self.assertEqual(len(responses.calls), 1)
self.assertEqual(responses.calls[0].response.json(), project_json)
@responses.activate
def test_get_project_detailed_report(self):
with open('./tests/test_files/get_project_detailed_report.json', 'r') as project_detailed_report_file:
project_detailed_report_json = json.load(project_detailed_report_file)
responses.add(
responses.GET,
'{}/sample/v1/projects/1/detailedReport'.format(BASE_HOST),
json=project_detailed_report_json,
status=200)
self.api.get_project_detailed_report(1)
self.assertEqual(len(responses.calls), 1)
self.assertEqual(responses.calls[0].response.json(), project_detailed_report_json)
@responses.activate
def test_create_project(self):
# Tests creating a project. This also tests validating the project data as part of `api.create_project`.
with open('./tests/test_files/create_project.json', 'r') as new_project_file:
new_project_data = json.load(new_project_file)
responses.add(
responses.POST,
'{}/sample/v1/projects'.format(BASE_HOST),
json={'status': {'message': 'success'}},
status=200)
self.api.create_project(new_project_data)
self.assertEqual(len(responses.calls), 1)
@responses.activate
def test_buy_project(self):
# Tests buying a project.
with open('./tests/test_files/buy_project.json', 'r') as buy_project_file:
buy_project_data = json.load(buy_project_file)
# Success response
responses.add(
responses.POST,
'{}/sample/v1/projects/24/buy'.format(BASE_HOST),
json={'status': {'message': 'success'}},
status=200)
# Response with error status
responses.add(
responses.POST,
'{}/sample/v1/projects/24/buy'.format(BASE_HOST),
json={'status': {'message': 'error'}},
status=200)
# Test success response
self.api.buy_project(24, buy_project_data)
self.assertEqual(len(responses.calls), 1)
# Test error response
with self.assertRaises(DemandAPIError):
self.api.buy_project(24, buy_project_data)
self.assertEqual(len(responses.calls), 2)
@responses.activate
def test_close_project(self):
# Tests closing a project.
responses.add(
responses.POST,
'{}/sample/v1/projects/24/close'.format(BASE_HOST),
json={'status': {'message': 'success'}},
status=200
)
responses.add(
responses.POST,
'{}/sample/v1/projects/24/close'.format(BASE_HOST),
json={'status': {'message': 'error'}},
status=200
)
self.api.close_project(24)
self.assertEqual(len(responses.calls), 1)
with self.assertRaises(DemandAPIError):
self.api.close_project(24)
self.assertEqual(len(responses.calls), 2)
@responses.activate
def test_update_project(self):
# Tests creating a project. This also tests validating the project data as part of `api.create_project`.
with open('./tests/test_files/update_project.json', 'r') as update_project_file:
update_project_data = json.load(update_project_file)
# Success response
responses.add(
responses.POST,
'{}/sample/v1/projects/24'.format(BASE_HOST),
json={'status': {'message': 'success'}},
status=200)
# Error message included
responses.add(
responses.POST,
'{}/sample/v1/projects/24'.format(BASE_HOST),
json={'status': {'message': 'error'}},
status=200)
# Test successful response.
self.api.update_project(24, update_project_data)
self.assertEqual(len(responses.calls), 1)
# Test response with error included.
with self.assertRaises(DemandAPIError):
self.api.update_project(24, update_project_data)
self.assertEqual(len(responses.calls), 2)