server/python2/django/renkanmanager/tests/tests_revision.py
changeset 587 fb0041aa74d3
child 588 95536fa18d0d
equal deleted inserted replaced
586:e2e952fcaf7c 587:fb0041aa74d3
       
     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_data = {'title': 'test_title', 'content': json.dumps({'mock_data': 'wow'})}
       
    27         post_response = self.client.post(post_url, self.test_data, format='json')
       
    28         post_response_dict = json.loads(post_response.content)
       
    29         self.test_renkan_guid = post_response_dict.get('renkan_guid', '')
       
    30         self.test_initial_revision_guid = post_response_dict.get('current_revision_guid', '')
       
    31     
       
    32     def test_get_revision(self):
       
    33         
       
    34         ###################################################
       
    35         # GETting revision
       
    36         ###################################################
       
    37         
       
    38         get_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': self.test_initial_revision_guid})
       
    39         get_response = self.client.get(get_url, {}, format='json')
       
    40         self.assertEqual(get_response.status_code, status.HTTP_200_OK)
       
    41         
       
    42         # Checking data
       
    43         get_response_dict = json.loads(get_response.content) 
       
    44         self.assertEqual(get_response_dict.get('revision_guid', ''), self.test_initial_revision_guid)
       
    45         self.assertEqual(get_response_dict.get('parent_renkan_guid', ''), self.test_renkan_guid)
       
    46         self.assertEqual(get_response_dict.get('revision_created_by', ''), self.user.username)
       
    47         self.assertEqual(get_response_dict.get('revision_last_updated_by', ''), self.user.username)
       
    48         self.assertEqual(get_response_dict.get('title', ''), self.test_data.get('title', ''))
       
    49         self.assertEqual(get_response_dict.get('content', ''), self.test_data.get('content', ''))
       
    50         
       
    51         ###################################################
       
    52         # GETting with wrong renkan guid
       
    53         ###################################################
       
    54         
       
    55         get_url = reverse('revision_detail', kwargs={'renkan_guid' : 'bad-renkan-guid', 'revision_guid': self.test_initial_revision_guid})
       
    56         get_response = self.client.get(get_url, {}, format='json')
       
    57         self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
       
    58         
       
    59         ###################################################
       
    60         # GETting with wrong revision guid
       
    61         ###################################################
       
    62         
       
    63         get_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': 'bad-revision-guid'})
       
    64         get_response = self.client.get(get_url, {}, format='json')
       
    65         self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
       
    66         
       
    67         ###################################################
       
    68         # try GETting with unauthorized user 
       
    69         ###################################################
       
    70         
       
    71         _ = self.client.login(username='blip', password='blip')
       
    72         get_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': self.test_initial_revision_guid})
       
    73         get_response = self.client.get(get_url, {}, format='json')
       
    74         self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
       
    75         
       
    76     def test_get_revision_list(self):
       
    77         
       
    78         ###################################################
       
    79         # PUTting another revision in test renkan
       
    80         ###################################################
       
    81         
       
    82         put_url = reverse('renkan_detail', kwargs={'renkan_guid' : self.test_renkan_guid})
       
    83         put_title = 'edited_title'
       
    84         put_content = json.dumps({"title": "edited_title", "nodes": 1})
       
    85         put_data = {
       
    86             'title' : put_title,
       
    87             'content' : put_content,
       
    88             'create_new_revision': True
       
    89         }
       
    90         put_response = self.client.put(put_url, put_data, format='json')
       
    91         
       
    92         ###################################################
       
    93         # GETting revision lists
       
    94         ###################################################
       
    95         
       
    96         get_url = reverse('revision_list', kwargs={'renkan_guid' : self.test_renkan_guid})
       
    97         get_response = self.client.get(get_url, {}, format='json')
       
    98         self.assertEqual(get_response.status_code, status.HTTP_200_OK)
       
    99         
       
   100         # Checking data
       
   101         get_response_content = json.loads(get_response.content) # Should be a list
       
   102         self.assertTrue(isinstance(get_response_content, list))
       
   103         self.assertEqual(len(get_response_content), 2)
       
   104         
       
   105         ###################################################
       
   106         # GETting with wrong renkan guid
       
   107         ###################################################
       
   108         
       
   109         _ = self.client.login(username='blip', password='blip')
       
   110         get_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': self.test_initial_revision_guid})
       
   111         get_response = self.client.get(get_url, {}, format='json')
       
   112         self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
       
   113     
       
   114     def test_delete_revision(self):
       
   115         
       
   116         ###################################################
       
   117         # Try to DELETE the initial revision (last revision, should 400)
       
   118         ###################################################
       
   119         delete_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': self.test_initial_revision_guid})
       
   120         delete_response = self.client.delete(delete_url, {}, format='json')
       
   121         self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST)
       
   122         
       
   123         ###################################################
       
   124         # PUTting another revision in test renkan
       
   125         ###################################################
       
   126         
       
   127         put_url = reverse('renkan_detail', kwargs={'renkan_guid' : self.test_renkan_guid})
       
   128         put_title = 'edited_title'
       
   129         put_content = json.dumps({"title": "edited_title", "nodes": 1})
       
   130         put_data = {
       
   131             'title' : put_title,
       
   132             'content' : put_content,
       
   133             'create_new_revision': True
       
   134         }
       
   135         put_response = self.client.put(put_url, put_data, format='json')
       
   136         put_response_dict = json.loads(put_response.content)
       
   137         added_revision_guid = put_response_dict.get('current_revision_guid', '')
       
   138         
       
   139         ###################################################
       
   140         # Try to DELETE the added revision (current revision, should 400)
       
   141         ###################################################
       
   142         
       
   143         delete_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': added_revision_guid})
       
   144         delete_response = self.client.delete(delete_url, {}, format='json')
       
   145         self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST)
       
   146         
       
   147         
       
   148         ###################################################
       
   149         # try to DELETE with unauthorized user 
       
   150         ###################################################
       
   151         
       
   152         _ = self.client.login(username='blip', password='blip')
       
   153         delete_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': self.test_initial_revision_guid})
       
   154         delete_response = self.client.delete(delete_url, {}, format='json')
       
   155         self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN)
       
   156         
       
   157         # Restoring rightful user
       
   158         _ = self.client.login(username='blop', password='blop')
       
   159         
       
   160         ###################################################
       
   161         # Try to DELETE the initial revision (should 204 now that we added a revision)
       
   162         ###################################################
       
   163         
       
   164         delete_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': self.test_initial_revision_guid})
       
   165         delete_response = self.client.delete(delete_url, {}, format='json')
       
   166         self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT)
       
   167         
       
   168         ###################################################
       
   169         # Try to DELETE with wrong renkan guid
       
   170         ###################################################
       
   171         
       
   172         delete_url = reverse('revision_detail', kwargs={'renkan_guid' : 'bad-renkan-guid', 'revision_guid': self.test_initial_revision_guid})
       
   173         delete_response = self.client.delete(delete_url, {}, format='json')
       
   174         self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)
       
   175         
       
   176         ###################################################
       
   177         # Try to DELETE with wrong revision guid
       
   178         ###################################################
       
   179         
       
   180         delete_url = reverse('revision_detail', kwargs={'renkan_guid' : self.test_renkan_guid, 'revision_guid': 'bad-revision-guid'})
       
   181         delete_response = self.client.delete(delete_url, {}, format='json')
       
   182         self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)