-
Notifications
You must be signed in to change notification settings - Fork 419
/
test_views_groups.py
174 lines (143 loc) · 7.54 KB
/
test_views_groups.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
from .support import (BaseWebTest, unittest, MINIMALIST_BUCKET,
MINIMALIST_GROUP)
class GroupViewTest(BaseWebTest, unittest.TestCase):
collection_url = '/buckets/beers/groups'
record_url = '/buckets/beers/groups/moderators'
def setUp(self):
super(GroupViewTest, self).setUp()
self.app.put_json('/buckets/beers', MINIMALIST_BUCKET,
headers=self.headers)
resp = self.app.put_json(self.record_url,
MINIMALIST_GROUP,
headers=self.headers)
self.record = resp.json['data']
def test_collection_endpoint_lists_them_all(self):
resp = self.app.get(self.collection_url, headers=self.headers)
records = resp.json['data']
self.assertEqual(len(records), 1)
self.assertEqual(records[0]['members'], ['fxa:user'])
def test_groups_can_be_posted_without_id(self):
resp = self.app.post_json(self.collection_url,
MINIMALIST_GROUP,
headers=self.headers,
status=201)
self.assertIn('id', resp.json['data'])
self.assertEqual(resp.json['data']['members'], ['fxa:user'])
def test_groups_can_be_put_with_simple_name(self):
self.assertEqual(self.record['id'], 'moderators')
def test_groups_name_should_be_simple(self):
self.app.put_json('/buckets/beers/groups/__moderator__',
MINIMALIST_GROUP,
headers=self.headers,
status=400)
def test_unknown_bucket_raises_403(self):
other_bucket = self.collection_url.replace('beers', 'sodas')
self.app.get(other_bucket, headers=self.headers, status=403)
def test_groups_are_isolated_by_bucket(self):
other_bucket = self.record_url.replace('beers', 'sodas')
self.app.put_json('/buckets/sodas',
MINIMALIST_BUCKET,
headers=self.headers)
self.app.get(other_bucket, headers=self.headers, status=404)
def test_wrong_create_permissions_cannot_be_added_on_groups(self):
group = MINIMALIST_GROUP.copy()
group['permissions'] = {'group:create': ['fxa:user']}
self.app.put_json('/buckets/beers/groups/moderator',
group,
headers=self.headers,
status=400)
def test_recreate_group_after_deletion_returns_a_200(self):
group = MINIMALIST_GROUP.copy()
self.app.put_json('/buckets/beers/groups/moderator',
group,
headers=self.headers,
status=201)
self.app.delete('/buckets/beers/groups/moderator',
headers=self.headers,
status=200)
self.app.put_json('/buckets/beers/groups/moderator',
group,
headers=self.headers,
status=200)
class GroupManagementTest(BaseWebTest, unittest.TestCase):
group_url = '/buckets/beers/groups/moderators'
def setUp(self):
super(GroupManagementTest, self).setUp()
self.create_bucket('beers')
def test_groups_can_be_deleted(self):
self.create_group('beers', 'moderators')
self.app.delete(self.group_url, headers=self.headers)
self.app.get(self.group_url, headers=self.headers,
status=404)
def test_group_is_removed_from_users_principals_on_group_deletion(self):
self.app.put_json(self.group_url, MINIMALIST_GROUP,
headers=self.headers, status=201)
self.assertIn(self.group_url,
self.permission.user_principals('fxa:user'))
self.app.delete(self.group_url, headers=self.headers, status=200)
self.assertNotIn(self.group_url,
self.permission.user_principals('fxa:user'))
def test_group_is_removed_from_users_principals_on_groups_deletion(self):
self.create_group('beers', 'moderators', ['natim', 'fxa:user'])
self.create_group('beers', 'reviewers', ['natim', 'alexis'])
self.app.delete('/buckets/beers/groups', headers=self.headers,
status=200)
self.assertEquals(self.permission.user_principals('fxa:user'), set())
self.assertEquals(self.permission.user_principals('natim'), set())
self.assertEquals(self.permission.user_principals('alexis'), set())
def test_group_is_added_to_user_principals_when_added_to_members(self):
self.create_group('beers', 'moderators', ['natim', 'mat'])
self.app.get('/buckets/beers/groups', headers=self.headers, status=200)
self.assertEquals(self.permission.user_principals('natim'),
{'/buckets/beers/groups/moderators'})
self.assertEquals(self.permission.user_principals('mat'),
{'/buckets/beers/groups/moderators'})
def test_group_is_added_to_user_principals_on_members_add_with_patch(self):
self.create_group('beers', 'moderators', ['natim', 'mat'])
group_url = '/buckets/beers/groups/moderators'
group = {'data': {'members': ['natim', 'mat', 'alice']}}
self.app.patch_json(group_url, group,
headers=self.headers, status=200)
self.app.get('/buckets/beers/groups', headers=self.headers, status=200)
self.assertEquals(self.permission.user_principals('natim'),
{group_url})
self.assertEquals(self.permission.user_principals('mat'),
{group_url})
self.assertEquals(self.permission.user_principals('alice'),
{group_url})
def test_group_member_removal_updates_user_principals(self):
self.create_group('beers', 'moderators', ['natim', 'mat'])
group_url = '/buckets/beers/groups/moderators'
group = {'data': {'members': ['mat']}}
self.app.put_json(group_url, group,
headers=self.headers, status=200)
self.app.get('/buckets/beers/groups', headers=self.headers, status=200)
self.assertEquals(self.permission.user_principals('natim'), set())
self.assertEquals(self.permission.user_principals('mat'),
{group_url})
def test_group_member_removal_updates_user_principals_with_patch(self):
self.create_group('beers', 'moderators', ['natim', 'mat'])
group_url = '/buckets/beers/groups/moderators'
group = {'data': {'members': ['mat']}}
self.app.patch_json(group_url, group, headers=self.headers, status=200)
self.assertEquals(self.permission.user_principals('natim'), set())
self.assertEquals(self.permission.user_principals('mat'),
{group_url})
class InvalidGroupTest(BaseWebTest, unittest.TestCase):
group_url = '/buckets/beers/groups/moderators'
def setUp(self):
super(InvalidGroupTest, self).setUp()
self.create_bucket('beers')
def test_groups_must_have_members_attribute(self):
invalid = {}
resp = self.app.put_json(self.group_url,
invalid,
headers=self.headers,
status=400)
self.assertEqual(resp.json['message'],
"data is missing")
self.assertDictEqual(resp.json['details'][0], {
"description": "data is missing",
"location": "body",
"name": "data"
})