6 import json |
6 import json |
7 |
7 |
8 User = get_user_model() |
8 User = get_user_model() |
9 |
9 |
10 class WorkspaceTests(APITestCase): |
10 class WorkspaceTests(APITestCase): |
11 |
11 |
12 def setUp(self): |
12 def setUp(self): |
13 User.objects.create_superuser("blop", "blop@blop.com", "blop") |
13 User.objects.create_superuser("blop", "blop@blop.com", "blop") |
14 self.user = User.objects.get_by_natural_key("blop") |
14 self.user = User.objects.get_by_natural_key("blop") |
15 _ = self.client.login(username="blop", password="blop") |
15 _ = self.client.login(username="blop", password="blop") |
16 User.objects.create_user("blip", "blip@blip.com", "blip") |
16 |
17 self.unauthorized_user = User.objects.get_by_natural_key("blip") |
|
18 |
|
19 def test_post_workspace(self): |
17 def test_post_workspace(self): |
20 |
18 |
21 ################################################### |
19 ################################################### |
22 # POSTing test Workspace |
20 # POSTing test Workspace |
23 ################################################### |
21 ################################################### |
24 |
22 |
25 post_url = reverse("v1.0:workspace_list") |
23 post_url = reverse("v1.0:workspace_list") |
26 test_title = "bleh_title" |
24 test_title = "bleh_title" |
27 data = {"title": test_title} |
25 data = {"title": test_title} |
28 post_response = self.client.post(post_url, data, format="json") |
26 post_response = self.client.post(post_url, data, format="json") |
29 post_response_dict = json.loads(post_response.content.decode()) |
27 post_response_dict = json.loads(post_response.content.decode()) |
30 self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) |
28 self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) |
31 |
29 |
32 # Checking data |
30 # Checking data |
33 # in the response |
31 # in the response |
34 self.assertEqual(post_response_dict.get("workspace_created_by"), getattr(self.user, User.USERNAME_FIELD)) |
32 self.assertEqual(post_response_dict.get("workspace_created_by"), getattr(self.user, User.USERNAME_FIELD)) |
35 self.assertEqual(post_response_dict.get("title"), test_title) |
33 self.assertEqual(post_response_dict.get("title"), test_title) |
36 # in the database |
34 # in the database |
37 created_workspace_guid = post_response_dict.get("id") |
35 created_workspace_guid = post_response_dict.get("id") |
38 created_workspace = Workspace.objects.get(workspace_guid=created_workspace_guid) |
36 created_workspace = Workspace.objects.get(workspace_guid=created_workspace_guid) |
39 self.assertEqual(getattr(created_workspace.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
37 self.assertEqual(getattr(created_workspace.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
40 self.assertEqual(created_workspace.title, test_title) |
38 self.assertEqual(created_workspace.title, test_title) |
41 |
39 |
42 # Checking permission |
40 # Checking permission |
43 self.assertTrue(self.user.has_perm("view_workspace", created_workspace)) |
41 self.assertTrue(self.user.has_perm("view_workspace", created_workspace)) |
44 |
42 |
45 ################################################### |
43 |
46 # try POSTing with unauthorized user |
|
47 ################################################### |
|
48 |
|
49 _ = self.client.login(username="blip", password="blip") |
|
50 post_url = reverse("v1.0:workspace_list") |
|
51 data = {"title": "wont_work"} |
|
52 post_response = self.client.post(post_url, data, format="json") |
|
53 self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN) |
|
54 |
|
55 |
|
56 def test_get_workspace_list(self): |
44 def test_get_workspace_list(self): |
57 |
45 |
58 ################################################### |
46 ################################################### |
59 # POSTing new Workspaces |
47 # POSTing new Workspaces |
60 ################################################### |
48 ################################################### |
61 |
49 |
62 post_url = reverse("v1.0:workspace_list") |
50 post_url = reverse("v1.0:workspace_list") |
63 first_test_title = "bleh_title_2" |
51 first_test_title = "bleh_title_2" |
64 second_test_title = "bleh_title_3" |
52 second_test_title = "bleh_title_3" |
65 first_data = {"title": first_test_title} |
53 first_data = {"title": first_test_title} |
66 second_data = {"title": second_test_title} |
54 second_data = {"title": second_test_title} |
67 self.client.post(post_url, first_data, format="json") |
55 self.client.post(post_url, first_data, format="json") |
68 self.client.post(post_url, second_data, format="json") |
56 self.client.post(post_url, second_data, format="json") |
69 |
57 |
70 ################################################### |
58 ################################################### |
71 # GETting Workspaces |
59 # GETting Workspaces |
72 ################################################### |
60 ################################################### |
73 |
61 |
74 get_url = post_url |
62 get_url = post_url |
75 get_response = self.client.get(get_url, format=json) |
63 get_response = self.client.get(get_url, format=json) |
76 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
64 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
77 |
65 |
78 # Check data |
66 # Check data |
79 get_response_content = json.loads(get_response.content.decode()) # Should be a list |
67 get_response_content = json.loads(get_response.content.decode()) # Should be a list |
80 self.assertTrue(isinstance(get_response_content, list)) |
68 self.assertTrue(isinstance(get_response_content, list)) |
81 self.assertEqual(len(get_response_content), 2) |
69 self.assertEqual(len(get_response_content), 2) |
82 |
70 |
83 def test_get_workspace(self): |
71 def test_get_workspace(self): |
84 |
72 |
85 ################################################### |
73 ################################################### |
86 # POSTing test Workspace |
74 # POSTing test Workspace |
87 ################################################### |
75 ################################################### |
88 |
76 |
89 workspace_post_url = reverse("v1.0:workspace_list") |
77 workspace_post_url = reverse("v1.0:workspace_list") |
90 test_title = "bleh_title" |
78 test_title = "bleh_title" |
91 data = {"title": test_title} |
79 data = {"title": test_title} |
92 post_response = self.client.post(workspace_post_url, data, format="json") |
80 post_response = self.client.post(workspace_post_url, data, format="json") |
93 post_response_dict = json.loads(post_response.content.decode()) |
81 post_response_dict = json.loads(post_response.content.decode()) |
94 test_workspace_guid = post_response_dict.get("id") |
82 test_workspace_guid = post_response_dict.get("id") |
95 |
83 |
96 ################################################### |
84 ################################################### |
97 # POSTing new Renkans into test Workspace |
85 # POSTing new Renkans into test Workspace |
98 ################################################### |
86 ################################################### |
99 |
87 |
100 renkan_post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": test_workspace_guid}) |
88 renkan_post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": test_workspace_guid}) |
101 first_test_title = "bleh_title" |
89 first_test_title = "bleh_title" |
102 second_test_title = "bleh_title_2" |
90 second_test_title = "bleh_title_2" |
103 first_data = {"title": first_test_title} |
91 first_data = {"title": first_test_title} |
104 second_data = {"title": second_test_title} |
92 second_data = {"title": second_test_title} |
105 self.client.post(renkan_post_url, first_data, format="json") |
93 self.client.post(renkan_post_url, first_data, format="json") |
106 self.client.post(renkan_post_url, second_data, format="json") |
94 self.client.post(renkan_post_url, second_data, format="json") |
107 |
95 |
108 ################################################### |
96 ################################################### |
109 # GETting test Workspace |
97 # GETting test Workspace |
110 ################################################### |
98 ################################################### |
111 |
99 |
112 get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid}) |
100 get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid}) |
113 get_response = self.client.get(get_url, format="json") |
101 get_response = self.client.get(get_url, format="json") |
114 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
102 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
115 |
103 |
116 # Checking GET data |
104 # Checking GET data |
117 get_response_dict = json.loads(get_response.content.decode()) |
105 get_response_dict = json.loads(get_response.content.decode()) |
118 self.assertEqual(test_workspace_guid, get_response_dict.get("id", "")) |
106 self.assertEqual(test_workspace_guid, get_response_dict.get("id", "")) |
119 self.assertEqual(test_title, get_response_dict.get("title", "")) |
107 self.assertEqual(test_title, get_response_dict.get("title", "")) |
120 self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("workspace_created_by", "")) |
108 self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("workspace_created_by", "")) |
121 self.assertEqual(2, get_response_dict.get("renkan_count")) |
109 self.assertEqual(2, get_response_dict.get("renkan_count")) |
122 |
110 |
123 ################################################### |
111 ################################################### |
124 # GETting wrong workspace_guid |
112 # GETting wrong workspace_guid |
125 ################################################### |
113 ################################################### |
126 |
114 |
127 get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": "bleh-bad-workspace-id"}) |
115 get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": "bleh-bad-workspace-id"}) |
128 get_response = self.client.get(get_url, format="json") |
116 get_response = self.client.get(get_url, format="json") |
129 self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) |
117 self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) |
130 |
118 |
131 ################################################### |
|
132 # try GETting with unauthorized user |
|
133 ################################################### |
|
134 |
|
135 _ = self.client.login(username="blip", password="blip") |
|
136 get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid}) |
|
137 get_response = self.client.get(get_url, format="json") |
|
138 self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN) |
|
139 |
|
140 def test_update_workspace(self): |
119 def test_update_workspace(self): |
141 |
120 |
142 ################################################### |
121 ################################################### |
143 # POSTing test Workspace |
122 # POSTing test Workspace |
144 ################################################### |
123 ################################################### |
145 |
124 |
146 workspace_post_url = reverse("v1.0:workspace_list") |
125 workspace_post_url = reverse("v1.0:workspace_list") |
147 test_title = "bleh_title" |
126 test_title = "bleh_title" |
148 data = {"title": test_title} |
127 data = {"title": test_title} |
149 post_response = self.client.post(workspace_post_url, data, format="json") |
128 post_response = self.client.post(workspace_post_url, data, format="json") |
150 post_response_dict = json.loads(post_response.content.decode()) |
129 post_response_dict = json.loads(post_response.content.decode()) |
151 test_workspace_guid = post_response_dict.get("id") |
130 test_workspace_guid = post_response_dict.get("id") |
152 |
131 |
153 ################################################### |
132 ################################################### |
154 # PUTting into test Workspace |
133 # PUTting into test Workspace |
155 ################################################### |
134 ################################################### |
156 |
135 |
157 put_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid}) |
136 put_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid}) |
158 edited_title = "bleh_title_2" |
137 edited_title = "bleh_title_2" |
159 put_data = {"title": edited_title} |
138 put_data = {"title": edited_title} |
160 put_response = self.client.put(put_url, put_data, format="json") |
139 put_response = self.client.put(put_url, put_data, format="json") |
161 put_response_dict = json.loads(put_response.content.decode()) |
140 put_response_dict = json.loads(put_response.content.decode()) |
162 self.assertEqual(put_response.status_code, status.HTTP_200_OK) |
141 self.assertEqual(put_response.status_code, status.HTTP_200_OK) |
163 |
142 |
164 # Checking data |
143 # Checking data |
165 # in the response |
144 # in the response |
166 self.assertEqual(put_response_dict.get("workspace_created_by"), getattr(self.user, User.USERNAME_FIELD)) |
145 self.assertEqual(put_response_dict.get("workspace_created_by"), getattr(self.user, User.USERNAME_FIELD)) |
167 self.assertEqual(put_response_dict.get("title"), edited_title) |
146 self.assertEqual(put_response_dict.get("title"), edited_title) |
168 self.assertEqual(put_response_dict.get("renkan_count"), 0) |
147 self.assertEqual(put_response_dict.get("renkan_count"), 0) |
170 edited_workspace_guid = put_response_dict.get("id") |
149 edited_workspace_guid = put_response_dict.get("id") |
171 edited_workspace = Workspace.objects.get(workspace_guid=edited_workspace_guid) |
150 edited_workspace = Workspace.objects.get(workspace_guid=edited_workspace_guid) |
172 self.assertEqual(getattr(edited_workspace.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
151 self.assertEqual(getattr(edited_workspace.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
173 self.assertEqual(edited_workspace.title, edited_title) |
152 self.assertEqual(edited_workspace.title, edited_title) |
174 self.assertEqual(edited_workspace.renkan_count, 0) |
153 self.assertEqual(edited_workspace.renkan_count, 0) |
175 |
154 |
176 ################################################### |
155 |
177 # try PUTting with unauthorized user |
|
178 ################################################### |
|
179 |
|
180 _ = self.client.login(username="blip", password="blip") |
|
181 put_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid}) |
|
182 put_data = { |
|
183 "title" : "wont_work" |
|
184 } |
|
185 put_response = self.client.put(put_url, put_data, format="json") |
|
186 self.assertEqual(put_response.status_code, status.HTTP_403_FORBIDDEN) |
|
187 |
|
188 def test_delete_workspace(self): |
156 def test_delete_workspace(self): |
189 |
157 |
190 ################################################### |
158 ################################################### |
191 # POSTing test Workspace |
159 # POSTing test Workspace |
192 ################################################### |
160 ################################################### |
193 |
161 |
194 workspace_post_url = reverse("v1.0:workspace_list") |
162 workspace_post_url = reverse("v1.0:workspace_list") |
195 test_title = "bleh_title" |
163 test_title = "bleh_title" |
196 data = {"title": test_title} |
164 data = {"title": test_title} |
197 post_response = self.client.post(workspace_post_url, data, format="json") |
165 post_response = self.client.post(workspace_post_url, data, format="json") |
198 post_response_dict = json.loads(post_response.content.decode()) |
166 post_response_dict = json.loads(post_response.content.decode()) |
199 to_delete_workspace_guid = post_response_dict.get("id", "") |
167 to_delete_workspace_guid = post_response_dict.get("id", "") |
200 |
168 |
201 ################################################### |
169 ################################################### |
202 # POSTing new Renkan into test Workspace |
170 # POSTing new Renkan into test Workspace |
203 ################################################### |
171 ################################################### |
204 |
172 |
205 renkan_post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": to_delete_workspace_guid}) |
173 renkan_post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": to_delete_workspace_guid}) |
206 renkan_test_title = "bleh_title" |
174 renkan_test_title = "bleh_title" |
207 renkan_test_data = {"title": renkan_test_title} |
175 renkan_test_data = {"title": renkan_test_title} |
208 post_response = self.client.post(renkan_post_url, renkan_test_data, format="json") |
176 post_response = self.client.post(renkan_post_url, renkan_test_data, format="json") |
209 to_delete_renkan_guid = json.loads(post_response.content.decode()).get("id", "") |
177 to_delete_renkan_guid = json.loads(post_response.content.decode()).get("id", "") |
210 |
178 |
211 ################################################### |
179 ################################################### |
212 # Try to DELETE test Workspace (should fail, it still contains a Renkan) |
180 # Try to DELETE test Workspace (should fail, it still contains a Renkan) |
213 ################################################### |
181 ################################################### |
214 |
182 |
215 delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid}) |
183 delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid}) |
216 delete_response = self.client.delete(delete_url, {}, format="json") |
184 delete_response = self.client.delete(delete_url, {}, format="json") |
217 self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST) |
185 self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST) |
218 |
186 |
219 ################################################### |
187 ################################################### |
220 # DELETE posted Renkan |
188 # DELETE posted Renkan |
221 ################################################### |
189 ################################################### |
222 |
190 |
223 delete_renkan_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
191 delete_renkan_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
224 delete_renkan_response = self.client.delete(delete_renkan_url, format="json") |
192 delete_renkan_response = self.client.delete(delete_renkan_url, format="json") |
225 self.assertEqual(delete_renkan_response.status_code, status.HTTP_204_NO_CONTENT) |
193 self.assertEqual(delete_renkan_response.status_code, status.HTTP_204_NO_CONTENT) |
226 |
194 |
227 ################################################### |
195 ################################################### |
228 # try to DELETE with unauthorized user |
196 # DELETE test Workspace |
229 ################################################### |
197 ################################################### |
230 |
198 |
231 _ = self.client.login(username="blip", password="blip") |
|
232 delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid}) |
|
233 delete_response = self.client.delete(delete_url, {}, format="json") |
|
234 self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN) |
|
235 |
|
236 # Restoring rightful user |
|
237 _ = self.client.login(username="blop", password="blop") |
|
238 |
|
239 ################################################### |
|
240 # DELETE test Workspace |
|
241 ################################################### |
|
242 |
|
243 delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid}) |
199 delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid}) |
244 delete_response = self.client.delete(delete_url, {}, format="json") |
200 delete_response = self.client.delete(delete_url, {}, format="json") |
245 self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT) |
201 self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT) |
246 |
202 |
247 ################################################### |
203 ################################################### |
248 # Try to DELETE workspace with wrong guid |
204 # Try to DELETE workspace with wrong guid |
249 ################################################### |
205 ################################################### |
250 |
206 |
251 delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": "bad-workspace-guid"}) |
207 delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": "bad-workspace-guid"}) |
252 delete_response = self.client.delete(delete_url, format=json) |
208 delete_response = self.client.delete(delete_url, format=json) |
253 self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND) |
209 self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND) |
254 |
|