|
1 """ |
|
2 Tests the core api for sessions |
|
3 """ |
|
4 import logging |
|
5 from uuid import uuid4 |
|
6 |
|
7 from django.contrib.auth import get_user_model |
|
8 from django.urls import reverse |
|
9 from django.utils import timezone |
|
10 from rest_framework import status |
|
11 from rest_framework.test import APITransactionTestCase |
|
12 from django.contrib.auth.models import Group |
|
13 |
|
14 logger = logging.getLogger(__name__) |
|
15 |
|
16 |
|
17 class GroupApiTests(APITransactionTestCase): |
|
18 |
|
19 def setUp(self): |
|
20 User = get_user_model() |
|
21 self.user1 = User.objects.create_user( |
|
22 username='test_user1', |
|
23 email='test_user@emial.com', |
|
24 password='top_secret' |
|
25 ) |
|
26 self.user2 = User.objects.create_user( |
|
27 username='test_user2', |
|
28 email='test_user@emial.com', |
|
29 password='top_secret' |
|
30 ) |
|
31 |
|
32 self.group1 = Group(name='group1') |
|
33 self.group1.save() |
|
34 self.group1.user_set.add(self.user1) |
|
35 self.group1.profile.owner = self.user1 |
|
36 self.group1.profile.description = "This is the group 1" |
|
37 self.group1.profile.save() |
|
38 |
|
39 self.group2 = Group(name='group2') |
|
40 self.group2.save() |
|
41 self.group2.profile.owner = self.user2 |
|
42 self.group2.profile.description = "This is the group 2" |
|
43 self.group2.profile.save() |
|
44 |
|
45 |
|
46 def test_list_group_no_login(self): |
|
47 url = reverse('auth_group-list') |
|
48 response = self.client.get(url) |
|
49 logger.debug("LIST group response %r", response.data) |
|
50 |
|
51 self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) |
|
52 |
|
53 |
|
54 def test_list_group(self): |
|
55 url = reverse('auth_group-list') |
|
56 self.client.login(username='test_user1', password='top_secret') |
|
57 response = self.client.get(url) |
|
58 |
|
59 self.assertEqual(response.status_code, status.HTTP_200_OK) |
|
60 |
|
61 self.assertEqual(2, len(response.data), "Must have 2 groups") |
|
62 for group_def in response.data: |
|
63 self.assertIn('name', group_def.keys()) |
|
64 self.assertIn('owner', group_def.keys()) |
|
65 self.assertIn('description', group_def.keys()) |
|
66 self.assertIn(group_def.get('owner'), ['test_user1', 'test_user2']) |
|
67 self.assertIn(group_def.get('description'), ['This is the group 1', 'This is the group 2']) |
|
68 self.assertIn(group_def.get('name'), ['group1', 'group2']) |
|
69 |
|
70 def test_create_group(self): |
|
71 url = reverse('auth_group-list') |
|
72 self.client.login(username='test_user1', password='top_secret') |
|
73 response = self.client.post( |
|
74 url, |
|
75 {'name':"group3", 'description': "this is group 3", 'users': ['test_user2']}) |
|
76 |
|
77 self.assertEqual(response.status_code, status.HTTP_201_CREATED) |
|
78 |
|
79 self.assertEqual('group3', response.data.get('name')) |
|
80 self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users'))) |
|
81 |
|
82 group3 = Group.objects.get(name='group3') |
|
83 self.assertEqual('this is group 3', group3.profile.description) |
|
84 self.assertSetEqual( |
|
85 set(['test_user1', 'test_user2']), |
|
86 set(map(lambda u: u.username, group3.user_set.all())) |
|
87 ) |
|
88 |
|
89 def test_create_group_no_user(self): |
|
90 url = reverse('auth_group-list') |
|
91 self.client.login(username='test_user1', password='top_secret') |
|
92 response = self.client.post( |
|
93 url, |
|
94 {'name':"group3", 'description': "this is group 3"}) |
|
95 |
|
96 self.assertEqual(response.status_code, status.HTTP_201_CREATED) |
|
97 |
|
98 self.assertEqual('group3', response.data.get('name')) |
|
99 self.assertSetEqual(set(['test_user1']), set(response.data.get('users'))) |
|
100 |
|
101 group3 = Group.objects.get(name='group3') |
|
102 self.assertEqual('this is group 3', group3.profile.description) |
|
103 self.assertSetEqual( |
|
104 set(['test_user1']), |
|
105 set(map(lambda u: u.username, group3.user_set.all())) |
|
106 ) |
|
107 |
|
108 |
|
109 def test_detail_group(self): |
|
110 url = reverse('auth_group-detail', kwargs={'name': self.group1.name}) |
|
111 self.client.login(username='test_user1', password='top_secret') |
|
112 response = self.client.get(url) |
|
113 |
|
114 self.assertEqual(response.status_code, status.HTTP_200_OK) |
|
115 self.assertEqual('group1', response.data.get('name')) |
|
116 self.assertEqual('This is the group 1', response.data.get('description')) |
|
117 self.assertSetEqual(set(['test_user1']), set(response.data.get('users'))) |
|
118 |
|
119 def test_update_group(self): |
|
120 url = reverse('auth_group-detail', kwargs={'name': self.group1.name}) |
|
121 self.client.login(username='test_user1', password='top_secret') |
|
122 response = self.client.put( |
|
123 url, |
|
124 {'name': 'group1', 'description': "this is group 1 changed", 'users': ['test_user2']}) |
|
125 |
|
126 logger.debug("RESPONSE %r", response.data) |
|
127 self.assertEqual(response.status_code, status.HTTP_200_OK) |
|
128 self.assertEqual('group1', response.data.get('name')) |
|
129 self.assertEqual('this is group 1 changed', response.data.get('description')) |
|
130 self.assertSetEqual(set(['test_user1', 'test_user2']), set(response.data.get('users'))) |
|
131 |
|
132 group1 = Group.objects.get(name='group1') |
|
133 self.assertEqual('this is group 1 changed', group1.profile.description) |
|
134 self.assertSetEqual( |
|
135 set(['test_user1', 'test_user2']), |
|
136 set(map(lambda u: u.username, group1.user_set.all())) |
|
137 ) |