|
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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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("v1.0: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) |