server/python/django2/renkanmanager/tests/v1_0/tests_renkan.py
changeset 613 e00a24b711a0
parent 610 b9edc1c1538a
child 615 f3875fbe206a
equal deleted inserted replaced
612:aa4987fede52 613:e00a24b711a0
     3 from django.contrib.auth import get_user_model
     3 from django.contrib.auth import get_user_model
     4 from django.core.urlresolvers import reverse
     4 from django.core.urlresolvers import reverse
     5 from renkanmanager.models import Renkan, Revision
     5 from renkanmanager.models import Renkan, Revision
     6 from rest_framework import status
     6 from rest_framework import status
     7 from rest_framework.test import APITestCase
     7 from rest_framework.test import APITestCase
       
     8 from rest_framework.test import force_authenticate
     8 
     9 
     9 
    10 
    10 User = get_user_model()
    11 User = get_user_model()
    11 
    12 
    12 class RenkanTests(APITestCase):
    13 class RenkanTests(APITestCase):
    13     
    14 
    14     def setUp(self):
    15     def setUp(self):
    15         User.objects.create_superuser("blop", "blop@blop.com", "blop")
    16         User.objects.create_superuser("blop", "blop@blop.com", "blop")
    16         self.user = User.objects.get_by_natural_key(username="blop")
    17         self.user = User.objects.get_by_natural_key(username="blop")
    17         _ = self.client.login(username="blop", password="blop")
    18 
    18         User.objects.create_user("blip", "blip@blip.com", "blip")
    19         self.client.force_login(self.user)
    19         self.unauthorized_user = User.objects.get_by_natural_key(username="blip")
    20 
    20         
       
    21         # POSTing test workspace
    21         # POSTing test workspace
    22         post_url = reverse("v1.0:workspace_list")
    22         post_url = reverse("v1.0:workspace_list")
    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")
    64             "users": [],
    64             "users": [],
    65             "space_id": "",
    65             "space_id": "",
    66             "views": []
    66             "views": []
    67         }
    67         }
    68         self.third_test_content = json.dumps(self.third_test_content_dict)
    68         self.third_test_content = json.dumps(self.third_test_content_dict)
    69         
    69 
    70     def test_create_renkan(self):
    70     def test_create_renkan(self):
    71         
    71 
    72         ###################################################
    72         ###################################################
    73         # POSTing new Renkan
    73         # POSTing new Renkan
    74         ###################################################
    74         ###################################################
    75         
    75 
    76         post_url = reverse("v1.0:renkan_list")
    76         post_url = reverse("v1.0:renkan_list")
    77         data = {"title": self.first_test_title, "content": self.first_test_content}
    77         data = {"title": self.first_test_title, "content": self.first_test_content}
    78         
    78 
    79         post_response = self.client.post(post_url, data, format="json")
    79         post_response = self.client.post(post_url, data, format="json")
    80         self.assertEqual(post_response.status_code, status.HTTP_201_CREATED)
    80         self.assertEqual(post_response.status_code, status.HTTP_201_CREATED)
    81         self.assertEqual(Renkan.objects.count(), 1)
    81         self.assertEqual(Renkan.objects.count(), 1)
    82         self.assertEqual(Revision.objects.count(), 1)
    82         self.assertEqual(Revision.objects.count(), 1)
    83         
    83 
    84         # Checking POSTed Renkan data
    84         # Checking POSTed Renkan data
    85         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", "{}"))
    86         post_response_content_dict = json.loads(post_response_dict.get("content", "{}"))
    87         new_renkan_guid = post_response_dict.get("id", "")
    87         new_renkan_guid = post_response_dict.get("id", "")
    88         new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid)
    88         new_renkan = Renkan.objects.get(renkan_guid=new_renkan_guid)
    94         self.assertEqual(new_renkan.title, self.first_test_title)
    94         self.assertEqual(new_renkan.title, self.first_test_title)
    95         new_renkan_content_dict = json.loads(new_renkan.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())):
    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":
    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, ""))
    98                 self.assertEqual(new_renkan_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
    99         
    99 
   100         # Revision count
   100         # Revision count
   101         self.assertEqual(new_renkan.revision_count, 1)
   101         self.assertEqual(new_renkan.revision_count, 1)
   102         self.assertEqual(post_response_dict.get("revision_count", ""), 1)
   102         self.assertEqual(post_response_dict.get("revision_count", ""), 1)
   103         
   103 
   104         # Checking POSTed Renkan revision data
   104         # Checking POSTed Renkan revision data
   105         new_renkan_revision_guid = post_response_dict.get("current_revision_id", "")
   105         new_renkan_revision_guid = post_response_dict.get("current_revision_id", "")
   106         new_renkan_revision = Revision.objects.get(revision_guid = new_renkan_revision_guid)
   106         new_renkan_revision = Revision.objects.get(revision_guid = new_renkan_revision_guid)
   107         # GUIDs and username
   107         # GUIDs and username
   108         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))
   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),
   359         put_response = self.client.put(put_url, put_data, format="json")
   341         put_response = self.client.put(put_url, put_data, format="json")
   360         self.assertEqual(put_response.status_code, status.HTTP_200_OK)
   342         self.assertEqual(put_response.status_code, status.HTTP_200_OK)
   361         put_response_dict = json.loads(put_response.content.decode())
   343         put_response_dict = json.loads(put_response.content.decode())
   362         put_response_content_dict = json.loads(put_response_dict.get("content", "{}"))
   344         put_response_content_dict = json.loads(put_response_dict.get("content", "{}"))
   363         put_response_ts = put_response_content_dict.get("updated", "")
   345         put_response_ts = put_response_content_dict.get("updated", "")
   364         
   346 
   365         # checking we created a new revision
   347         # checking we created a new revision
   366         updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
   348         updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
   367         created_revision_guid = put_response_dict.get("current_revision_id", "")
   349         created_revision_guid = put_response_dict.get("current_revision_id", "")
   368         self.assertNotEqual(created_revision_guid, revision_guid)
   350         self.assertNotEqual(created_revision_guid, revision_guid)
   369         self.assertEqual(Renkan.objects.count(), 1)
   351         self.assertEqual(Renkan.objects.count(), 1)
   370         self.assertEqual(Revision.objects.count(), 2)
   352         self.assertEqual(Revision.objects.count(), 2)
   371         self.assertEqual(put_response_dict.get("revision_count", ""), 2)
   353         self.assertEqual(put_response_dict.get("revision_count", ""), 2)
   372         self.assertEqual(updated_project.revision_count, 2)
   354         self.assertEqual(updated_project.revision_count, 2)
   373         
   355 
   374         # checking project now points towards new revision
   356         # checking project now points towards new revision
   375         self.assertEqual(updated_project.current_revision.revision_guid, created_revision_guid)
   357         self.assertEqual(updated_project.current_revision.revision_guid, created_revision_guid)
   376         # checking data was updated
   358         # checking data was updated
   377         #     in the reponse
   359         #     in the reponse
   378         self.assertEqual(put_response_dict.get("title", ""), self.second_test_title)
   360         self.assertEqual(put_response_dict.get("title", ""), self.second_test_title)
   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)
   465             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
   434             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, ""))
   435                 self.assertEqual(first_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   467         self.assertEqual(getattr(first_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   436         self.assertEqual(getattr(first_copy.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))
   437         self.assertEqual(getattr(first_copy_revision.creator, 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))
   438         self.assertEqual(getattr(first_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   470         
   439 
   471         ###################################################
   440         ###################################################
   472         # POSTing copy with source_renkan_guid in data
   441         # POSTing copy with source_renkan_guid in data
   473         ###################################################
   442         ###################################################
   474         
   443 
   475         second_copy_data = {"source_renkan_id": source_renkan_guid, "title": "new_title_copy_2"}
   444         second_copy_data = {"source_renkan_id": source_renkan_guid, "title": "new_title_copy_2"}
   476         second_copy_url = post_url
   445         second_copy_url = post_url
   477         second_copy_response = self.client.post(second_copy_url, second_copy_data, format="json")
   446         second_copy_response = self.client.post(second_copy_url, second_copy_data, format="json")
   478         second_copy_response_dict = json.loads(second_copy_response.content.decode())
   447         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", "{}"))
   448         second_copy__response_content_dict = json.loads(second_copy_response_dict.get("content", "{}"))
   499             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
   468             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, ""))
   469                 self.assertEqual(second_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   501         self.assertEqual(getattr(second_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   470         self.assertEqual(getattr(second_copy.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))
   471         self.assertEqual(getattr(second_copy_revision.creator, 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))
   472         self.assertEqual(getattr(second_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   504         
   473 
   505         ###################################################
   474         ###################################################
   506         # POSTing copy with query arg for REVISION guid
   475         # POSTing copy with query arg for REVISION guid
   507         ###################################################
   476         ###################################################
   508         
   477 
   509         third_copy_data = {"title": "new_title_copy_3"}
   478         third_copy_data = {"title": "new_title_copy_3"}
   510         third_copy_url = post_url+"?source_revision_id="+source_revision_guid
   479         third_copy_url = post_url+"?source_revision_id="+source_revision_guid
   511         third_copy_response = self.client.post(third_copy_url, third_copy_data, format="json")
   480         third_copy_response = self.client.post(third_copy_url, third_copy_data, format="json")
   512         third_copy_response_dict = json.loads(third_copy_response.content.decode())
   481         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", "{}"))
   482         third_copy_response_content_dict = json.loads(third_copy_response_dict.get("content", "{}"))
   514         self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED)  
   483         self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED)
   515         self.assertEqual(Renkan.objects.count(), 4)
   484         self.assertEqual(Renkan.objects.count(), 4)
   516         # Checking data
   485         # Checking data
   517         #     in the response
   486         #     in the response
   518         self.assertNotEqual(third_copy_response_dict.get("id"), source_renkan_guid)
   487         self.assertNotEqual(third_copy_response_dict.get("id"), source_renkan_guid)
   519         self.assertEqual(third_copy_response_dict.get("source_revision_id"), source_revision_guid)
   488         self.assertEqual(third_copy_response_dict.get("source_revision_id"), source_revision_guid)
   533             if key != "updated" and key != "created" and key!= "id" and key != "space_id":
   502             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, ""))
   503                 self.assertEqual(third_copy_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
   535         self.assertEqual(getattr(third_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   504         self.assertEqual(getattr(third_copy.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))
   505         self.assertEqual(getattr(third_copy_revision.creator, 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))
   506         self.assertEqual(getattr(third_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
   538         
   507 
   539         ###################################################
   508         ###################################################
   540         # POSTing copy with source_revision_guid in data
   509         # POSTing copy with source_revision_guid in data
   541         ###################################################
   510         ###################################################
   542         
   511 
   543         fourth_copy_data = {"source_revision_id": source_revision_guid}
   512         fourth_copy_data = {"source_revision_id": source_revision_guid}
   544         fourth_copy_url = post_url
   513         fourth_copy_url = post_url
   545         fourth_copy_response = self.client.post(fourth_copy_url, fourth_copy_data, format="json")
   514         fourth_copy_response = self.client.post(fourth_copy_url, fourth_copy_data, format="json")
   546         fourth_copy_response_dict = json.loads(fourth_copy_response.content.decode())
   515         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", "{}"))
   516         fourth_copy_response_content_dict = json.loads(fourth_copy_response_dict.get("content", "{}"))
   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