server/python/django2/renkanmanager/tests/v1_0/tests_renkan.py
changeset 610 b9edc1c1538a
parent 593 2ff785d7026c
child 613 e00a24b711a0
equal deleted inserted replaced
609:854a027c80ff 610:b9edc1c1538a
    23         test_title = "bleh_title"
    23         test_title = "bleh_title"
    24         data = {"title": test_title}
    24         data = {"title": test_title}
    25         post_response = self.client.post(post_url, data, format="json")
    25         post_response = self.client.post(post_url, data, format="json")
    26         self.test_workspace_guid = json.loads(post_response.content.decode()).get("id")
    26         self.test_workspace_guid = json.loads(post_response.content.decode()).get("id")
    27         self.first_test_title = "test_title_1"
    27         self.first_test_title = "test_title_1"
    28         self.first_test_content = json.dumps({
    28         self.first_test_content_dict = {
    29             "id": "",
    29             "id": "",
    30             "title": "test_title_1",
    30             "title": "test_title_1",
    31             "description": "test_description_1",
    31             "description": "test_description_1",
    32             "created": "",
    32             "created": "2016-03-11 15:10:10.645193+00:00",
    33             "updated": "",
    33             "updated": "2016-03-11 15:10:10.645193+00:00",
    34             "edges": [],
    34             "edges": [],
    35             "nodes": [],
    35             "nodes": [],
    36             "users": [],
    36             "users": [],
    37             "space_id": "",
    37             "space_id": "",
    38             "views": []
    38             "views": []
    39         })
    39         }
    40         self.second_test_title = "test_title_1"
    40         self.first_test_content = json.dumps(self.first_test_content_dict)
    41         self.second_test_content = json.dumps({
    41         self.second_test_title = "test_title_2"
       
    42         self.second_test_content_dict = {
    42             "id": "",
    43             "id": "",
    43             "title": "test_title_2",
    44             "title": "test_title_2",
    44             "description": "test_description_2",
    45             "description": "test_description_2",
    45             "created": "",
    46             "created": "2016-03-11 15:10:10.645193+00:00",
    46             "updated": "",
    47             "updated": "2016-03-12 15:10:10.645193+00:00",
    47             "edges": [],
    48             "edges": [],
    48             "nodes": [],
    49             "nodes": [],
    49             "users": [],
    50             "users": [],
    50             "space_id": "",
    51             "space_id": "",
    51             "views": []
    52             "views": []
    52         })
    53         }
    53         self.third_test_title = "test_title_1"
    54         self.second_test_content = json.dumps(self.second_test_content_dict)
    54         self.third_test_content = json.dumps({
    55         self.third_test_title = "test_title_3"
       
    56         self.third_test_content_dict = {
    55             "id": "",
    57             "id": "",
    56             "title": "test_title_3",
    58             "title": "test_title_3",
    57             "description": "test_description_3",
    59             "description": "test_description_3",
    58             "created": "",
    60             "created": "2016-03-11 15:10:10.645193+00:00",
    59             "updated": "",
    61             "updated": "2016-03-13 15:10:10.645193+00:00",
    60             "edges": [],
    62             "edges": [],
    61             "nodes": [],
    63             "nodes": [],
    62             "users": [],
    64             "users": [],
    63             "space_id": "",
    65             "space_id": "",
    64             "views": []
    66             "views": []
    65         })
    67         }
       
    68         self.third_test_content = json.dumps(self.third_test_content_dict)
    66         
    69         
    67     def test_create_renkan(self):
    70     def test_create_renkan(self):
    68         
    71         
    69         ###################################################
    72         ###################################################
    70         # POSTing new Renkan
    73         # POSTing new Renkan
    78         self.assertEqual(Renkan.objects.count(), 1)
    81         self.assertEqual(Renkan.objects.count(), 1)
    79         self.assertEqual(Revision.objects.count(), 1)
    82         self.assertEqual(Revision.objects.count(), 1)
    80         
    83         
    81         # Checking POSTed Renkan data
    84         # Checking POSTed Renkan data
    82         post_response_dict = json.loads(post_response.content.decode())
    85         post_response_dict = json.loads(post_response.content.decode())
       
    86         post_response_content_dict = json.loads(post_response_dict.get("content", "{}"))
    83         new_renkan_guid = post_response_dict.get("id", "")
    87         new_renkan_guid = post_response_dict.get("id", "")
    84         new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid)
    88         new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid)
    85         # GUIDs and username
    89         # GUIDs and username
    86         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("created_by", ""))
    90         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("created_by", ""))
    87         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("last_updated_by", ""))
    91         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("last_updated_by", ""))
    88         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan.creator, User.USERNAME_FIELD))
    92         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan.creator, User.USERNAME_FIELD))
    89         # Content and title extracted from revision
    93         # Content and title extracted from revision
    90         self.assertEqual(new_renkan.title, self.first_test_title)
    94         self.assertEqual(new_renkan.title, self.first_test_title)
    91         self.assertEqual(new_renkan.content, self.first_test_content)
    95         new_renkan_content_dict = json.loads(new_renkan.content)
       
    96         for key in list(self.first_test_content_dict.keys()) + list(set(new_renkan_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
    97             if key != "updated" and key != "created" and key != "id":
       
    98                 self.assertEqual(new_renkan_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
       
    99         
    92         # Revision count
   100         # Revision count
    93         self.assertEqual(new_renkan.revision_count, 1)
   101         self.assertEqual(new_renkan.revision_count, 1)
    94         self.assertEqual(post_response_dict.get("revision_count", ""), 1)
   102         self.assertEqual(post_response_dict.get("revision_count", ""), 1)
    95         
   103         
    96         # Checking POSTed Renkan revision data
   104         # Checking POSTed Renkan revision data
   100         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan_revision.creator, User.USERNAME_FIELD))
   108         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan_revision.creator, User.USERNAME_FIELD))
   101         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan_revision.last_updated_by, User.USERNAME_FIELD))
   109         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan_revision.last_updated_by, User.USERNAME_FIELD))
   102         # Title and content
   110         # Title and content
   103         #    in the response
   111         #    in the response
   104         self.assertEqual(post_response_dict.get("title", ""), self.first_test_title)
   112         self.assertEqual(post_response_dict.get("title", ""), self.first_test_title)
   105         self.assertEqual(post_response_dict.get("content", ""), self.first_test_content)
   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":
       
   115                 self.assertEqual(post_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
       
   116         
   106         #    in the database
   117         #    in the database
   107         self.assertEqual(new_renkan_revision.title, self.first_test_title)
   118         self.assertEqual(new_renkan_revision.title, self.first_test_title)
   108         self.assertEqual(new_renkan_revision.content, self.first_test_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())):
       
   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, ""))
   109         
   123         
   110         # Checking permission
   124         # Checking permission
   111         self.assertTrue(self.user.has_perm("view_renkan", new_renkan))
   125         self.assertTrue(self.user.has_perm("view_renkan", new_renkan))
   112         
   126         
   113         ###################################################
   127         ###################################################
   126         post_response_dict = json.loads(post_response.content.decode())
   140         post_response_dict = json.loads(post_response.content.decode())
   127         new_renkan_guid = post_response_dict.get("id", "")
   141         new_renkan_guid = post_response_dict.get("id", "")
   128         new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid)
   142         new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid)
   129         # GUIDs and username
   143         # GUIDs and username
   130         self.assertEqual(self.test_workspace_guid, post_response_dict.get("workspace_id", ""))
   144         self.assertEqual(self.test_workspace_guid, post_response_dict.get("workspace_id", ""))
   131         self.assertEqual(self.test_workspace_guid, new_renkan.workspace_guid)
   145         self.assertEqual(self.test_workspace_guid, new_renkan.workspace.workspace_guid)
   132         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("created_by", ""))
   146         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("created_by", ""))
   133         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("last_updated_by", ""))
   147         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), post_response_dict.get("last_updated_by", ""))
   134         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan.creator, User.USERNAME_FIELD))
   148         self.assertEqual(getattr(self.user, User.USERNAME_FIELD), getattr(new_renkan.creator, User.USERNAME_FIELD))
   135         # Content and title extracted from revision
   149         # Content and title extracted from revision
   136         self.assertEqual(new_renkan.title, self.second_test_title)
   150         self.assertEqual(new_renkan.title, self.second_test_title)
   137         self.assertEqual(new_renkan.content, self.second_test_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())):
       
   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, ""))
       
   155         
   138         # Revision count
   156         # Revision count
   139         self.assertEqual(new_renkan.revision_count, 1)
   157         self.assertEqual(new_renkan.revision_count, 1)
   140         self.assertEqual(post_response_dict.get("revision_count", ""), 1)
   158         self.assertEqual(post_response_dict.get("revision_count", ""), 1)
   141         
   159         
   142         ###################################################
   160         ###################################################
   157         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"})
   158         data = {"title": self.third_test_title, "content": self.third_test_content}
   176         data = {"title": self.third_test_title, "content": self.third_test_content}
   159         
   177         
   160         post_response = self.client.post(post_url, data, format="json")
   178         post_response = self.client.post(post_url, data, format="json")
   161         self.assertEqual(post_response.status_code, status.HTTP_404_NOT_FOUND)
   179         self.assertEqual(post_response.status_code, status.HTTP_404_NOT_FOUND)
       
   180         
       
   181         ###################################################
       
   182         # POSTing with non-JSON serializable content
       
   183         ###################################################
       
   184         
       
   185         post_url = reverse("v1.0:renkan_list")
       
   186         data = {"title": self.third_test_title, "content": "notJson(Serializable}"}
       
   187         
       
   188         post_response = self.client.post(post_url, data, format="json")
       
   189         self.assertEqual(post_response.status_code, status.HTTP_400_BAD_REQUEST)
   162         
   190         
   163         ###################################################
   191         ###################################################
   164         # try POSTing with unauthorized user 
   192         # try POSTing with unauthorized user 
   165         ###################################################
   193         ###################################################
   166         
   194         
   257         
   285         
   258         get_response_content = json.loads(get_response.content.decode()) # Should be a list
   286         get_response_content = json.loads(get_response.content.decode()) # Should be a list
   259         self.assertTrue(isinstance(get_response_content, list))
   287         self.assertTrue(isinstance(get_response_content, list))
   260         self.assertEqual(len(get_response_content), 1)
   288         self.assertEqual(len(get_response_content), 1)
   261         
   289         
       
   290         
       
   291         
       
   292         
   262     
   293     
   263     def test_update_renkan(self):
   294     def test_update_renkan(self):
   264 
   295 
   265         ###################################################
   296         ###################################################
   266         # POSTing new Renkan
   297         # POSTing new Renkan
   268         
   299         
   269         post_url = reverse("v1.0:renkan_list")
   300         post_url = reverse("v1.0:renkan_list")
   270         data = {}
   301         data = {}
   271         post_response = self.client.post(post_url, data, format="json")
   302         post_response = self.client.post(post_url, data, format="json")
   272         post_response_dict = json.loads(post_response.content.decode())
   303         post_response_dict = json.loads(post_response.content.decode())
       
   304         post_response_ts = json.loads(post_response_dict.get("content"), "{}").get("updated", "")
   273         renkan_guid = post_response_dict.get("id", "")
   305         renkan_guid = post_response_dict.get("id", "")
   274         revision_guid = post_response_dict.get("current_revision_id", "")
   306         revision_guid = post_response_dict.get("current_revision_id", "")
   275 
   307         
   276         ###################################################
   308         ###################################################
   277         # PUTting by updating current revision
   309         # PUTting by updating current revision
   278         ###################################################
   310         ###################################################
   279         
   311         
   280         put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid})
   312         put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid})
       
   313         put_content_dict = json.loads(self.first_test_content)
       
   314         put_content_dict["updated"] = post_response_ts
   281         put_data = {
   315         put_data = {
   282             "title" : self.first_test_title,
   316             "title" : self.first_test_title,
   283             "content" : self.first_test_content,
   317             "content" : json.dumps(put_content_dict),
   284             "create_new_revision": False
   318             "create_new_revision": False
   285         }
   319         }
   286         put_response = self.client.put(put_url, put_data, format="json")
   320         put_response = self.client.put(put_url, put_data, format="json")
   287         self.assertEqual(put_response.status_code, status.HTTP_200_OK)
   321         self.assertEqual(put_response.status_code, status.HTTP_200_OK)
   288         put_response_dict = json.loads(put_response.content.decode())
   322         put_response_dict = json.loads(put_response.content.decode())
       
   323         put_response_content_dict = json.loads(put_response_dict.get("content", "{}"))
       
   324         put_response_ts = put_response_content_dict.get("updated", "")
       
   325         
   289         # checking we"re still on the same revision as the initial one
   326         # checking we"re still on the same revision as the initial one
   290         updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
   327         updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
   291         self.assertEqual(revision_guid, put_response_dict.get("current_revision_id", ""))
   328         self.assertEqual(revision_guid, put_response_dict.get("current_revision_id", ""))
   292         self.assertEqual(put_response_dict.get("revision_count", ""), 1)
   329         self.assertEqual(put_response_dict.get("revision_count", ""), 1)
   293         self.assertEqual(updated_project.revision_count, 1)
   330         self.assertEqual(updated_project.revision_count, 1)
   294         
   331         
   295         self.assertEqual(revision_guid, updated_project.current_revision_guid)
   332         self.assertEqual(revision_guid, updated_project.current_revision.revision_guid)
   296         # checking data was updated
   333         # checking data was updated
   297         #     in the reponse
   334         #     in the reponse
   298         self.assertEqual(put_response_dict.get("title", ""), self.first_test_title)
   335         self.assertEqual(put_response_dict.get("title", ""), self.first_test_title)
   299         self.assertEqual(put_response_dict.get("content", ""), self.first_test_content)
   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())):
       
   337             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, ""))
       
   339                 
   300         #     in the database
   340         #     in the database
   301         updated_revision = Revision.objects.get(revision_guid=revision_guid)
   341         updated_revision = Revision.objects.get(revision_guid=revision_guid)
       
   342         updated_revision_content_dict = json.loads(updated_revision.content)
   302         self.assertEqual(updated_revision.title, self.first_test_title)
   343         self.assertEqual(updated_revision.title, self.first_test_title)
   303         self.assertEqual(updated_revision.content, self.first_test_content)
   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())):
       
   345             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, ""))
   304         
   347         
   305         ###################################################
   348         ###################################################
   306         # PUTting by creating a new revision
   349         # PUTting by creating a new revision
   307         ###################################################
   350         ###################################################
   308         
   351         
       
   352         put_content_dict = json.loads(self.second_test_content)
       
   353         put_content_dict["updated"] = put_response_ts
   309         put_data = {
   354         put_data = {
   310             "title" : self.second_test_title,
   355             "title" : self.second_test_title,
   311             "content" : self.second_test_content,
   356             "content" : json.dumps(put_content_dict),
   312             "create_new_revision": True
   357             "create_new_revision": True
   313         }
   358         }
   314         put_response = self.client.put(put_url, put_data, format="json")
   359         put_response = self.client.put(put_url, put_data, format="json")
   315         self.assertEqual(put_response.status_code, status.HTTP_200_OK)  
   360         self.assertEqual(put_response.status_code, status.HTTP_200_OK)
   316         put_response_dict = json.loads(put_response.content.decode())
   361         put_response_dict = json.loads(put_response.content.decode())
       
   362         put_response_content_dict = json.loads(put_response_dict.get("content", "{}"))
       
   363         put_response_ts = put_response_content_dict.get("updated", "")
   317         
   364         
   318         # checking we created a new revision
   365         # checking we created a new revision
   319         updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
   366         updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
   320         created_revision_guid = put_response_dict.get("current_revision_id", "")
   367         created_revision_guid = put_response_dict.get("current_revision_id", "")
   321         self.assertNotEqual(created_revision_guid, revision_guid)
   368         self.assertNotEqual(created_revision_guid, revision_guid)
   323         self.assertEqual(Revision.objects.count(), 2)
   370         self.assertEqual(Revision.objects.count(), 2)
   324         self.assertEqual(put_response_dict.get("revision_count", ""), 2)
   371         self.assertEqual(put_response_dict.get("revision_count", ""), 2)
   325         self.assertEqual(updated_project.revision_count, 2)
   372         self.assertEqual(updated_project.revision_count, 2)
   326         
   373         
   327         # checking project now points towards new revision
   374         # checking project now points towards new revision
   328         self.assertEqual(updated_project.current_revision_guid, created_revision_guid)
   375         self.assertEqual(updated_project.current_revision.revision_guid, created_revision_guid)
   329         # checking data was updated
   376         # checking data was updated
   330         #     in the reponse
   377         #     in the reponse
   331         self.assertEqual(put_response_dict.get("title", ""), self.second_test_title)
   378         self.assertEqual(put_response_dict.get("title", ""), self.second_test_title)
   332         self.assertEqual(put_response_dict.get("content", ""), self.second_test_content)
   379         for key in list(self.second_test_content_dict.keys()) + list(set(put_response_content_dict.keys()) - set(self.second_test_content_dict.keys())):
       
   380             if key != "updated" and key!= "id" and key != "space_id":
       
   381                 self.assertEqual(put_response_content_dict.get(key, ""), self.second_test_content_dict.get(key, ""))
   333         #     in the database
   382         #     in the database
   334         updated_revision = Revision.objects.get(revision_guid=created_revision_guid)
   383         updated_revision = Revision.objects.get(revision_guid=created_revision_guid)
       
   384         updated_revision_content_dict = json.loads(updated_revision.content)
   335         self.assertEqual(updated_revision.title, self.second_test_title)
   385         self.assertEqual(updated_revision.title, self.second_test_title)
   336         self.assertEqual(updated_revision.content, self.second_test_content)
   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())):
       
   387             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, ""))
   337         
   389         
   338         ###################################################
   390         ###################################################
   339         # try to update source_revision_guid or workspace_guid
   391         # try to update source_revision_guid or workspace_guid
   340         ###################################################
   392         ###################################################
   341         
   393         
   342         put_data = {
   394         put_data = {
   343             "title" : self.third_test_title,
   395             "title" : self.third_test_title,
   344             "content" : self.third_test_content,
   396             "content" : self.third_test_content,
   345             "workspace_id": "bleh-workspace-guid" # should fail without even checking the id
   397             "workspace_id": "bleh-workspace-guid" # should fail without even checking the id
   346         }
       
   347         put_response = self.client.put(put_url, put_data, format="json")
       
   348         self.assertEqual(put_response.status_code, status.HTTP_400_BAD_REQUEST)
       
   349         
       
   350         put_data = {
       
   351             "title" : self.third_test_title,
       
   352             "content" : self.third_test_content,
       
   353             "source_revision_id" : "bleh-revision-guid" # should fail without even checking the id
       
   354         }
   398         }
   355         put_response = self.client.put(put_url, put_data, format="json")
   399         put_response = self.client.put(put_url, put_data, format="json")
   356         self.assertEqual(put_response.status_code, status.HTTP_400_BAD_REQUEST)
   400         self.assertEqual(put_response.status_code, status.HTTP_400_BAD_REQUEST)
   357         
   401         
   358         ###################################################
   402         ###################################################
   396         
   440         
   397         first_copy_data = {"title": "new_title_copy_1"}
   441         first_copy_data = {"title": "new_title_copy_1"}
   398         first_copy_url = post_url+"?source_renkan_id="+source_renkan_guid
   442         first_copy_url = post_url+"?source_renkan_id="+source_renkan_guid
   399         first_copy_response = self.client.post(first_copy_url, first_copy_data, format="json")
   443         first_copy_response = self.client.post(first_copy_url, first_copy_data, format="json")
   400         first_copy_response_dict = json.loads(first_copy_response.content.decode())
   444         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", "{}"))
   401         self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED)  
   446         self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED)  
   402         self.assertEqual(Renkan.objects.count(), 2)
   447         self.assertEqual(Renkan.objects.count(), 2)
   403         # Checking data
   448         # Checking data
   404         #     in the response
   449         #     in the response
   405         self.assertNotEqual(first_copy_response_dict.get("id"), source_renkan_guid)
   450         self.assertNotEqual(first_copy_response_dict.get("id"), source_renkan_guid)
   406         self.assertEqual(first_copy_response_dict.get("source_revision_id"), source_revision_guid)
   451         self.assertEqual(first_copy_response_dict.get("source_revision_id"), source_revision_guid)
   407         self.assertEqual(first_copy_response_dict.get("title", ""), "new_title_copy_1")
   452         self.assertEqual(first_copy_response_dict.get("title", ""), "new_title_copy_1")
   408         self.assertEqual(first_copy_response_dict.get("content", ""), self.first_test_content)
   453         for key in list(self.first_test_content_dict.keys()) + list(set(first_copy_response_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   454             if key != "updated" and key != "created" and key !="title" and key!= "id" and key != "space_id":
       
   455                 self.assertEqual(first_copy_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   409         self.assertEqual(first_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   456         self.assertEqual(first_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   410         self.assertEqual(first_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   457         self.assertEqual(first_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   411         #     in the database
   458         #     in the database
   412         first_copy = Renkan.objects.get(renkan_guid=first_copy_response_dict.get("id", ""))
   459         first_copy = Renkan.objects.get(renkan_guid=first_copy_response_dict.get("id", ""))
   413         first_copy_revision = Revision.objects.get(revision_guid=first_copy_response_dict.get("current_revision_id", ""))
   460         first_copy_revision = Revision.objects.get(revision_guid=first_copy_response_dict.get("current_revision_id", ""))
   414         self.assertEqual(first_copy.title, "new_title_copy_1")
   461         self.assertEqual(first_copy.title, "new_title_copy_1")
   415         self.assertEqual(first_copy.content, self.first_test_content)
       
   416         self.assertEqual(first_copy_revision.title, "new_title_copy_1")
   462         self.assertEqual(first_copy_revision.title, "new_title_copy_1")
   417         self.assertEqual(first_copy_revision.content, self.first_test_content)
   463         first_copy_revision_content_dict = json.loads(first_copy_revision.content)
       
   464         for key in list(self.first_test_content_dict.keys()) + list(set(first_copy_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   465             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
       
   466                 self.assertEqual(first_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   418         self.assertEqual(getattr(first_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   467         self.assertEqual(getattr(first_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   419         self.assertEqual(getattr(first_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   468         self.assertEqual(getattr(first_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   420         self.assertEqual(getattr(first_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   469         self.assertEqual(getattr(first_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   421         
   470         
   422         ###################################################
   471         ###################################################
   425         
   474         
   426         second_copy_data = {"source_renkan_id": source_renkan_guid, "title": "new_title_copy_2"}
   475         second_copy_data = {"source_renkan_id": source_renkan_guid, "title": "new_title_copy_2"}
   427         second_copy_url = post_url
   476         second_copy_url = post_url
   428         second_copy_response = self.client.post(second_copy_url, second_copy_data, format="json")
   477         second_copy_response = self.client.post(second_copy_url, second_copy_data, format="json")
   429         second_copy_response_dict = json.loads(second_copy_response.content.decode())
   478         second_copy_response_dict = json.loads(second_copy_response.content.decode())
       
   479         second_copy__response_content_dict = json.loads(second_copy_response_dict.get("content", "{}"))
   430         self.assertEqual(second_copy_response.status_code, status.HTTP_201_CREATED)
   480         self.assertEqual(second_copy_response.status_code, status.HTTP_201_CREATED)
   431         self.assertEqual(Renkan.objects.count(), 3)
   481         self.assertEqual(Renkan.objects.count(), 3)
   432         # Checking data
   482         # Checking data
   433         #     in the response
   483         #     in the response
   434         self.assertNotEqual(second_copy_response_dict.get("id"), source_renkan_guid)
   484         self.assertNotEqual(second_copy_response_dict.get("id"), source_renkan_guid)
   435         self.assertEqual(second_copy_response_dict.get("source_revision_id"), source_revision_guid)
   485         self.assertEqual(second_copy_response_dict.get("source_revision_id"), source_revision_guid)
   436         self.assertEqual(second_copy_response_dict.get("title", ""), "new_title_copy_2")
   486         self.assertEqual(second_copy_response_dict.get("title", ""), "new_title_copy_2")
   437         self.assertEqual(second_copy_response_dict.get("content", ""), self.first_test_content)
   487         for key in list(self.first_test_content_dict.keys()) + list(set(second_copy__response_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   488             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
       
   489                 self.assertEqual(second_copy__response_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   438         self.assertEqual(second_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   490         self.assertEqual(second_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   439         self.assertEqual(second_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   491         self.assertEqual(second_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   440         #     in the database
   492         #     in the database
   441         second_copy = Renkan.objects.get(renkan_guid=second_copy_response_dict.get("id", ""))
   493         second_copy = Renkan.objects.get(renkan_guid=second_copy_response_dict.get("id", ""))
   442         second_copy_revision = Revision.objects.get(revision_guid=second_copy_response_dict.get("current_revision_id", ""))
   494         second_copy_revision = Revision.objects.get(revision_guid=second_copy_response_dict.get("current_revision_id", ""))
   443         self.assertEqual(second_copy.title, "new_title_copy_2")
   495         self.assertEqual(second_copy.title, "new_title_copy_2")
   444         self.assertEqual(second_copy.content, self.first_test_content)
       
   445         self.assertEqual(second_copy_revision.title, "new_title_copy_2")
   496         self.assertEqual(second_copy_revision.title, "new_title_copy_2")
   446         self.assertEqual(second_copy_revision.content, self.first_test_content)
   497         second_copy_revision_content_dict = json.loads(second_copy_revision.content)
       
   498         for key in list(self.first_test_content_dict.keys()) + list(set(second_copy_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   499             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
       
   500                 self.assertEqual(second_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   447         self.assertEqual(getattr(second_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   501         self.assertEqual(getattr(second_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   448         self.assertEqual(getattr(second_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   502         self.assertEqual(getattr(second_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   449         self.assertEqual(getattr(second_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   503         self.assertEqual(getattr(second_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   450         
   504         
   451         ###################################################
   505         ###################################################
   454         
   508         
   455         third_copy_data = {"title": "new_title_copy_3"}
   509         third_copy_data = {"title": "new_title_copy_3"}
   456         third_copy_url = post_url+"?source_revision_id="+source_revision_guid
   510         third_copy_url = post_url+"?source_revision_id="+source_revision_guid
   457         third_copy_response = self.client.post(third_copy_url, third_copy_data, format="json")
   511         third_copy_response = self.client.post(third_copy_url, third_copy_data, format="json")
   458         third_copy_response_dict = json.loads(third_copy_response.content.decode())
   512         third_copy_response_dict = json.loads(third_copy_response.content.decode())
       
   513         third_copy_response_content_dict = json.loads(third_copy_response_dict.get("content", "{}"))
   459         self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED)  
   514         self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED)  
   460         self.assertEqual(Renkan.objects.count(), 4)
   515         self.assertEqual(Renkan.objects.count(), 4)
   461         # Checking data
   516         # Checking data
   462         #     in the response
   517         #     in the response
   463         self.assertNotEqual(third_copy_response_dict.get("id"), source_renkan_guid)
   518         self.assertNotEqual(third_copy_response_dict.get("id"), source_renkan_guid)
   464         self.assertEqual(third_copy_response_dict.get("source_revision_id"), source_revision_guid)
   519         self.assertEqual(third_copy_response_dict.get("source_revision_id"), source_revision_guid)
   465         self.assertEqual(third_copy_response_dict.get("title", ""), "new_title_copy_3")
   520         self.assertEqual(third_copy_response_dict.get("title", ""), "new_title_copy_3")
   466         self.assertEqual(third_copy_response_dict.get("content", ""), self.first_test_content)
   521         for key in list(self.first_test_content_dict.keys()) + list(set(third_copy_response_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   522             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
       
   523                 self.assertEqual(third_copy_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   467         self.assertEqual(third_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   524         self.assertEqual(third_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   468         self.assertEqual(third_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   525         self.assertEqual(third_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   469         #     in the database
   526         #     in the database
   470         third_copy = Renkan.objects.get(renkan_guid=third_copy_response_dict.get("id", ""))
   527         third_copy = Renkan.objects.get(renkan_guid=third_copy_response_dict.get("id", ""))
   471         third_copy_revision = Revision.objects.get(revision_guid=third_copy_response_dict.get("current_revision_id", ""))
   528         third_copy_revision = Revision.objects.get(revision_guid=third_copy_response_dict.get("current_revision_id", ""))
       
   529         third_copy_revision_content_dict = json.loads(third_copy_revision.content)
   472         self.assertEqual(third_copy.title, "new_title_copy_3")
   530         self.assertEqual(third_copy.title, "new_title_copy_3")
   473         self.assertEqual(third_copy.content, self.first_test_content)
       
   474         self.assertEqual(third_copy_revision.title, "new_title_copy_3")
   531         self.assertEqual(third_copy_revision.title, "new_title_copy_3")
   475         self.assertEqual(third_copy_revision.content, self.first_test_content)
   532         for key in list(self.first_test_content_dict.keys()) + list(set(third_copy_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   533             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
       
   534                 self.assertEqual(third_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   476         self.assertEqual(getattr(third_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   535         self.assertEqual(getattr(third_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   477         self.assertEqual(getattr(third_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   536         self.assertEqual(getattr(third_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   478         self.assertEqual(getattr(third_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   537         self.assertEqual(getattr(third_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   479         
   538         
   480         ###################################################
   539         ###################################################
   483         
   542         
   484         fourth_copy_data = {"source_revision_id": source_revision_guid}
   543         fourth_copy_data = {"source_revision_id": source_revision_guid}
   485         fourth_copy_url = post_url
   544         fourth_copy_url = post_url
   486         fourth_copy_response = self.client.post(fourth_copy_url, fourth_copy_data, format="json")
   545         fourth_copy_response = self.client.post(fourth_copy_url, fourth_copy_data, format="json")
   487         fourth_copy_response_dict = json.loads(fourth_copy_response.content.decode())
   546         fourth_copy_response_dict = json.loads(fourth_copy_response.content.decode())
       
   547         fourth_copy_response_content_dict = json.loads(fourth_copy_response_dict.get("content", "{}"))
   488         self.assertEqual(fourth_copy_response.status_code, status.HTTP_201_CREATED)
   548         self.assertEqual(fourth_copy_response.status_code, status.HTTP_201_CREATED)
   489         self.assertEqual(Renkan.objects.count(), 5)
   549         self.assertEqual(Renkan.objects.count(), 5)
   490         # Checking data
   550         # Checking data
   491         #     in the response
   551         #     in the response
   492         self.assertNotEqual(fourth_copy_response_dict.get("id"), source_renkan_guid)
   552         self.assertNotEqual(fourth_copy_response_dict.get("id"), source_renkan_guid)
   493         self.assertEqual(fourth_copy_response_dict.get("source_revision_id"), source_revision_guid)
   553         self.assertEqual(fourth_copy_response_dict.get("source_revision_id"), source_revision_guid)
   494         self.assertEqual(fourth_copy_response_dict.get("title", ""), self.first_test_title)
   554         self.assertEqual(fourth_copy_response_dict.get("title", ""), self.first_test_title)
   495         self.assertEqual(fourth_copy_response_dict.get("content", ""), self.first_test_content)
   555         for key in list(self.first_test_content_dict.keys()) + list(set(fourth_copy_response_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   556             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
       
   557                 self.assertEqual(fourth_copy_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   496         self.assertEqual(fourth_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   558         self.assertEqual(fourth_copy_response_dict.get("created_by", ""), getattr(self.user, User.USERNAME_FIELD))
   497         self.assertEqual(fourth_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   559         self.assertEqual(fourth_copy_response_dict.get("last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
   498         #     in the database
   560         #     in the database
   499         fourth_copy = Renkan.objects.get(renkan_guid=fourth_copy_response_dict.get("id", ""))
   561         fourth_copy = Renkan.objects.get(renkan_guid=fourth_copy_response_dict.get("id", ""))
   500         fourth_copy_revision = Revision.objects.get(revision_guid=fourth_copy_response_dict.get("current_revision_id", ""))
   562         fourth_copy_revision = Revision.objects.get(revision_guid=fourth_copy_response_dict.get("current_revision_id", ""))
   501         self.assertEqual(fourth_copy.title, self.first_test_title)
   563         self.assertEqual(fourth_copy.title, self.first_test_title)
   502         self.assertEqual(fourth_copy.content, self.first_test_content)
       
   503         self.assertEqual(fourth_copy_revision.title, self.first_test_title)
   564         self.assertEqual(fourth_copy_revision.title, self.first_test_title)
   504         self.assertEqual(fourth_copy_revision.content, self.first_test_content)
   565         fourth_copy_revision_content_dict = json.loads(fourth_copy_revision.content)
       
   566         for key in list(self.first_test_content_dict.keys()) + list(set(fourth_copy_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())):
       
   567             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, ""))
   505         self.assertEqual(getattr(fourth_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   569         self.assertEqual(getattr(fourth_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   506         self.assertEqual(getattr(fourth_copy_revision.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))
   507         self.assertEqual(getattr(fourth_copy_revision.last_updated_by, 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))
   508         
   572         
   509         
   573         
   540         data = {"title": self.first_test_title, "content": self.first_test_content}
   604         data = {"title": self.first_test_title, "content": self.first_test_content}
   541         post_response = self.client.post(post_url, data, format="json")
   605         post_response = self.client.post(post_url, data, format="json")
   542         post_response_dict = json.loads(post_response.content.decode())
   606         post_response_dict = json.loads(post_response.content.decode())
   543         to_delete_renkan_guid = post_response_dict.get("id", "")
   607         to_delete_renkan_guid = post_response_dict.get("id", "")
   544         to_delete_revision_guid = post_response_dict.get("current_revision_id", "")
   608         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", "")
   545         
   610         
   546         ###################################################
   611         ###################################################
   547         # POSTing copy
   612         # POSTing copy
   548         ###################################################
   613         ###################################################
   549         data = {}
   614         data = {}
   550         post_response = self.client.post(post_url+"?source="+to_delete_renkan_guid, data, format="json")
   615         post_response = self.client.post(post_url+"?source="+to_delete_renkan_guid, data, format="json")
   551         post_response_dict = json.loads(post_response.content.decode())
   616         post_response_dict = json.loads(post_response.content.decode())
   552         copy_renkan_guid = post_response_dict.get("id", "")
   617         copy_renkan_guid = post_response_dict.get("id", "")
   553         
   618         
   554         # Adding another revision
   619         # Adding another revision
   555         put_data = {"title": self.first_test_title+"_edited!", "create_new_revision": True}
   620         put_data = {"title": self.first_test_title+"_edited!", "validation_timestamp": to_delete_renkan_ts, "create_new_revision": True}
   556         put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid})
   621         put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid})
   557         put_response = self.client.put(put_url, put_data, format="json")
   622         put_response = self.client.put(put_url, put_data, format="json")
   558         self.assertEqual(Renkan.objects.count(), 2)
   623         self.assertEqual(Renkan.objects.count(), 2)
   559         self.assertEqual(Revision.objects.count(), 3)
   624         self.assertEqual(Revision.objects.count(), 3)
   560         
   625         
   590         
   655         
   591         ###################################################
   656         ###################################################
   592         # Check that remaining renkan doesn"t have reference to deleted renkan
   657         # Check that remaining renkan doesn"t have reference to deleted renkan
   593         ###################################################
   658         ###################################################
   594         copy_renkan = Renkan.objects.get(renkan_guid=copy_renkan_guid)
   659         copy_renkan = Renkan.objects.get(renkan_guid=copy_renkan_guid)
   595         self.assertEqual(copy_renkan.source_revision_guid, "")
   660         self.assertIsNone(copy_renkan.source_revision)
   596         
   661         
   597         ###################################################
   662         ###################################################
   598         # Try to DELETE renkan with wrong guid
   663         # Try to DELETE renkan with wrong guid
   599         ###################################################
   664         ###################################################
   600         
   665