Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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