Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_group_selection_tree.py @ c25a3200

History | View | Annotate | Download (10.2 KB)

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