Skip to content

Commit 1aaad04

Browse files
authored
Merge pull request #27 from galaxy-genome-annotation/groups_tests
Groups fix + tests
2 parents 065c398 + c3deb21 commit 1aaad04

File tree

6 files changed

+283
-5
lines changed

6 files changed

+283
-5
lines changed

README.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ Or with the Arrow client:
8181
History
8282
-------
8383

84+
- 4.2.1
85+
- Fix getting groups by name
86+
- Add tests for group api
8487
- 4.2
8588
- Improve user update method
8689
- Add tests for user api

apollo/groups/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,16 @@ def get_groups(self, name=None):
6868
:return: list of a dictionaries containing group information
6969
"""
7070
payload = {}
71-
if name:
72-
payload['name'] = name
7371

7472
res = self.post('loadGroups', payload)
75-
return [_fix_group(group) for group in res]
73+
74+
groups = []
75+
if name:
76+
groups = [_fix_group(group) for group in res if group['name'] == name]
77+
else:
78+
groups = [_fix_group(group) for group in res]
79+
80+
return groups
7681

7782
def update_group(self, group_id, new_name):
7883
"""

arrow/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '4.2'
1+
__version__ = '4.2.1'

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
setup(
1818
name="apollo",
19-
version='4.2',
19+
version='4.2.1',
2020
description="Apollo API library",
2121
long_description=readme,
2222
author="Helena Rasche;Anthony Bretaudeau",

test/__init__.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,32 @@ def waitUserCreated(self, user_id):
6666
tries += 1
6767

6868
return user_info
69+
70+
def waitGroupDeleted(self, group_id):
71+
"""
72+
Wait for an group to be really deleted from Apollo
73+
"""
74+
75+
group_info = wa.groups.get_groups(group_id)
76+
tries = 1
77+
while len(group_info) and tries < 10:
78+
time.sleep(1)
79+
group_info = wa.groups.get_groups(group_id)
80+
tries += 1
81+
82+
return group_info
83+
84+
def waitGroupCreated(self, group_id):
85+
"""
86+
Wait for an group to be really created from Apollo
87+
"""
88+
89+
time.sleep(1)
90+
group_info = wa.groups.get_groups(group_id)
91+
tries = 1
92+
while len(group_info) < 1 and tries < 10:
93+
time.sleep(1)
94+
group_info = wa.groups.get_groups(group_id)
95+
tries += 1
96+
97+
return group_info

test/group_test.py

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
import time
2+
3+
from . import ApolloTestCase, wa
4+
5+
6+
class GroupTest(ApolloTestCase):
7+
8+
def test_get_groups(self):
9+
10+
groups = wa.groups.get_groups()
11+
12+
# We at least have the 2 from bootstrap + the one from setup
13+
assert len(groups) >= 3
14+
15+
first_group = groups[0]
16+
17+
assert 'public' in first_group
18+
assert 'numberOfUsers' in first_group
19+
assert 'name' in first_group
20+
assert 'admin' in first_group
21+
assert 'id' in first_group
22+
assert 'organismPermissions' in first_group
23+
assert 'users' in first_group
24+
25+
def test_show_group(self):
26+
27+
groups = wa.groups.get_groups()
28+
29+
group_id = groups[0]['id']
30+
31+
group_info = wa.groups.show_group(group_id)
32+
33+
assert group_info == groups[0]
34+
35+
def test_get_group_by_name(self):
36+
37+
all_groups = wa.groups.get_groups()
38+
39+
good_group = None
40+
for g in all_groups:
41+
if g['name'] == 'temp_group':
42+
good_group = g
43+
44+
assert good_group is not None
45+
46+
group_by_name = wa.groups.get_groups(name='temp_group')
47+
48+
assert len(group_by_name) == 1
49+
assert good_group == group_by_name[0]
50+
51+
def test_get_group_creator(self):
52+
53+
creator = wa.groups.get_group_creator('temp_group')
54+
55+
user_info = wa.users.show_user(creator)
56+
57+
assert user_info['username'] == "admin@local.host"
58+
59+
def test_get_group_admin(self):
60+
61+
creator = wa.groups.get_group_admin('temp_group')
62+
63+
user_info = wa.users.show_user(creator)
64+
65+
assert user_info['username'] == "admin@local.host"
66+
67+
def test_create_group(self):
68+
69+
res = wa.groups.create_group("trash_group")
70+
self.waitGroupCreated('trash_group')
71+
72+
res = wa.groups.get_groups('trash_group')
73+
74+
assert len(res) == 1
75+
76+
assert res[0]['name'] == 'trash_group'
77+
assert res[0]['admin'][0]['email'] == 'admin@local.host'
78+
79+
def test_delete_group(self):
80+
81+
res = wa.groups.create_group("trash_group")
82+
self.waitGroupCreated('trash_group')
83+
84+
res = wa.groups.get_groups('trash_group')
85+
86+
assert len(res) == 1
87+
88+
wa.groups.delete_group('trash_group')
89+
self.waitGroupDeleted('trash_group')
90+
91+
groups = wa.groups.get_groups()
92+
93+
for group in groups:
94+
assert group['name'] != 'trash_group'
95+
96+
def test_update_group(self):
97+
98+
res = wa.groups.create_group("trash_group")
99+
self.waitGroupCreated('trash_group')
100+
101+
res = wa.groups.get_groups('trash_group')
102+
103+
assert len(res) == 1
104+
105+
wa.groups.update_group(res[0]['id'], 'trash_group_updated')
106+
107+
res = wa.groups.get_groups('trash_group')
108+
109+
assert len(res) == 0
110+
111+
res = wa.groups.get_groups('trash_group_updated')
112+
113+
assert len(res) == 1
114+
115+
def test_update_group_admin(self):
116+
117+
res = wa.groups.create_group("trash_group")
118+
self.waitGroupCreated('trash_group')
119+
120+
res = wa.groups.get_groups('trash_group')
121+
122+
assert len(res) == 1
123+
124+
wa.groups.update_group_admin(res[0]['id'], ['test_temp@bx.psu.edu'])
125+
126+
time.sleep(1)
127+
128+
res = wa.groups.get_groups('trash_group')
129+
130+
assert len(res) == 1
131+
assert res[0]['admin'][0]['email'] == 'test_temp@bx.psu.edu'
132+
133+
def test_update_membership_username(self):
134+
135+
res = wa.groups.create_group("trash_group")
136+
self.waitGroupCreated('trash_group')
137+
138+
res = wa.groups.get_groups('trash_group')
139+
140+
assert len(res) == 1
141+
142+
wa.groups.update_membership(res[0]['id'], ['test_temp@bx.psu.edu'])
143+
144+
time.sleep(1)
145+
146+
res = wa.groups.get_groups('trash_group')
147+
148+
assert len(res) == 1
149+
150+
assert res[0]['users'][0]['email'] == 'test_temp@bx.psu.edu'
151+
152+
def test_update_membership_dict(self):
153+
154+
res = wa.groups.create_group("trash_group")
155+
self.waitGroupCreated('trash_group')
156+
157+
res = wa.groups.get_groups('trash_group')
158+
assert len(res) == 1
159+
160+
wa.groups.update_membership(memberships=[{'groupId': res[0]['id'], 'users': ['test_temp@bx.psu.edu']}])
161+
162+
time.sleep(1)
163+
164+
res = wa.groups.get_groups('trash_group')
165+
166+
assert len(res) == 1
167+
168+
assert res[0]['users'][0]['email'] == 'test_temp@bx.psu.edu'
169+
170+
def test_update_permissions(self):
171+
172+
res = wa.groups.create_group("trash_group")
173+
self.waitGroupCreated('trash_group')
174+
175+
res = wa.groups.get_groups('trash_group')
176+
assert len(res) == 1
177+
178+
res = wa.groups.get_organism_permissions('trash_group')
179+
180+
assert res == []
181+
182+
res = wa.groups.update_organism_permissions('trash_group', 'test_organism', True, False, True, False)
183+
184+
assert res['class'] == 'org.bbop.apollo.GroupOrganismPermission'
185+
assert res['permissions'] == ['ADMINISTRATE', 'READ']
186+
187+
time.sleep(1)
188+
189+
res = wa.groups.get_organism_permissions('trash_group')
190+
191+
assert res[0]['class'] == 'org.bbop.apollo.GroupOrganismPermission'
192+
assert res[0]['permissions'] == ['ADMINISTRATE', 'READ']
193+
194+
def setUp(self):
195+
# Make sure the group is not already there
196+
temp_group_info = wa.groups.get_groups('temp_group')
197+
if temp_group_info and 'name' in temp_group_info[0]:
198+
wa.groups.delete_group('temp_group')
199+
self.waitGroupDeleted('temp_group')
200+
201+
temp_group_info = wa.groups.get_groups('trash_group')
202+
if temp_group_info and 'name' in temp_group_info[0]:
203+
wa.groups.delete_group('trash_group')
204+
self.waitGroupDeleted('trash_group')
205+
206+
temp_group_info = wa.groups.get_groups('trash_group_updated')
207+
if temp_group_info and 'name' in temp_group_info[0]:
208+
wa.groups.delete_group('trash_group_updated')
209+
self.waitGroupDeleted('trash_group_updated')
210+
211+
temp_user_info = wa.users.show_user('test_temp@bx.psu.edu')
212+
if 'username' in temp_user_info:
213+
wa.users.delete_user(temp_user_info['username'])
214+
self.waitUserDeleted(temp_user_info['userId'])
215+
216+
wa.groups.create_group("temp_group")
217+
self.waitGroupCreated('temp_group')
218+
219+
user_info = wa.users.create_user("test_temp@bx.psu.edu", 'Temp', 'orary', 'coolpassword', role="user")
220+
self.waitUserCreated(user_info['userId'])
221+
222+
def tearDown(self):
223+
temp_group_info = wa.groups.get_groups('temp_group')
224+
if temp_group_info and 'name' in temp_group_info[0]:
225+
wa.groups.delete_group('temp_group')
226+
self.waitGroupDeleted('temp_group')
227+
228+
temp_group_info = wa.groups.get_groups('trash_group')
229+
if temp_group_info and 'name' in temp_group_info[0]:
230+
wa.groups.delete_group('trash_group')
231+
self.waitGroupDeleted('trash_group')
232+
233+
temp_group_info = wa.groups.get_groups('trash_group_updated')
234+
if temp_group_info and 'name' in temp_group_info[0]:
235+
wa.groups.delete_group('trash_group_updated')
236+
self.waitGroupDeleted('trash_group_updated')
237+
238+
temp_user_info = wa.users.show_user('test_temp@bx.psu.edu')
239+
if 'username' in temp_user_info:
240+
wa.users.delete_user(temp_user_info['username'])
241+
self.waitUserDeleted(temp_user_info['userId'])

0 commit comments

Comments
 (0)