|
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) |