vigiboard / vigiboard / tests / functional / test_group_selection_tree.py @ b373a5de
History | View | Annotate | Download (9.99 KB)
1 |
# -*- coding: utf-8 -*-
|
---|---|
2 |
# Copyright (C) 2006-2011 CS-SI
|
3 |
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
|
4 |
|
5 |
"""
|
6 |
Teste l'arbre de sélection des groupes du formulaire de recherche
|
7 |
"""
|
8 |
from nose.tools import assert_true, assert_equal |
9 |
from datetime import datetime |
10 |
import transaction |
11 |
|
12 |
from vigiboard.tests import TestController |
13 |
from vigilo.models.session import DBSession |
14 |
from vigilo.models.tables import SupItemGroup, Host, Permission, StateName, \ |
15 |
Event, CorrEvent, User, UserGroup, \ |
16 |
DataPermission
|
17 |
|
18 |
from utils import populate_DB |
19 |
|
20 |
class TestGroupSelectionTree(TestController): |
21 |
"""Teste l'arbre de sélection des groupes du formulaire de recherche."""
|
22 |
|
23 |
def setUp(self): |
24 |
super(TestGroupSelectionTree, self).setUp() |
25 |
populate_DB() |
26 |
|
27 |
def test_get_inexistent_group(self): |
28 |
"""Récupération de l'étage de l'arbre pour un groupe inexistant"""
|
29 |
|
30 |
# L'utilisateur est authentifié avec des permissions étendues.
|
31 |
# Il cherche à obtenir la liste des groupes fils d'un groupe
|
32 |
# qui n'existe pas, il ne doit donc obtenir aucun résultat.
|
33 |
response = self.app.get('/get_groups?parent_id=%d' % -42, |
34 |
extra_environ={'REMOTE_USER': 'access'}) |
35 |
json = response.json |
36 |
|
37 |
# On s'assure que la liste de groupes retournée est bien vide
|
38 |
self.assertEqual(
|
39 |
json, {'items': [], 'groups': []} |
40 |
) |
41 |
|
42 |
# L'utilisateur est authentifié et fait partie du groupe 'managers'.
|
43 |
# Il cherche à obtenir la liste des groupes fils d'un groupe
|
44 |
# qui n'existe pas, il ne doit donc obtenir aucun résultat.
|
45 |
response = self.app.get('/get_groups?parent_id=%d' % -42, |
46 |
extra_environ={'REMOTE_USER': 'manager'}) |
47 |
json = response.json |
48 |
|
49 |
# On s'assure que la liste de groupes retournée est bien vide
|
50 |
self.assertEqual(
|
51 |
json, {'items': [], 'groups': []} |
52 |
) |
53 |
|
54 |
def test_get_group_when_not_allowed(self): |
55 |
"""Récupération de l'étage de l'arbre sans les droits"""
|
56 |
|
57 |
# Récupération du groupe utilisé lors de ce test.
|
58 |
group2 = SupItemGroup.by_group_name(u'group2')
|
59 |
|
60 |
# L'utilisateur n'est pas authentifié.
|
61 |
# Il cherche à obtenir la liste des groupes fils d'un groupe donné.
|
62 |
response = self.app.get('/get_groups?parent_id=%d' % group2.idgroup, |
63 |
status=401)
|
64 |
|
65 |
# L'utilisateur est authentifié avec des permissions
|
66 |
# restreintes. Il cherche à obtenir la liste des groupes fils
|
67 |
# d'un groupe auquel il n'a pas accès, même indirectement.
|
68 |
response = self.app.get('/get_groups?parent_id=%d' % group2.idgroup, |
69 |
extra_environ={'REMOTE_USER': 'limited_access'}) |
70 |
json = response.json |
71 |
|
72 |
# On s'assure que la liste de groupes retournée est bien vide
|
73 |
self.assertEqual(
|
74 |
json, {'items': [], 'groups': []} |
75 |
) |
76 |
|
77 |
def test_get_group_when_allowed(self): |
78 |
"""Récupération de l'étage de l'arbre avec les droits"""
|
79 |
|
80 |
# Récupération des groupes utilisés lors de ce test.
|
81 |
root = SupItemGroup.by_group_name(u'root')
|
82 |
maingroup = SupItemGroup.by_group_name(u'maingroup')
|
83 |
group1 = SupItemGroup.by_group_name(u'group1')
|
84 |
group2 = SupItemGroup.by_group_name(u'group2')
|
85 |
|
86 |
# L'utilisateur est authentifié et fait partie du groupe 'managers'.
|
87 |
# Il cherche à obtenir la liste des groupes fils d'un groupe donné.
|
88 |
response = self.app.get('/get_groups?parent_id=%d' % root.idgroup, |
89 |
extra_environ={'REMOTE_USER': 'manager'}) |
90 |
json = response.json |
91 |
|
92 |
# On s'assure que la liste retournée contient
|
93 |
# bien les groupes fils de ce groupe parent
|
94 |
self.assertEqual(
|
95 |
json, { |
96 |
'items': [],
|
97 |
'groups': [
|
98 |
{'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'} |
99 |
] |
100 |
} |
101 |
) |
102 |
|
103 |
# L'utilisateur est authentifié avec des permissions
|
104 |
# étendues. Il cherche à obtenir la liste des groupes
|
105 |
# fils d'un groupe auquel il a directement accès.
|
106 |
response = self.app.get('/get_groups?parent_id=%d' % root.idgroup, |
107 |
extra_environ={'REMOTE_USER': 'access'}) |
108 |
json = response.json |
109 |
|
110 |
# On s'assure que la liste retournée contient
|
111 |
# bien les groupes fils de ce groupe parent
|
112 |
self.assertEqual(
|
113 |
json, { |
114 |
'items': [],
|
115 |
'groups': [
|
116 |
{'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'} |
117 |
] |
118 |
} |
119 |
) |
120 |
|
121 |
# Le même utilisateur cherche à obtenir la liste des
|
122 |
# groupes fils d'un groupe auquel il a indirectement accès.
|
123 |
response = self.app.get('/get_groups?parent_id=%d' % maingroup.idgroup, |
124 |
extra_environ={'REMOTE_USER': 'access'}) |
125 |
json = response.json |
126 |
|
127 |
# On s'assure que la liste retournée contient
|
128 |
# bien les groupes fils de ce groupe parent.
|
129 |
self.assertEqual(json, {
|
130 |
'items': [],
|
131 |
'groups': [
|
132 |
{'id': group1.idgroup, 'name': group1.name, 'type': 'group'}, |
133 |
{'id': group2.idgroup, 'name': group2.name, 'type': 'group'} |
134 |
] |
135 |
}) |
136 |
|
137 |
# L'utilisateur est authentifié avec des permissions
|
138 |
# restreintes. Il cherche à obtenir la liste des groupes
|
139 |
# fils d'un groupe auquel il n'a pas accès, mais a toutefois
|
140 |
# le droit d'accéder à un des groupes fils en question.
|
141 |
response = self.app.get('/get_groups?parent_id=%d' % maingroup.idgroup, |
142 |
extra_environ={'REMOTE_USER': 'limited_access'}) |
143 |
json = response.json |
144 |
|
145 |
# On s'assure que la liste retournée contient bien ce groupe fils.
|
146 |
self.assertEqual(
|
147 |
json, { |
148 |
'items': [],
|
149 |
'groups': [
|
150 |
{'id': group1.idgroup, 'name': group1.name, 'type': 'group'} |
151 |
] |
152 |
} |
153 |
) |
154 |
|
155 |
# Le même utilisateur cherche à obtenir la liste des groupes
|
156 |
# fils d'un groupe de niveau encore supérieur.
|
157 |
response = self.app.get('/get_groups?parent_id=%d' % root.idgroup, |
158 |
extra_environ={'REMOTE_USER': 'limited_access'}) |
159 |
json = response.json |
160 |
|
161 |
# On s'assure que la liste retournée contient bien
|
162 |
# le groupe parent du groupe auquel il a accès.
|
163 |
self.assertEqual(
|
164 |
json, { |
165 |
'items': [],
|
166 |
'groups': [
|
167 |
{'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'} |
168 |
] |
169 |
} |
170 |
) |
171 |
|
172 |
def test_get_root_group_when_allowed(self): |
173 |
"""Récupération des groupes racines de l'arbre avec les droits"""
|
174 |
|
175 |
# Récupération du groupe utilisé lors de ce test.
|
176 |
root = SupItemGroup.by_group_name(u'root')
|
177 |
|
178 |
# L'utilisateur est authentifié et fait partie du groupe 'managers'.
|
179 |
# Il cherche à obtenir la liste des groupes racines de l'arbre.
|
180 |
response = self.app.get('/get_groups', |
181 |
extra_environ={'REMOTE_USER': 'manager'}) |
182 |
json = response.json |
183 |
|
184 |
# On s'assure que la liste retournée contient bien le groupe racine.
|
185 |
self.assertEqual(
|
186 |
json, { |
187 |
'items': [],
|
188 |
'groups': [
|
189 |
{'id': root.idgroup, 'name': root.name, 'type': 'group'} |
190 |
] |
191 |
} |
192 |
) |
193 |
|
194 |
# L'utilisateur est authentifié avec des permissions étendues.
|
195 |
# Il cherche à obtenir la liste des groupes racines de l'arbre.
|
196 |
response = self.app.get('/get_groups', |
197 |
extra_environ={'REMOTE_USER': 'access'}) |
198 |
json = response.json |
199 |
|
200 |
# On s'assure que la liste retournée contient bien le
|
201 |
# groupe racine, auquel cet utilisateur a directement accès.
|
202 |
self.assertEqual(
|
203 |
json, { |
204 |
'items': [],
|
205 |
'groups': [
|
206 |
{'id': root.idgroup, 'name': root.name, 'type': 'group'} |
207 |
] |
208 |
} |
209 |
) |
210 |
|
211 |
# L'utilisateur est authentifié avec des permissions restreintes.
|
212 |
# Il cherche à obtenir la liste des groupes racines de l'arbre.
|
213 |
response = self.app.get('/get_groups', |
214 |
extra_environ={'REMOTE_USER': 'limited_access'}) |
215 |
json = response.json |
216 |
|
217 |
# On s'assure que la liste retournée contient bien le
|
218 |
# groupe racine, auquel cet utilisateur a indirectement accès.
|
219 |
self.assertEqual(
|
220 |
json, { |
221 |
'items': [],
|
222 |
'groups': [
|
223 |
{'id': root.idgroup, 'name': root.name, 'type': 'group'} |
224 |
] |
225 |
} |
226 |
) |
227 |
|
228 |
def test_get_root_group_when_not_allowed(self): |
229 |
"""Récupération des groupes racines de l'arbre sans les droits"""
|
230 |
|
231 |
# Récupération du groupe utilisé lors de ce test.
|
232 |
root = SupItemGroup.by_group_name(u'root')
|
233 |
|
234 |
# L'utilisateur n'est pas authentifié, et cherche
|
235 |
# à obtenir la liste des groupes racines de l'arbre.
|
236 |
response = self.app.get('/get_groups', status=401) |
237 |
|
238 |
# Création d'un nouvel utilisateur et d'un nouveau groupe
|
239 |
usergroup = UserGroup(group_name=u'new_users')
|
240 |
vigiboard_perm = Permission.by_permission_name(u'vigiboard-access')
|
241 |
usergroup.permissions.append(vigiboard_perm) |
242 |
user = User( |
243 |
user_name=u'new_user',
|
244 |
fullname=u'',
|
245 |
email=u'user.has.no@access',
|
246 |
) |
247 |
user.usergroups.append(usergroup) |
248 |
DBSession.add(user) |
249 |
|
250 |
# L'utilisateur est authentifié mais n'a aucun accès. Il
|
251 |
# cherche à obtenir la liste des groupes racines de l'arbre.
|
252 |
response = self.app.get('/get_groups', |
253 |
extra_environ={'REMOTE_USER': 'new_user'}) |
254 |
json = response.json |
255 |
|
256 |
# On s'assure que la liste retournée est bien vide.
|
257 |
self.assertEqual(
|
258 |
json, { |
259 |
'items': [],
|
260 |
'groups': []
|
261 |
} |
262 |
) |
263 |
|