111 # in the response |
111 # in the response |
112 self.assertEqual(post_response_dict.get("title", ""), self.first_test_title) |
112 self.assertEqual(post_response_dict.get("title", ""), self.first_test_title) |
113 for key in list(self.first_test_content_dict.keys()) + list(set(post_response_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
113 for key in list(self.first_test_content_dict.keys()) + list(set(post_response_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
114 if key != "updated" and key != "created" and key != "id": |
114 if key != "updated" and key != "created" and key != "id": |
115 self.assertEqual(post_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
115 self.assertEqual(post_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
116 |
116 |
117 # in the database |
117 # in the database |
118 self.assertEqual(new_renkan_revision.title, self.first_test_title) |
118 self.assertEqual(new_renkan_revision.title, self.first_test_title) |
119 new_revision_content_dict = json.loads(new_renkan_revision.content) |
119 new_revision_content_dict = json.loads(new_renkan_revision.content) |
120 for key in list(self.first_test_content_dict.keys()) + list(set(new_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
120 for key in list(self.first_test_content_dict.keys()) + list(set(new_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
121 if key != "updated" and key != "created" and key != "id": |
121 if key != "updated" and key != "created" and key != "id": |
122 self.assertEqual(new_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
122 self.assertEqual(new_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
123 |
123 |
124 # Checking permission |
124 # Checking permission |
125 self.assertTrue(self.user.has_perm("view_renkan", new_renkan)) |
125 self.assertTrue(self.user.has_perm("view_renkan", new_renkan)) |
126 |
126 |
127 ################################################### |
127 ################################################### |
128 # POSTing new Renkan into workspace |
128 # POSTing new Renkan into workspace |
129 ################################################### |
129 ################################################### |
130 |
130 |
131 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) |
131 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) |
132 data = {"title": self.second_test_title, "content": self.second_test_content} |
132 data = {"title": self.second_test_title, "content": self.second_test_content} |
133 |
133 |
134 post_response = self.client.post(post_url, data, format="json") |
134 post_response = self.client.post(post_url, data, format="json") |
135 self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) |
135 self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) |
136 self.assertEqual(Renkan.objects.count(), 2) |
136 self.assertEqual(Renkan.objects.count(), 2) |
137 self.assertEqual(Revision.objects.count(), 2) |
137 self.assertEqual(Revision.objects.count(), 2) |
138 |
138 |
139 # Checking POSTed Renkan data |
139 # Checking POSTed Renkan data |
140 post_response_dict = json.loads(post_response.content.decode()) |
140 post_response_dict = json.loads(post_response.content.decode()) |
141 new_renkan_guid = post_response_dict.get("id", "") |
141 new_renkan_guid = post_response_dict.get("id", "") |
142 new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid) |
142 new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid) |
143 # GUIDs and username |
143 # GUIDs and username |
150 self.assertEqual(new_renkan.title, self.second_test_title) |
150 self.assertEqual(new_renkan.title, self.second_test_title) |
151 new_renkan_content_dict = json.loads(new_renkan.content) |
151 new_renkan_content_dict = json.loads(new_renkan.content) |
152 for key in list(self.second_test_content_dict.keys()) + list(set(new_renkan_content_dict.keys()) - set(self.second_test_content_dict.keys())): |
152 for key in list(self.second_test_content_dict.keys()) + list(set(new_renkan_content_dict.keys()) - set(self.second_test_content_dict.keys())): |
153 if key != "updated" and key != "created" and key != "id" and key != "space_id": |
153 if key != "updated" and key != "created" and key != "id" and key != "space_id": |
154 self.assertEqual(new_renkan_content_dict.get(key, ""), self.second_test_content_dict.get(key, "")) |
154 self.assertEqual(new_renkan_content_dict.get(key, ""), self.second_test_content_dict.get(key, "")) |
155 |
155 |
156 # Revision count |
156 # Revision count |
157 self.assertEqual(new_renkan.revision_count, 1) |
157 self.assertEqual(new_renkan.revision_count, 1) |
158 self.assertEqual(post_response_dict.get("revision_count", ""), 1) |
158 self.assertEqual(post_response_dict.get("revision_count", ""), 1) |
159 |
159 |
160 ################################################### |
160 ################################################### |
161 # POSTing new Renkan with no content |
161 # POSTing new Renkan with no content |
162 ################################################### |
162 ################################################### |
163 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) |
163 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) |
164 test_title = "bleh_title_2" |
164 test_title = "bleh_title_2" |
165 data = {"title": test_title} |
165 data = {"title": test_title} |
166 post_response = self.client.post(post_url, data, format="json") |
166 post_response = self.client.post(post_url, data, format="json") |
167 self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) |
167 self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) |
168 self.assertEqual(Renkan.objects.count(), 3) |
168 self.assertEqual(Renkan.objects.count(), 3) |
169 self.assertEqual(Revision.objects.count(), 3) |
169 self.assertEqual(Revision.objects.count(), 3) |
170 |
170 |
171 ################################################### |
171 ################################################### |
172 # POSTing with wrong workspace_guid |
172 # POSTing with wrong workspace_guid |
173 ################################################### |
173 ################################################### |
174 |
174 |
175 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": "bleh-bad-workspace-guid"}) |
175 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": "bleh-bad-workspace-guid"}) |
176 data = {"title": self.third_test_title, "content": self.third_test_content} |
176 data = {"title": self.third_test_title, "content": self.third_test_content} |
177 |
177 |
178 post_response = self.client.post(post_url, data, format="json") |
178 post_response = self.client.post(post_url, data, format="json") |
179 self.assertEqual(post_response.status_code, status.HTTP_404_NOT_FOUND) |
179 self.assertEqual(post_response.status_code, status.HTTP_404_NOT_FOUND) |
180 |
180 |
181 ################################################### |
181 ################################################### |
182 # POSTing with non-JSON serializable content |
182 # POSTing with non-JSON serializable content |
183 ################################################### |
183 ################################################### |
184 |
184 |
185 post_url = reverse("v1.0:renkan_list") |
185 post_url = reverse("v1.0:renkan_list") |
186 data = {"title": self.third_test_title, "content": "notJson(Serializable}"} |
186 data = {"title": self.third_test_title, "content": "notJson(Serializable}"} |
187 |
187 |
188 post_response = self.client.post(post_url, data, format="json") |
188 post_response = self.client.post(post_url, data, format="json") |
189 self.assertEqual(post_response.status_code, status.HTTP_400_BAD_REQUEST) |
189 self.assertEqual(post_response.status_code, status.HTTP_400_BAD_REQUEST) |
190 |
190 |
191 ################################################### |
191 |
192 # try POSTing with unauthorized user |
|
193 ################################################### |
|
194 |
|
195 _ = self.client.login(username="blip", password="blip") |
|
196 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) |
|
197 data = {"title": self.third_test_title, "content": self.third_test_content} |
|
198 post_response = self.client.post(post_url, data, format="json") |
|
199 self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN) |
|
200 |
|
201 def test_get_renkan(self): |
192 def test_get_renkan(self): |
202 |
193 |
203 ################################################### |
194 ################################################### |
204 # POSTing new Renkan |
195 # POSTing new Renkan |
205 ################################################### |
196 ################################################### |
206 |
197 |
207 post_url = reverse("v1.0:renkan_list") |
198 post_url = reverse("v1.0:renkan_list") |
208 data = {} |
199 data = {} |
209 post_response = self.client.post(post_url, data, format="json") |
200 post_response = self.client.post(post_url, data, format="json") |
210 post_response_dict = json.loads(post_response.content.decode()) |
201 post_response_dict = json.loads(post_response.content.decode()) |
211 new_renkan_guid = post_response_dict.get("id", "") |
202 new_renkan_guid = post_response_dict.get("id", "") |
212 new_revision_guid = post_response_dict.get("current_revision_id", "") |
203 new_revision_guid = post_response_dict.get("current_revision_id", "") |
213 |
204 |
214 ################################################### |
205 ################################################### |
215 # GETting posted Renkan |
206 # GETting posted Renkan |
216 ################################################### |
207 ################################################### |
217 |
208 |
218 get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":new_renkan_guid}) |
209 get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":new_renkan_guid}) |
219 get_response = self.client.get(get_url, format="json") |
210 get_response = self.client.get(get_url, format="json") |
220 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
211 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
221 |
212 |
222 # Checking GET data |
213 # Checking GET data |
223 get_response_dict = json.loads(get_response.content.decode()) |
214 get_response_dict = json.loads(get_response.content.decode()) |
224 self.assertEqual(new_renkan_guid, get_response_dict.get("id", "")) |
215 self.assertEqual(new_renkan_guid, get_response_dict.get("id", "")) |
225 self.assertEqual(new_revision_guid, get_response_dict.get("current_revision_id", "")) |
216 self.assertEqual(new_revision_guid, get_response_dict.get("current_revision_id", "")) |
226 self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("created_by", "")) |
217 self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("created_by", "")) |
227 self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("last_updated_by", "")) |
218 self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("last_updated_by", "")) |
228 |
219 |
229 ################################################### |
220 ################################################### |
230 # GETting with wrong guid |
221 # GETting with wrong guid |
231 ################################################### |
222 ################################################### |
232 |
223 |
233 get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) |
224 get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) |
234 get_response = self.client.get(get_url, format="json") |
225 get_response = self.client.get(get_url, format="json") |
235 self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) |
226 self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) |
236 |
227 |
237 ################################################### |
|
238 # try GETting with unauthorized user |
|
239 ################################################### |
|
240 |
|
241 _ = self.client.login(username="blip", password="blip") |
|
242 get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": new_renkan_guid}) |
|
243 get_response = self.client.get(get_url, format="json") |
|
244 self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN) |
|
245 |
|
246 def test_get_renkan_list(self): |
228 def test_get_renkan_list(self): |
247 |
229 |
248 ################################################### |
230 ################################################### |
249 # POSTing new Renkans |
231 # POSTing new Renkans |
250 ################################################### |
232 ################################################### |
251 |
233 |
252 post_url = reverse("v1.0:renkan_list") |
234 post_url = reverse("v1.0:renkan_list") |
253 first_data = {"title": self.first_test_title, "content": self.first_test_content} |
235 first_data = {"title": self.first_test_title, "content": self.first_test_content} |
254 second_data = {"title": self.second_test_title, "content": self.second_test_content} |
236 second_data = {"title": self.second_test_title, "content": self.second_test_content} |
255 self.client.post(post_url, first_data, format="json") |
237 self.client.post(post_url, first_data, format="json") |
256 self.client.post(post_url, second_data, format="json") |
238 self.client.post(post_url, second_data, format="json") |
257 |
239 |
258 ################################################### |
240 ################################################### |
259 # GETting posted Renkans |
241 # GETting posted Renkans |
260 ################################################### |
242 ################################################### |
261 |
243 |
262 get_url = post_url |
244 get_url = post_url |
263 get_response = self.client.get(get_url, format="json") |
245 get_response = self.client.get(get_url, format="json") |
264 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
246 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
265 |
247 |
266 get_response_content = json.loads(get_response.content.decode()) # Should be a list |
248 get_response_content = json.loads(get_response.content.decode()) # Should be a list |
267 self.assertTrue(isinstance(get_response_content, list)) |
249 self.assertTrue(isinstance(get_response_content, list)) |
268 self.assertEqual(len(get_response_content), 2) |
250 self.assertEqual(len(get_response_content), 2) |
269 |
251 |
270 ################################################### |
252 ################################################### |
271 # POSTing new Renkan into workspace |
253 # POSTing new Renkan into workspace |
272 ################################################### |
254 ################################################### |
273 |
255 |
274 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) |
256 post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) |
275 third_data = {"title": self.third_test_title, "content": self.third_test_content} |
257 third_data = {"title": self.third_test_title, "content": self.third_test_content} |
276 self.client.post(post_url, third_data, format="json") |
258 self.client.post(post_url, third_data, format="json") |
277 |
259 |
278 ################################################### |
260 ################################################### |
279 # GETting posted Renkans |
261 # GETting posted Renkans |
280 ################################################### |
262 ################################################### |
281 |
263 |
282 get_url = post_url |
264 get_url = post_url |
283 get_response = self.client.get(get_url, format="json") |
265 get_response = self.client.get(get_url, format="json") |
284 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
266 self.assertEqual(get_response.status_code, status.HTTP_200_OK) |
285 |
267 |
286 get_response_content = json.loads(get_response.content.decode()) # Should be a list |
268 get_response_content = json.loads(get_response.content.decode()) # Should be a list |
287 self.assertTrue(isinstance(get_response_content, list)) |
269 self.assertTrue(isinstance(get_response_content, list)) |
288 self.assertEqual(len(get_response_content), 1) |
270 self.assertEqual(len(get_response_content), 1) |
289 |
271 |
290 |
272 |
291 |
273 |
292 |
274 |
293 |
275 |
294 def test_update_renkan(self): |
276 def test_update_renkan(self): |
295 |
277 |
296 ################################################### |
278 ################################################### |
297 # POSTing new Renkan |
279 # POSTing new Renkan |
298 ################################################### |
280 ################################################### |
299 |
281 |
300 post_url = reverse("v1.0:renkan_list") |
282 post_url = reverse("v1.0:renkan_list") |
301 data = {} |
283 data = {} |
302 post_response = self.client.post(post_url, data, format="json") |
284 post_response = self.client.post(post_url, data, format="json") |
303 post_response_dict = json.loads(post_response.content.decode()) |
285 post_response_dict = json.loads(post_response.content.decode()) |
304 post_response_ts = json.loads(post_response_dict.get("content"), "{}").get("updated", "") |
286 post_response_ts = json.loads(post_response_dict.get("content"), "{}").get("updated", "") |
305 renkan_guid = post_response_dict.get("id", "") |
287 renkan_guid = post_response_dict.get("id", "") |
306 revision_guid = post_response_dict.get("current_revision_id", "") |
288 revision_guid = post_response_dict.get("current_revision_id", "") |
307 |
289 |
308 ################################################### |
290 ################################################### |
309 # PUTting by updating current revision |
291 # PUTting by updating current revision |
310 ################################################### |
292 ################################################### |
311 |
293 |
312 put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid}) |
294 put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid}) |
313 put_content_dict = json.loads(self.first_test_content) |
295 put_content_dict = json.loads(self.first_test_content) |
314 put_content_dict["updated"] = post_response_ts |
296 put_content_dict["updated"] = post_response_ts |
315 put_data = { |
297 put_data = { |
316 "title" : self.first_test_title, |
298 "title" : self.first_test_title, |
320 put_response = self.client.put(put_url, put_data, format="json") |
302 put_response = self.client.put(put_url, put_data, format="json") |
321 self.assertEqual(put_response.status_code, status.HTTP_200_OK) |
303 self.assertEqual(put_response.status_code, status.HTTP_200_OK) |
322 put_response_dict = json.loads(put_response.content.decode()) |
304 put_response_dict = json.loads(put_response.content.decode()) |
323 put_response_content_dict = json.loads(put_response_dict.get("content", "{}")) |
305 put_response_content_dict = json.loads(put_response_dict.get("content", "{}")) |
324 put_response_ts = put_response_content_dict.get("updated", "") |
306 put_response_ts = put_response_content_dict.get("updated", "") |
325 |
307 |
326 # checking we"re still on the same revision as the initial one |
308 # checking we"re still on the same revision as the initial one |
327 updated_project = Renkan.objects.get(renkan_guid=renkan_guid) |
309 updated_project = Renkan.objects.get(renkan_guid=renkan_guid) |
328 self.assertEqual(revision_guid, put_response_dict.get("current_revision_id", "")) |
310 self.assertEqual(revision_guid, put_response_dict.get("current_revision_id", "")) |
329 self.assertEqual(put_response_dict.get("revision_count", ""), 1) |
311 self.assertEqual(put_response_dict.get("revision_count", ""), 1) |
330 self.assertEqual(updated_project.revision_count, 1) |
312 self.assertEqual(updated_project.revision_count, 1) |
331 |
313 |
332 self.assertEqual(revision_guid, updated_project.current_revision.revision_guid) |
314 self.assertEqual(revision_guid, updated_project.current_revision.revision_guid) |
333 # checking data was updated |
315 # checking data was updated |
334 # in the reponse |
316 # in the reponse |
335 self.assertEqual(put_response_dict.get("title", ""), self.first_test_title) |
317 self.assertEqual(put_response_dict.get("title", ""), self.first_test_title) |
336 for key in list(self.first_test_content_dict.keys()) + list(set(put_response_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
318 for key in list(self.first_test_content_dict.keys()) + list(set(put_response_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
337 if key != "updated" and key!= "id" and key != "space_id": |
319 if key != "updated" and key!= "id" and key != "space_id": |
338 self.assertEqual(put_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
320 self.assertEqual(put_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
339 |
321 |
340 # in the database |
322 # in the database |
341 updated_revision = Revision.objects.get(revision_guid=revision_guid) |
323 updated_revision = Revision.objects.get(revision_guid=revision_guid) |
342 updated_revision_content_dict = json.loads(updated_revision.content) |
324 updated_revision_content_dict = json.loads(updated_revision.content) |
343 self.assertEqual(updated_revision.title, self.first_test_title) |
325 self.assertEqual(updated_revision.title, self.first_test_title) |
344 for key in list(self.first_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
326 for key in list(self.first_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())): |
345 if key != "updated" and key!= "id" and key != "space_id": |
327 if key != "updated" and key!= "id" and key != "space_id": |
346 self.assertEqual(updated_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
328 self.assertEqual(updated_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
347 |
329 |
348 ################################################### |
330 ################################################### |
349 # PUTting by creating a new revision |
331 # PUTting by creating a new revision |
350 ################################################### |
332 ################################################### |
351 |
333 |
352 put_content_dict = json.loads(self.second_test_content) |
334 put_content_dict = json.loads(self.second_test_content) |
353 put_content_dict["updated"] = put_response_ts |
335 put_content_dict["updated"] = put_response_ts |
354 put_data = { |
336 put_data = { |
355 "title" : self.second_test_title, |
337 "title" : self.second_test_title, |
356 "content" : json.dumps(put_content_dict), |
338 "content" : json.dumps(put_content_dict), |
384 updated_revision_content_dict = json.loads(updated_revision.content) |
366 updated_revision_content_dict = json.loads(updated_revision.content) |
385 self.assertEqual(updated_revision.title, self.second_test_title) |
367 self.assertEqual(updated_revision.title, self.second_test_title) |
386 for key in list(self.second_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.second_test_content_dict.keys())): |
368 for key in list(self.second_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.second_test_content_dict.keys())): |
387 if key != "updated" and key!= "id" and key != "space_id": |
369 if key != "updated" and key!= "id" and key != "space_id": |
388 self.assertEqual(updated_revision_content_dict.get(key, ""), self.second_test_content_dict.get(key, "")) |
370 self.assertEqual(updated_revision_content_dict.get(key, ""), self.second_test_content_dict.get(key, "")) |
389 |
371 |
390 ################################################### |
372 ################################################### |
391 # try to update source_revision_guid or workspace_guid |
373 # try to update source_revision_guid or workspace_guid |
392 ################################################### |
374 ################################################### |
393 |
375 |
394 put_data = { |
376 put_data = { |
395 "title" : self.third_test_title, |
377 "title" : self.third_test_title, |
396 "content" : self.third_test_content, |
378 "content" : self.third_test_content, |
397 "workspace_id": "bleh-workspace-guid" # should fail without even checking the id |
379 "workspace_id": "bleh-workspace-guid" # should fail without even checking the id |
398 } |
380 } |
399 put_response = self.client.put(put_url, put_data, format="json") |
381 put_response = self.client.put(put_url, put_data, format="json") |
400 self.assertEqual(put_response.status_code, status.HTTP_400_BAD_REQUEST) |
382 self.assertEqual(put_response.status_code, status.HTTP_400_BAD_REQUEST) |
401 |
383 |
402 ################################################### |
384 ################################################### |
403 # PUTting with wrong guid |
385 # PUTting with wrong guid |
404 ################################################### |
386 ################################################### |
405 |
387 |
406 put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) |
388 put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) |
407 put_response = self.client.put(put_url, {}, format="json") |
389 put_response = self.client.put(put_url, {}, format="json") |
408 self.assertEqual(put_response.status_code, status.HTTP_404_NOT_FOUND) |
390 self.assertEqual(put_response.status_code, status.HTTP_404_NOT_FOUND) |
409 |
391 |
410 ################################################### |
392 |
411 # try PUTting with unauthorized user |
|
412 ################################################### |
|
413 |
|
414 _ = self.client.login(username="blip", password="blip") |
|
415 put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid}) |
|
416 put_data = { |
|
417 "title" : self.third_test_title, |
|
418 "content" : self.third_test_content, |
|
419 "create_new_revision": False |
|
420 } |
|
421 put_response = self.client.put(put_url, put_data, format="json") |
|
422 self.assertEqual(put_response.status_code, status.HTTP_403_FORBIDDEN) |
|
423 |
|
424 def test_copy_renkan(self): |
393 def test_copy_renkan(self): |
425 |
394 |
426 ################################################### |
395 ################################################### |
427 # POSTing new Renkan |
396 # POSTing new Renkan |
428 ################################################### |
397 ################################################### |
429 |
398 |
430 post_url = reverse("v1.0:renkan_list") |
399 post_url = reverse("v1.0:renkan_list") |
431 data = {"title": self.first_test_title, "content": self.first_test_content} |
400 data = {"title": self.first_test_title, "content": self.first_test_content} |
432 post_response = self.client.post(post_url, data, format="json") |
401 post_response = self.client.post(post_url, data, format="json") |
433 post_response_dict = json.loads(post_response.content.decode()) |
402 post_response_dict = json.loads(post_response.content.decode()) |
434 source_renkan_guid = post_response_dict.get("id", "") |
403 source_renkan_guid = post_response_dict.get("id", "") |
435 source_revision_guid = post_response_dict.get("current_revision_id", "") |
404 source_revision_guid = post_response_dict.get("current_revision_id", "") |
436 |
405 |
437 ################################################### |
406 ################################################### |
438 # POSTing copy with query arg for RENKAN guid |
407 # POSTing copy with query arg for RENKAN guid |
439 ################################################### |
408 ################################################### |
440 |
409 |
441 first_copy_data = {"title": "new_title_copy_1"} |
410 first_copy_data = {"title": "new_title_copy_1"} |
442 first_copy_url = post_url+"?source_renkan_id="+source_renkan_guid |
411 first_copy_url = post_url+"?source_renkan_id="+source_renkan_guid |
443 first_copy_response = self.client.post(first_copy_url, first_copy_data, format="json") |
412 first_copy_response = self.client.post(first_copy_url, first_copy_data, format="json") |
444 first_copy_response_dict = json.loads(first_copy_response.content.decode()) |
413 first_copy_response_dict = json.loads(first_copy_response.content.decode()) |
445 first_copy_response_content_dict = json.loads(first_copy_response_dict.get("content", "{}")) |
414 first_copy_response_content_dict = json.loads(first_copy_response_dict.get("content", "{}")) |
446 self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED) |
415 self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED) |
447 self.assertEqual(Renkan.objects.count(), 2) |
416 self.assertEqual(Renkan.objects.count(), 2) |
448 # Checking data |
417 # Checking data |
449 # in the response |
418 # in the response |
450 self.assertNotEqual(first_copy_response_dict.get("id"), source_renkan_guid) |
419 self.assertNotEqual(first_copy_response_dict.get("id"), source_renkan_guid) |
451 self.assertEqual(first_copy_response_dict.get("source_revision_id"), source_revision_guid) |
420 self.assertEqual(first_copy_response_dict.get("source_revision_id"), source_revision_guid) |
567 if key != "updated" and key != "created" and key!= "id" and key != "space_id": |
536 if key != "updated" and key != "created" and key!= "id" and key != "space_id": |
568 self.assertEqual(fourth_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
537 self.assertEqual(fourth_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) |
569 self.assertEqual(getattr(fourth_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
538 self.assertEqual(getattr(fourth_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
570 self.assertEqual(getattr(fourth_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
539 self.assertEqual(getattr(fourth_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
571 self.assertEqual(getattr(fourth_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
540 self.assertEqual(getattr(fourth_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) |
572 |
541 |
573 |
542 |
574 ################################################### |
543 ################################################### |
575 # try POSTing copy with bad query arg guid and with bad data guid |
544 # try POSTing copy with bad query arg guid and with bad data guid |
576 ################################################### |
545 ################################################### |
577 |
546 |
578 bad_copy_data = {"source_revision_id": "bleh_bad_id"} |
547 bad_copy_data = {"source_revision_id": "bleh_bad_id"} |
579 # with query arg |
548 # with query arg |
580 qarg_bad_copy_url = post_url+"?source_revision_id=bleh_bad_id" |
549 qarg_bad_copy_url = post_url+"?source_revision_id=bleh_bad_id" |
581 qarg_bad_copy_response = self.client.post(qarg_bad_copy_url, {}, format="json") |
550 qarg_bad_copy_response = self.client.post(qarg_bad_copy_url, {}, format="json") |
582 self.assertEqual(qarg_bad_copy_response.status_code, status.HTTP_404_NOT_FOUND) |
551 self.assertEqual(qarg_bad_copy_response.status_code, status.HTTP_404_NOT_FOUND) |
583 # with data |
552 # with data |
584 data_bad_copy_url = post_url |
553 data_bad_copy_url = post_url |
585 data_bad_copy_response = self.client.post(data_bad_copy_url, bad_copy_data, format="json") |
554 data_bad_copy_response = self.client.post(data_bad_copy_url, bad_copy_data, format="json") |
586 self.assertEqual(data_bad_copy_response.status_code, status.HTTP_404_NOT_FOUND) |
555 self.assertEqual(data_bad_copy_response.status_code, status.HTTP_404_NOT_FOUND) |
587 |
556 |
588 ################################################### |
|
589 # try POSTing with unauthorized user |
|
590 ################################################### |
|
591 |
|
592 _ = self.client.login(username="blip", password="blip") |
|
593 post_url = reverse("v1.0:renkan_list")+"?source_revision_id="+source_revision_guid |
|
594 post_response = self.client.post(post_url, {}, format="json") |
|
595 self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN) |
|
596 |
|
597 def test_delete_renkan(self): |
557 def test_delete_renkan(self): |
598 |
558 |
599 ################################################### |
559 ################################################### |
600 # POSTing new Renkan |
560 # POSTing new Renkan |
601 ################################################### |
561 ################################################### |
602 |
562 |
603 post_url = reverse("v1.0:renkan_list") |
563 post_url = reverse("v1.0:renkan_list") |
604 data = {"title": self.first_test_title, "content": self.first_test_content} |
564 data = {"title": self.first_test_title, "content": self.first_test_content} |
605 post_response = self.client.post(post_url, data, format="json") |
565 post_response = self.client.post(post_url, data, format="json") |
606 post_response_dict = json.loads(post_response.content.decode()) |
566 post_response_dict = json.loads(post_response.content.decode()) |
607 to_delete_renkan_guid = post_response_dict.get("id", "") |
567 to_delete_renkan_guid = post_response_dict.get("id", "") |
608 to_delete_revision_guid = post_response_dict.get("current_revision_id", "") |
568 to_delete_revision_guid = post_response_dict.get("current_revision_id", "") |
609 to_delete_renkan_ts = json.loads(post_response_dict.get("content", "")).get("updated", "") |
569 to_delete_renkan_ts = json.loads(post_response_dict.get("content", "")).get("updated", "") |
610 |
570 |
611 ################################################### |
571 ################################################### |
612 # POSTing copy |
572 # POSTing copy |
613 ################################################### |
573 ################################################### |
614 data = {} |
574 data = {} |
615 post_response = self.client.post(post_url+"?source="+to_delete_renkan_guid, data, format="json") |
575 post_response = self.client.post(post_url+"?source="+to_delete_renkan_guid, data, format="json") |
616 post_response_dict = json.loads(post_response.content.decode()) |
576 post_response_dict = json.loads(post_response.content.decode()) |
617 copy_renkan_guid = post_response_dict.get("id", "") |
577 copy_renkan_guid = post_response_dict.get("id", "") |
618 |
578 |
619 # Adding another revision |
579 # Adding another revision |
620 put_data = {"title": self.first_test_title+"_edited!", "validation_timestamp": to_delete_renkan_ts, "create_new_revision": True} |
580 put_data = {"title": self.first_test_title+"_edited!", "validation_timestamp": to_delete_renkan_ts, "create_new_revision": True} |
621 put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
581 put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
622 put_response = self.client.put(put_url, put_data, format="json") |
582 put_response = self.client.put(put_url, put_data, format="json") |
623 self.assertEqual(Renkan.objects.count(), 2) |
583 self.assertEqual(Renkan.objects.count(), 2) |
624 self.assertEqual(Revision.objects.count(), 3) |
584 self.assertEqual(Revision.objects.count(), 3) |
625 |
585 |
626 ################################################### |
586 |
627 # try to DELETE with unauthorized user |
|
628 ################################################### |
|
629 |
|
630 _ = self.client.login(username="blip", password="blip") |
|
631 delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
|
632 delete_response = self.client.delete(delete_url, format="json") |
|
633 self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN) |
|
634 |
|
635 # Restoring rightful user |
|
636 _ = self.client.login(username="blop", password="blop") |
|
637 |
|
638 ################################################### |
587 ################################################### |
639 # DELETE initial renkan |
588 # DELETE initial renkan |
640 ################################################### |
589 ################################################### |
641 |
590 |
642 delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
591 delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
643 delete_response = self.client.delete(delete_url, format="json") |
592 delete_response = self.client.delete(delete_url, format="json") |
644 self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT) |
593 self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT) |
645 self.assertEqual(Renkan.objects.count(), 1) # Only the copy remains |
594 self.assertEqual(Renkan.objects.count(), 1) # Only the copy remains |
646 self.assertEqual(Revision.objects.count(), 1) # Only the copy initial revision remains |
595 self.assertEqual(Revision.objects.count(), 1) # Only the copy initial revision remains |
647 |
596 |
648 ################################################### |
597 ################################################### |
649 # Try to GET deleted renkan |
598 # Try to GET deleted renkan |
650 ################################################### |
599 ################################################### |
651 |
600 |
652 get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
601 get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) |
653 get_response = self.client.get(get_url, format="json") |
602 get_response = self.client.get(get_url, format="json") |
654 self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) |
603 self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) |
655 |
604 |
656 ################################################### |
605 ################################################### |
657 # Check that remaining renkan doesn"t have reference to deleted renkan |
606 # Check that remaining renkan doesn"t have reference to deleted renkan |
658 ################################################### |
607 ################################################### |
659 copy_renkan = Renkan.objects.get(renkan_guid=copy_renkan_guid) |
608 copy_renkan = Renkan.objects.get(renkan_guid=copy_renkan_guid) |
660 self.assertIsNone(copy_renkan.source_revision) |
609 self.assertIsNone(copy_renkan.source_revision) |
661 |
610 |
662 ################################################### |
611 ################################################### |
663 # Try to DELETE renkan with wrong guid |
612 # Try to DELETE renkan with wrong guid |
664 ################################################### |
613 ################################################### |
665 |
614 |
666 delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) |
615 delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) |
667 delete_response = self.client.delete(delete_url, format="json") |
616 delete_response = self.client.delete(delete_url, format="json") |
668 self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND) |
617 self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND) |
669 |
|