diff -r aa4987fede52 -r e00a24b711a0 server/python/django2/renkanmanager/tests/v1_0/tests_renkan.py --- a/server/python/django2/renkanmanager/tests/v1_0/tests_renkan.py Tue Jun 07 10:46:20 2016 +0200 +++ b/server/python/django2/renkanmanager/tests/v1_0/tests_renkan.py Mon Jun 13 14:23:58 2016 +0200 @@ -5,19 +5,19 @@ from renkanmanager.models import Renkan, Revision from rest_framework import status from rest_framework.test import APITestCase +from rest_framework.test import force_authenticate User = get_user_model() class RenkanTests(APITestCase): - + def setUp(self): User.objects.create_superuser("blop", "blop@blop.com", "blop") self.user = User.objects.get_by_natural_key(username="blop") - _ = self.client.login(username="blop", password="blop") - User.objects.create_user("blip", "blip@blip.com", "blip") - self.unauthorized_user = User.objects.get_by_natural_key(username="blip") - + + self.client.force_login(self.user) + # POSTing test workspace post_url = reverse("v1.0:workspace_list") test_title = "bleh_title" @@ -66,21 +66,21 @@ "views": [] } self.third_test_content = json.dumps(self.third_test_content_dict) - + def test_create_renkan(self): - + ################################################### # POSTing new Renkan ################################################### - + post_url = reverse("v1.0:renkan_list") data = {"title": self.first_test_title, "content": self.first_test_content} - + post_response = self.client.post(post_url, data, format="json") self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) self.assertEqual(Renkan.objects.count(), 1) self.assertEqual(Revision.objects.count(), 1) - + # Checking POSTed Renkan data post_response_dict = json.loads(post_response.content.decode()) post_response_content_dict = json.loads(post_response_dict.get("content", "{}")) @@ -96,11 +96,11 @@ for key in list(self.first_test_content_dict.keys()) + list(set(new_renkan_content_dict.keys()) - set(self.first_test_content_dict.keys())): if key != "updated" and key != "created" and key != "id": self.assertEqual(new_renkan_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) - + # Revision count self.assertEqual(new_renkan.revision_count, 1) self.assertEqual(post_response_dict.get("revision_count", ""), 1) - + # Checking POSTed Renkan revision data new_renkan_revision_guid = post_response_dict.get("current_revision_id", "") new_renkan_revision = Revision.objects.get(revision_guid = new_renkan_revision_guid) @@ -113,29 +113,29 @@ for key in list(self.first_test_content_dict.keys()) + list(set(post_response_content_dict.keys()) - set(self.first_test_content_dict.keys())): if key != "updated" and key != "created" and key != "id": self.assertEqual(post_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) - + # in the database self.assertEqual(new_renkan_revision.title, self.first_test_title) new_revision_content_dict = json.loads(new_renkan_revision.content) for key in list(self.first_test_content_dict.keys()) + list(set(new_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())): if key != "updated" and key != "created" and key != "id": self.assertEqual(new_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) - + # Checking permission self.assertTrue(self.user.has_perm("view_renkan", new_renkan)) - + ################################################### # POSTing new Renkan into workspace ################################################### - + post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) data = {"title": self.second_test_title, "content": self.second_test_content} - + post_response = self.client.post(post_url, data, format="json") self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) self.assertEqual(Renkan.objects.count(), 2) self.assertEqual(Revision.objects.count(), 2) - + # Checking POSTed Renkan data post_response_dict = json.loads(post_response.content.decode()) new_renkan_guid = post_response_dict.get("id", "") @@ -152,11 +152,11 @@ for key in list(self.second_test_content_dict.keys()) + list(set(new_renkan_content_dict.keys()) - set(self.second_test_content_dict.keys())): if key != "updated" and key != "created" and key != "id" and key != "space_id": self.assertEqual(new_renkan_content_dict.get(key, ""), self.second_test_content_dict.get(key, "")) - + # Revision count self.assertEqual(new_renkan.revision_count, 1) self.assertEqual(post_response_dict.get("revision_count", ""), 1) - + ################################################### # POSTing new Renkan with no content ################################################### @@ -167,136 +167,118 @@ self.assertEqual(post_response.status_code, status.HTTP_201_CREATED) self.assertEqual(Renkan.objects.count(), 3) self.assertEqual(Revision.objects.count(), 3) - + ################################################### # POSTing with wrong workspace_guid ################################################### - + post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": "bleh-bad-workspace-guid"}) data = {"title": self.third_test_title, "content": self.third_test_content} - + post_response = self.client.post(post_url, data, format="json") self.assertEqual(post_response.status_code, status.HTTP_404_NOT_FOUND) - + ################################################### # POSTing with non-JSON serializable content ################################################### - + post_url = reverse("v1.0:renkan_list") data = {"title": self.third_test_title, "content": "notJson(Serializable}"} - + post_response = self.client.post(post_url, data, format="json") self.assertEqual(post_response.status_code, status.HTTP_400_BAD_REQUEST) - - ################################################### - # try POSTing with unauthorized user - ################################################### - - _ = self.client.login(username="blip", password="blip") - post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) - data = {"title": self.third_test_title, "content": self.third_test_content} - post_response = self.client.post(post_url, data, format="json") - self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN) - + + def test_get_renkan(self): - + ################################################### # POSTing new Renkan ################################################### - + post_url = reverse("v1.0:renkan_list") data = {} post_response = self.client.post(post_url, data, format="json") post_response_dict = json.loads(post_response.content.decode()) new_renkan_guid = post_response_dict.get("id", "") new_revision_guid = post_response_dict.get("current_revision_id", "") - + ################################################### # GETting posted Renkan ################################################### - + get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":new_renkan_guid}) get_response = self.client.get(get_url, format="json") self.assertEqual(get_response.status_code, status.HTTP_200_OK) - + # Checking GET data get_response_dict = json.loads(get_response.content.decode()) self.assertEqual(new_renkan_guid, get_response_dict.get("id", "")) self.assertEqual(new_revision_guid, get_response_dict.get("current_revision_id", "")) self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("created_by", "")) self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("last_updated_by", "")) - + ################################################### # GETting with wrong guid ################################################### - + get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) get_response = self.client.get(get_url, format="json") self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) - - ################################################### - # try GETting with unauthorized user - ################################################### - - _ = self.client.login(username="blip", password="blip") - get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": new_renkan_guid}) - get_response = self.client.get(get_url, format="json") - self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN) - + def test_get_renkan_list(self): - + ################################################### # POSTing new Renkans ################################################### - + post_url = reverse("v1.0:renkan_list") first_data = {"title": self.first_test_title, "content": self.first_test_content} second_data = {"title": self.second_test_title, "content": self.second_test_content} self.client.post(post_url, first_data, format="json") self.client.post(post_url, second_data, format="json") - + ################################################### # GETting posted Renkans ################################################### - + get_url = post_url get_response = self.client.get(get_url, format="json") self.assertEqual(get_response.status_code, status.HTTP_200_OK) - + get_response_content = json.loads(get_response.content.decode()) # Should be a list self.assertTrue(isinstance(get_response_content, list)) self.assertEqual(len(get_response_content), 2) - + ################################################### # POSTing new Renkan into workspace ################################################### - + post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid}) third_data = {"title": self.third_test_title, "content": self.third_test_content} self.client.post(post_url, third_data, format="json") - + ################################################### # GETting posted Renkans ################################################### - + get_url = post_url get_response = self.client.get(get_url, format="json") self.assertEqual(get_response.status_code, status.HTTP_200_OK) - + get_response_content = json.loads(get_response.content.decode()) # Should be a list self.assertTrue(isinstance(get_response_content, list)) self.assertEqual(len(get_response_content), 1) - - - - - + + + + + def test_update_renkan(self): ################################################### # POSTing new Renkan ################################################### - + post_url = reverse("v1.0:renkan_list") data = {} post_response = self.client.post(post_url, data, format="json") @@ -304,11 +286,11 @@ post_response_ts = json.loads(post_response_dict.get("content"), "{}").get("updated", "") renkan_guid = post_response_dict.get("id", "") revision_guid = post_response_dict.get("current_revision_id", "") - + ################################################### # PUTting by updating current revision ################################################### - + put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid}) put_content_dict = json.loads(self.first_test_content) put_content_dict["updated"] = post_response_ts @@ -322,13 +304,13 @@ put_response_dict = json.loads(put_response.content.decode()) put_response_content_dict = json.loads(put_response_dict.get("content", "{}")) put_response_ts = put_response_content_dict.get("updated", "") - + # checking we"re still on the same revision as the initial one updated_project = Renkan.objects.get(renkan_guid=renkan_guid) self.assertEqual(revision_guid, put_response_dict.get("current_revision_id", "")) self.assertEqual(put_response_dict.get("revision_count", ""), 1) self.assertEqual(updated_project.revision_count, 1) - + self.assertEqual(revision_guid, updated_project.current_revision.revision_guid) # checking data was updated # in the reponse @@ -336,7 +318,7 @@ for key in list(self.first_test_content_dict.keys()) + list(set(put_response_content_dict.keys()) - set(self.first_test_content_dict.keys())): if key != "updated" and key!= "id" and key != "space_id": self.assertEqual(put_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) - + # in the database updated_revision = Revision.objects.get(revision_guid=revision_guid) updated_revision_content_dict = json.loads(updated_revision.content) @@ -344,11 +326,11 @@ for key in list(self.first_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())): if key != "updated" and key!= "id" and key != "space_id": self.assertEqual(updated_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, "")) - + ################################################### # PUTting by creating a new revision ################################################### - + put_content_dict = json.loads(self.second_test_content) put_content_dict["updated"] = put_response_ts put_data = { @@ -361,7 +343,7 @@ put_response_dict = json.loads(put_response.content.decode()) put_response_content_dict = json.loads(put_response_dict.get("content", "{}")) put_response_ts = put_response_content_dict.get("updated", "") - + # checking we created a new revision updated_project = Renkan.objects.get(renkan_guid=renkan_guid) created_revision_guid = put_response_dict.get("current_revision_id", "") @@ -370,7 +352,7 @@ self.assertEqual(Revision.objects.count(), 2) self.assertEqual(put_response_dict.get("revision_count", ""), 2) self.assertEqual(updated_project.revision_count, 2) - + # checking project now points towards new revision self.assertEqual(updated_project.current_revision.revision_guid, created_revision_guid) # checking data was updated @@ -386,11 +368,11 @@ for key in list(self.second_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.second_test_content_dict.keys())): if key != "updated" and key!= "id" and key != "space_id": self.assertEqual(updated_revision_content_dict.get(key, ""), self.second_test_content_dict.get(key, "")) - + ################################################### # try to update source_revision_guid or workspace_guid ################################################### - + put_data = { "title" : self.third_test_title, "content" : self.third_test_content, @@ -398,52 +380,39 @@ } put_response = self.client.put(put_url, put_data, format="json") self.assertEqual(put_response.status_code, status.HTTP_400_BAD_REQUEST) - + ################################################### # PUTting with wrong guid ################################################### - + put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) put_response = self.client.put(put_url, {}, format="json") self.assertEqual(put_response.status_code, status.HTTP_404_NOT_FOUND) - - ################################################### - # try PUTting with unauthorized user - ################################################### - - _ = self.client.login(username="blip", password="blip") - put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid}) - put_data = { - "title" : self.third_test_title, - "content" : self.third_test_content, - "create_new_revision": False - } - put_response = self.client.put(put_url, put_data, format="json") - self.assertEqual(put_response.status_code, status.HTTP_403_FORBIDDEN) - + + def test_copy_renkan(self): - + ################################################### # POSTing new Renkan ################################################### - + post_url = reverse("v1.0:renkan_list") data = {"title": self.first_test_title, "content": self.first_test_content} post_response = self.client.post(post_url, data, format="json") post_response_dict = json.loads(post_response.content.decode()) source_renkan_guid = post_response_dict.get("id", "") source_revision_guid = post_response_dict.get("current_revision_id", "") - + ################################################### # POSTing copy with query arg for RENKAN guid ################################################### - + first_copy_data = {"title": "new_title_copy_1"} first_copy_url = post_url+"?source_renkan_id="+source_renkan_guid first_copy_response = self.client.post(first_copy_url, first_copy_data, format="json") first_copy_response_dict = json.loads(first_copy_response.content.decode()) first_copy_response_content_dict = json.loads(first_copy_response_dict.get("content", "{}")) - self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED) + self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED) self.assertEqual(Renkan.objects.count(), 2) # Checking data # in the response @@ -467,11 +436,11 @@ self.assertEqual(getattr(first_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(first_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(first_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) - + ################################################### # POSTing copy with source_renkan_guid in data ################################################### - + second_copy_data = {"source_renkan_id": source_renkan_guid, "title": "new_title_copy_2"} second_copy_url = post_url second_copy_response = self.client.post(second_copy_url, second_copy_data, format="json") @@ -501,17 +470,17 @@ self.assertEqual(getattr(second_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(second_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(second_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) - + ################################################### # POSTing copy with query arg for REVISION guid ################################################### - + third_copy_data = {"title": "new_title_copy_3"} third_copy_url = post_url+"?source_revision_id="+source_revision_guid third_copy_response = self.client.post(third_copy_url, third_copy_data, format="json") third_copy_response_dict = json.loads(third_copy_response.content.decode()) third_copy_response_content_dict = json.loads(third_copy_response_dict.get("content", "{}")) - self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED) + self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED) self.assertEqual(Renkan.objects.count(), 4) # Checking data # in the response @@ -535,11 +504,11 @@ self.assertEqual(getattr(third_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(third_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(third_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) - + ################################################### # POSTing copy with source_revision_guid in data ################################################### - + fourth_copy_data = {"source_revision_id": source_revision_guid} fourth_copy_url = post_url fourth_copy_response = self.client.post(fourth_copy_url, fourth_copy_data, format="json") @@ -569,12 +538,12 @@ self.assertEqual(getattr(fourth_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(fourth_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) self.assertEqual(getattr(fourth_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD)) - - + + ################################################### # try POSTing copy with bad query arg guid and with bad data guid ################################################### - + bad_copy_data = {"source_revision_id": "bleh_bad_id"} # with query arg qarg_bad_copy_url = post_url+"?source_revision_id=bleh_bad_id" @@ -584,22 +553,13 @@ data_bad_copy_url = post_url data_bad_copy_response = self.client.post(data_bad_copy_url, bad_copy_data, format="json") self.assertEqual(data_bad_copy_response.status_code, status.HTTP_404_NOT_FOUND) - - ################################################### - # try POSTing with unauthorized user - ################################################### - - _ = self.client.login(username="blip", password="blip") - post_url = reverse("v1.0:renkan_list")+"?source_revision_id="+source_revision_guid - post_response = self.client.post(post_url, {}, format="json") - self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN) - + def test_delete_renkan(self): - + ################################################### # POSTing new Renkan ################################################### - + post_url = reverse("v1.0:renkan_list") data = {"title": self.first_test_title, "content": self.first_test_content} post_response = self.client.post(post_url, data, format="json") @@ -607,7 +567,7 @@ to_delete_renkan_guid = post_response_dict.get("id", "") to_delete_revision_guid = post_response_dict.get("current_revision_id", "") to_delete_renkan_ts = json.loads(post_response_dict.get("content", "")).get("updated", "") - + ################################################### # POSTing copy ################################################### @@ -615,55 +575,43 @@ post_response = self.client.post(post_url+"?source="+to_delete_renkan_guid, data, format="json") post_response_dict = json.loads(post_response.content.decode()) copy_renkan_guid = post_response_dict.get("id", "") - + # Adding another revision put_data = {"title": self.first_test_title+"_edited!", "validation_timestamp": to_delete_renkan_ts, "create_new_revision": True} put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) put_response = self.client.put(put_url, put_data, format="json") self.assertEqual(Renkan.objects.count(), 2) self.assertEqual(Revision.objects.count(), 3) - - ################################################### - # try to DELETE with unauthorized user - ################################################### - - _ = self.client.login(username="blip", password="blip") - delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) - delete_response = self.client.delete(delete_url, format="json") - self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN) - - # Restoring rightful user - _ = self.client.login(username="blop", password="blop") - + + ################################################### # DELETE initial renkan ################################################### - + delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) delete_response = self.client.delete(delete_url, format="json") self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(Renkan.objects.count(), 1) # Only the copy remains self.assertEqual(Revision.objects.count(), 1) # Only the copy initial revision remains - + ################################################### # Try to GET deleted renkan ################################################### - + get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid}) get_response = self.client.get(get_url, format="json") self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND) - + ################################################### # Check that remaining renkan doesn"t have reference to deleted renkan ################################################### copy_renkan = Renkan.objects.get(renkan_guid=copy_renkan_guid) self.assertIsNone(copy_renkan.source_revision) - + ################################################### # Try to DELETE renkan with wrong guid ################################################### - + delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"}) delete_response = self.client.delete(delete_url, format="json") self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND) - \ No newline at end of file