4 import datetime |
4 import datetime |
5 import logging |
5 import logging |
6 from uuid import uuid4 |
6 from uuid import uuid4 |
7 |
7 |
8 from django.contrib.auth import get_user_model |
8 from django.contrib.auth import get_user_model |
|
9 from django.contrib.auth.models import Group |
9 from django.urls import reverse |
10 from django.urls import reverse |
10 from django.utils import timezone |
11 from django.utils import timezone |
11 from rest_framework import status |
12 from rest_framework import status |
12 from rest_framework.test import APITransactionTestCase |
13 from rest_framework.test import APITransactionTestCase |
13 |
14 |
14 from notes.models import Session, Note |
15 from notes.models import Session, Note, GroupProfile |
15 |
16 |
16 logger = logging.getLogger(__name__) |
17 logger = logging.getLogger(__name__) |
17 |
18 |
18 class SessionApiTests(APITransactionTestCase): |
19 class SessionApiTests(APITransactionTestCase): |
19 |
20 |
20 def setUp(self): |
21 def setUp(self): |
21 User = get_user_model() |
22 User = get_user_model() |
22 user1 = User.objects.create_user( |
23 self.user1 = User.objects.create_user( |
23 username='test_user1', |
24 username='test_user1', |
24 email='test_user@emial.com', |
25 email='test_user@emial.com', |
25 password='top_secret' |
26 password='top_secret' |
26 ) |
27 ) |
27 user2 = User.objects.create_user( |
28 self.user2 = User.objects.create_user( |
28 username='test_user2', |
29 username='test_user2', |
29 email='test_user@emial.com', |
30 email='test_user@emial.com', |
30 password='top_secret' |
31 password='top_secret' |
31 ) |
32 ) |
32 user3 = User.objects.create_user( |
33 user3 = User.objects.create_user( |
33 username='test_user3', |
34 username='test_user3', |
34 email='test_user@emial.com', |
35 email='test_user@emial.com', |
35 password='top_secret' |
36 password='top_secret' |
36 ) |
37 ) |
37 |
38 |
|
39 self.group1 = Group(name='group1') |
|
40 self.group1.save() |
|
41 self.group1.user_set.add(self.user1) |
|
42 self.group1.user_set.add(self.user2) |
|
43 self.group1.profile.owner = self.user1 |
|
44 self.group1.profile.description = "This is the group 1" |
|
45 self.group1.profile.save() |
|
46 |
|
47 self.user2.profile.default_group = self.group1 |
|
48 self.user2.profile.save() |
|
49 |
38 self.session1 = Session.objects.create( |
50 self.session1 = Session.objects.create( |
39 title="a new session 1", |
51 title="a new session 1", |
40 description="Description 1", |
52 description="Description 1", |
41 protocol="[]", |
53 protocol="[]", |
42 owner=user1 |
54 group=self.user1.profile.default_group, |
|
55 owner=self.user1 |
43 ) |
56 ) |
44 |
57 |
45 self.session2 = Session.objects.create( |
58 self.session2 = Session.objects.create( |
46 title="a new session 2", |
59 title="a new session 2", |
47 description="Description 2", |
60 description="Description 2", |
48 protocol="[]", |
61 protocol="[]", |
49 owner=user2 |
62 group=self.user2.profile.default_group, |
|
63 owner=self.user2 |
50 ) |
64 ) |
51 |
65 |
52 self.session3 = Session.objects.create( |
66 self.session3 = Session.objects.create( |
53 title="a new session 3", |
67 title="a new session 3", |
54 description="Description 3", |
68 description="Description 3", |
55 protocol="[]", |
69 protocol="[]", |
|
70 group=user3.profile.default_group, |
56 owner=user3 |
71 owner=user3 |
57 ) |
72 ) |
58 |
73 |
59 self.session4 = Session.objects.create( |
74 self.session4 = Session.objects.create( |
60 title="a new session 4", |
75 title="a new session 4", |
61 description="Description 4", |
76 description="Description 4", |
62 protocol="[]", |
77 protocol="[]", |
|
78 group=user3.profile.default_group, |
63 owner=user3 |
79 owner=user3 |
64 ) |
80 ) |
65 |
81 |
66 Note.objects.create( |
82 Note.objects.create( |
67 tc_start=timezone.now(), |
83 tc_start=timezone.now(), |
148 url = reverse('notes:session-list') |
164 url = reverse('notes:session-list') |
149 self.client.login(username='test_user1', password='top_secret') |
165 self.client.login(username='test_user1', password='top_secret') |
150 response = self.client.post(url, { |
166 response = self.client.post(url, { |
151 'title': "a new session", |
167 'title': "a new session", |
152 'description': "description of the session", |
168 'description': "description of the session", |
153 'protocol': "[]" |
169 'protocol': "[]", |
154 }, format='json') |
170 'group': 'group1' |
155 |
171 }, format='json') |
156 |
172 |
157 self.assertEqual(response.status_code, status.HTTP_201_CREATED) |
173 self.assertEqual(response.status_code, status.HTTP_201_CREATED) |
158 json = response.json() |
174 json = response.json() |
159 self.assertIn('ext_id', json) |
175 self.assertIn('ext_id', json) |
160 |
176 |
|
177 session = Session.objects.get(ext_id=json['ext_id']) |
|
178 self.assertIsNotNone(session) |
|
179 self.assertEqual(self.group1, session.group) |
|
180 |
|
181 |
|
182 def test_create_session_no_group(self): |
|
183 url = reverse('notes:session-list') |
|
184 self.client.login(username='test_user1', password='top_secret') |
|
185 response = self.client.post(url, { |
|
186 'title': "a new session", |
|
187 'description': "description of the session", |
|
188 'protocol': "[]", |
|
189 }, format='json') |
|
190 |
|
191 self.assertEqual(response.status_code, status.HTTP_201_CREATED, "Error when creating session %r" % response.json()) |
|
192 json = response.json() |
|
193 self.assertIn('ext_id', json) |
|
194 |
|
195 session = Session.objects.get(ext_id=json['ext_id']) |
|
196 self.assertIsNotNone(session) |
|
197 user1_personal_group = Group.objects.get(profile__owner_personal=self.user1) |
|
198 self.assertEqual(user1_personal_group, session.group) |
|
199 |
|
200 def test_create_session_no_group_default(self): |
|
201 url = reverse('notes:session-list') |
|
202 self.client.login(username='test_user2', password='top_secret') |
|
203 response = self.client.post(url, { |
|
204 'title': "a new session", |
|
205 'description': "description of the session", |
|
206 'protocol': "[]", |
|
207 }, format='json') |
|
208 |
|
209 self.assertEqual(response.status_code, status.HTTP_201_CREATED, "Error when creating session %r" % response.json()) |
|
210 json = response.json() |
|
211 self.assertIn('ext_id', json) |
|
212 |
|
213 session = Session.objects.get(ext_id=json['ext_id']) |
|
214 self.assertIsNotNone(session) |
|
215 self.assertEqual(self.group1, session.group) |
|
216 |
|
217 |
|
218 def test_create_session_no_group_default(self): |
|
219 url = reverse('notes:session-list') |
|
220 self.client.login(username='test_user2', password='top_secret') |
|
221 response = self.client.post(url, { |
|
222 'title': "a new session", |
|
223 'description': "description of the session", |
|
224 'protocol': "[]", |
|
225 }, format='json') |
|
226 |
|
227 self.assertEqual(response.status_code, status.HTTP_201_CREATED, "Error when creating session %r" % response.json()) |
|
228 json = response.json() |
|
229 self.assertIn('ext_id', json) |
|
230 |
|
231 session = Session.objects.get(ext_id=json['ext_id']) |
|
232 self.assertIsNotNone(session) |
|
233 self.assertEqual(self.group1, session.group) |
|
234 |
|
235 |
|
236 def test_create_session_bad_group(self): |
|
237 url = reverse('notes:session-list') |
|
238 self.client.login(username='test_user3', password='top_secret') |
|
239 response = self.client.post(url, { |
|
240 'title': "a new session", |
|
241 'description': "description of the session", |
|
242 'protocol': "[]", |
|
243 'group': "group1" |
|
244 }, format='json') |
|
245 |
|
246 self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) |
|
247 json = response.json() |
|
248 self.assertIn('non_field_errors', json) |
|
249 self.assertIn('Owner must be in group', json['non_field_errors']) |
|
250 |
|
251 |
161 def test_create_session_with_ext_id(self): |
252 def test_create_session_with_ext_id(self): |
162 url = reverse('notes:session-list') |
253 url = reverse('notes:session-list') |
163 self.client.login(username='test_user1', password='top_secret') |
254 self.client.login(username='test_user1', password='top_secret') |
164 ext_id = str(uuid4()) |
255 ext_id = str(uuid4()) |
165 response = self.client.post(url, { |
256 response = self.client.post(url, { |
166 'ext_id': ext_id, |
257 'ext_id': ext_id, |
167 'title': "a new session", |
258 'title': "a new session", |
168 'description': "description of the session", |
259 'description': "description of the session", |
|
260 'group': 'group1', |
169 'protocol': "[]" |
261 'protocol': "[]" |
170 }, format='json') |
262 }, format='json') |
171 |
263 |
172 self.assertEqual(response.status_code, status.HTTP_201_CREATED) |
264 self.assertEqual(response.status_code, status.HTTP_201_CREATED) |
173 json = response.json() |
265 json = response.json() |