server/python/django2/renkanmanager/tests/tests_revision.py
changeset 589 0ae11aa255a3
parent 588 95536fa18d0d
equal deleted inserted replaced
588:95536fa18d0d 589:0ae11aa255a3
       
     1 import json
       
     2 
       
     3 from django.contrib.auth import get_user_model
       
     4 from django.core.urlresolvers import reverse
       
     5 from renkanmanager.models import Renkan, Revision
       
     6 from rest_framework import status
       
     7 from rest_framework.test import APITestCase
       
     8 
       
     9 
       
    10 User = get_user_model()
       
    11 
       
    12 class RevisionTests(APITestCase):
       
    13     
       
    14     def setUp(self):
       
    15         User.objects.create_superuser("blop", "blop@blop.com", "blop")
       
    16         self.user = User.objects.get(username="blop")
       
    17         _ = self.client.login(username="blop", password="blop")
       
    18         User.objects.create_user("blip", "blip@blip.com", "blip")
       
    19         self.unauthorized_user = User.objects.get(username="blip")
       
    20         
       
    21         ###################################################
       
    22         # POSTing new Renkan
       
    23         ###################################################
       
    24         
       
    25         post_url = reverse("renkan_list")
       
    26         self.test_title = "test_title_1"
       
    27         self.test_content = json.dumps({
       
    28             "id": "",
       
    29             "title": "test_title_1",
       
    30             "description": "test_description_1",
       
    31             "created": "",
       
    32             "updated": "",
       
    33             "edges": [],
       
    34             "nodes": [],
       
    35             "users": [],
       
    36             "space_id": "",
       
    37             "views": []
       
    38         })
       
    39         self.test_data = {"title": self.test_title, "content": self.test_content}
       
    40         post_response = self.client.post(post_url, self.test_data, format="json")
       
    41         post_response_dict = json.loads(post_response.content.decode())
       
    42         self.test_renkan_guid = post_response_dict.get("id", "")
       
    43         self.test_initial_revision_guid = post_response_dict.get("current_revision_id", "")
       
    44     
       
    45     def test_get_revision(self):
       
    46         
       
    47         ###################################################
       
    48         # GETting revision
       
    49         ###################################################
       
    50         
       
    51         get_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
       
    52         get_response = self.client.get(get_url, {}, format="json")
       
    53         self.assertEqual(get_response.status_code, status.HTTP_200_OK)
       
    54         
       
    55         # Checking data
       
    56         get_response_dict = json.loads(get_response.content.decode()) 
       
    57         self.assertEqual(get_response_dict.get("id", ""), self.test_initial_revision_guid)
       
    58         self.assertEqual(get_response_dict.get("parent_renkan_id", ""), self.test_renkan_guid)
       
    59         self.assertEqual(get_response_dict.get("revision_created_by", ""), self.user.username)
       
    60         self.assertEqual(get_response_dict.get("revision_last_updated_by", ""), self.user.username)
       
    61         self.assertEqual(get_response_dict.get("title", ""), self.test_data.get("title", ""))
       
    62         self.assertEqual(get_response_dict.get("content", ""), self.test_data.get("content", ""))
       
    63         
       
    64         ###################################################
       
    65         # GETting with wrong renkan guid
       
    66         ###################################################
       
    67         
       
    68         get_url = reverse("revision_detail", kwargs={"renkan_guid" : "bad-renkan-guid", "revision_guid": self.test_initial_revision_guid})
       
    69         get_response = self.client.get(get_url, {}, format="json")
       
    70         self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
       
    71         
       
    72         ###################################################
       
    73         # GETting with wrong revision guid
       
    74         ###################################################
       
    75         
       
    76         get_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": "bad-revision-guid"})
       
    77         get_response = self.client.get(get_url, {}, format="json")
       
    78         self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
       
    79         
       
    80         ###################################################
       
    81         # try GETting with unauthorized user 
       
    82         ###################################################
       
    83         
       
    84         _ = self.client.login(username="blip", password="blip")
       
    85         get_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
       
    86         get_response = self.client.get(get_url, {}, format="json")
       
    87         self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
       
    88         
       
    89     def test_get_revision_list(self):
       
    90         
       
    91         ###################################################
       
    92         # PUTting another revision in test renkan
       
    93         ###################################################
       
    94         
       
    95         put_url = reverse("renkan_detail", kwargs={"renkan_guid" : self.test_renkan_guid})
       
    96         put_title = "edited_title"
       
    97         put_data = {
       
    98             "title" : put_title,
       
    99             "create_new_revision": True
       
   100         }
       
   101         put_response = self.client.put(put_url, put_data, format="json")
       
   102         
       
   103         ###################################################
       
   104         # GETting revision lists
       
   105         ###################################################
       
   106         
       
   107         get_url = reverse("revision_list", kwargs={"renkan_guid" : self.test_renkan_guid})
       
   108         get_response = self.client.get(get_url, {}, format="json")
       
   109         self.assertEqual(get_response.status_code, status.HTTP_200_OK)
       
   110         
       
   111         # Checking data
       
   112         get_response_content = json.loads(get_response.content.decode()) # Should be a list
       
   113         self.assertTrue(isinstance(get_response_content, list))
       
   114         self.assertEqual(len(get_response_content), 2)
       
   115         
       
   116         ###################################################
       
   117         # GETting with wrong renkan guid
       
   118         ###################################################
       
   119         
       
   120         _ = self.client.login(username="blip", password="blip")
       
   121         get_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
       
   122         get_response = self.client.get(get_url, {}, format="json")
       
   123         self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
       
   124     
       
   125     def test_delete_revision(self):
       
   126         
       
   127         ###################################################
       
   128         # Try to DELETE the initial revision (last revision, should 400)
       
   129         ###################################################
       
   130         delete_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
       
   131         delete_response = self.client.delete(delete_url, {}, format="json")
       
   132         self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST)
       
   133         
       
   134         ###################################################
       
   135         # PUTting another revision in test renkan
       
   136         ###################################################
       
   137         
       
   138         put_url = reverse("renkan_detail", kwargs={"renkan_guid" : self.test_renkan_guid})
       
   139         put_title = "edited_title"
       
   140         put_data = {
       
   141             "title" : put_title,
       
   142             "create_new_revision": True
       
   143         }
       
   144         put_response = self.client.put(put_url, put_data, format="json")
       
   145         put_response_dict = json.loads(put_response.content.decode())
       
   146         added_revision_guid = put_response_dict.get("current_revision_id", "")
       
   147         
       
   148         ###################################################
       
   149         # Try to DELETE the added revision (current revision, should 400)
       
   150         ###################################################
       
   151         
       
   152         delete_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": added_revision_guid})
       
   153         delete_response = self.client.delete(delete_url, {}, format="json")
       
   154         self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST)
       
   155         
       
   156         
       
   157         ###################################################
       
   158         # try to DELETE with unauthorized user 
       
   159         ###################################################
       
   160         
       
   161         _ = self.client.login(username="blip", password="blip")
       
   162         delete_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
       
   163         delete_response = self.client.delete(delete_url, {}, format="json")
       
   164         self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN)
       
   165         
       
   166         # Restoring rightful user
       
   167         _ = self.client.login(username="blop", password="blop")
       
   168         
       
   169         ###################################################
       
   170         # Try to DELETE the initial revision (should 204 now that we added a revision)
       
   171         ###################################################
       
   172         
       
   173         delete_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
       
   174         delete_response = self.client.delete(delete_url, {}, format="json")
       
   175         self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT)
       
   176         
       
   177         ###################################################
       
   178         # Try to DELETE with wrong renkan guid
       
   179         ###################################################
       
   180         
       
   181         delete_url = reverse("revision_detail", kwargs={"renkan_guid" : "bad-renkan-guid", "revision_guid": self.test_initial_revision_guid})
       
   182         delete_response = self.client.delete(delete_url, {}, format="json")
       
   183         self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)
       
   184         
       
   185         ###################################################
       
   186         # Try to DELETE with wrong revision guid
       
   187         ###################################################
       
   188         
       
   189         delete_url = reverse("revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": "bad-revision-guid"})
       
   190         delete_response = self.client.delete(delete_url, {}, format="json")
       
   191         self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)