Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigigraph / vigigraph / tests / functional / test_host_selection_form.py @ 3ec8080a

History | View | Annotate | Download (14.4 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Suite de tests du formulaire de sélection des hôtes et groupes d'hôtes.
4
"""
5
from nose.tools import assert_equal
6
import transaction
7

    
8
from vigigraph.tests import TestController
9
from vigilo.models.session import DBSession
10
from vigilo.models.tables import SupItemGroup, Permission, SupItemGroup
11
from vigilo.models.demo.functions import add_supitemgroup, \
12
    add_host, add_host2group, add_usergroup, add_user, \
13
    add_supitemgrouppermission, add_usergroup_permission
14

    
15

    
16
class TestHostSelectionForm(TestController):
17
    """
18
    Teste le formulaire de sélection des
19
    hôtes et groupes d'hôtes de Vigigraph.
20
    """
21

    
22
    def setUp(self):
23
        """Préparation de la base de données de tests."""
24

    
25
        # Initialisation de la base
26
        super(TestHostSelectionForm, self).setUp()
27

    
28
        # Ajout d'un groupe d'hôtes principal
29
        mainhostgroup = add_supitemgroup(u'mhg', None)
30

    
31
        # Ajout d'un premier groupe d'hôtes de second niveau
32
        hostgroup1 = add_supitemgroup(u'hg1', mainhostgroup)
33

    
34
        # Ajout d'un second groupe d'hôtes de second niveau
35
        hostgroup2 = add_supitemgroup(u'hg2', mainhostgroup)
36

    
37
        # Ajout de trois hôtes
38
        host1 = add_host(u'host1')
39
        host2 = add_host(u'host2')
40
        host3 = add_host(u'host3')
41

    
42
        # Ajout du premier hôte dans le groupe d'hôtes principal.
43
        add_host2group(host1, mainhostgroup)
44
        # Ajout du deuxième hôte dans le premier
45
        # groupe d'hôtes de second niveau.
46
        add_host2group(host2, hostgroup1)
47
        # Ajout du troisième hôte dans le second
48
        # groupe d'hôtes de second niveau.
49
        add_host2group(host3, hostgroup2)
50

    
51
        # Ajout de trois groupes d'utilisateurs
52
        poweruser_group = add_usergroup(u'powerusers')
53
        user_group = add_usergroup(u'users')
54
        visitor_group = add_usergroup(u'visitor')
55

    
56
        # Ajout de trois utilisateurs
57
        add_user(u'poweruser', u'some.power@us.er',
58
            u'Power User', u'poweruserpass', u'powerusers')
59
        add_user(u'user', u'some.random@us.er',
60
            u'User', u'userpass', u'users')
61
        add_user(u'visitor', u'some.visiting@us.er',
62
            u'', u'visitorpass', u'visitor')
63

    
64
        # Ajout des permissions sur le groupe d'hôtes
65
        # principal pour le premier groupe d'utilisateurs
66
        add_supitemgrouppermission(mainhostgroup, poweruser_group)
67

    
68
        # Ajout des permissions sur le premier groupe d'hôtes
69
        # secondaire pour le second groupe d'utilisateurs
70
        add_supitemgrouppermission(hostgroup1, user_group)
71

    
72
        # Ajout de la permission 'vigigraph-access' aux groupes d'utilisateurs
73
        perm = Permission.by_permission_name(u'vigigraph-access')
74
        add_usergroup_permission(poweruser_group, perm)
75
        add_usergroup_permission(user_group, perm)
76
        add_usergroup_permission(visitor_group, perm)
77

    
78
        # Validation des ajouts dans la base
79
        DBSession.flush()
80
        transaction.commit()
81

    
82
##### Premier onglet déroulant du formulaire #####
83

    
84
    def test_get_main_host_groups_when_allowed(self):
85
        """
86
        Récupération des groupes d'hôtes principaux avec les bons droits
87
        """
88

    
89
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
90
        mainhostgroup = DBSession.query(SupItemGroup).filter(
91
            SupItemGroup.name == u'mhg').first()
92

    
93
        # Récupération des groupes d'hôtes principaux
94
        # accessibles à l'utilisateur 'poweruser'
95
        response = self.app.post(
96
            '/rpc/maingroups', {
97
            }, extra_environ={'REMOTE_USER': 'poweruser'})
98
        json = response.json
99

    
100
        # On s'assure que la liste de groupes
101
        # d'hôtes retournée contient bien 'mhg'
102
        assert_equal(
103
            json, {"items": [
104
                [mainhostgroup.name, unicode(mainhostgroup.idgroup)]
105
            ]}
106
        )
107

    
108
        # Récupération des groupes d'hôtes principaux
109
        # accessibles à l'utilisateur 'user'
110
        response = self.app.post(
111
            '/rpc/maingroups', {
112
            }, extra_environ={'REMOTE_USER': 'user'})
113
        json = response.json
114

    
115
        # On s'assure que la liste de groupes
116
        # d'hôtes retournée contient bien 'mhg'
117
        assert_equal(
118
            json, {"items": [[
119
                mainhostgroup.name,
120
                unicode(mainhostgroup.idgroup)
121
            ]]}
122
        )
123

    
124
    def test_get_main_host_groups_when_not_allowed(self):
125
        """
126
        Récupération des groupes d'hôtes principaux sans les bons droits
127
        """
128

    
129
        # Récupération des groupes d'hôtes principaux
130
        # accessibles à l'utilisateur 'visitor'
131
        response = self.app.post(
132
            '/rpc/maingroups', {
133
            }, extra_environ={'REMOTE_USER': 'visitor'})
134
        json = response.json
135

    
136
        # On s'assure que la liste de groupes d'hôtes retournée est bien vide
137
        assert_equal(
138
            json, {"items": []}
139
        )
140

    
141
##### Deuxième onglet déroulant du formulaire #####
142

    
143
    def test_get_host_groups_when_allowed(self):
144
        """
145
        Récupération des groupes d'hôtes secondaires avec les bons droits
146
        """
147

    
148
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
149
        mainhostgroup = DBSession.query(SupItemGroup).filter(
150
            SupItemGroup.name == u'mhg').first()
151

    
152
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
153
        hostgroup1 = DBSession.query(SupItemGroup).filter(
154
            SupItemGroup.name == u'hg1').first()
155

    
156
        # Récupération du groupe d'hôtes 'hg2' dans la base de données
157
        hostgroup2 = DBSession.query(SupItemGroup).filter(
158
            SupItemGroup.name == u'hg2').first()
159

    
160
        # Récupération des groupes d'hôtes
161
        # accessibles à l'utilisateur 'poweruser'
162
        response = self.app.post(
163
            '/rpc/hostgroups?maingroupid=%s' % (mainhostgroup.idgroup, ), {
164
            }, extra_environ={'REMOTE_USER': 'poweruser'})
165
        json = response.json
166

    
167
        # On s'assure que la liste de groupes d'hôtes retournée
168
        # contient bien 'No subgroup', 'hg1', et 'hg2'
169
        assert_equal(
170
            json, {"items": [
171
                ['No subgroup', unicode(mainhostgroup.idgroup)],
172
                [hostgroup1.name, unicode(hostgroup1.idgroup)],
173
                [hostgroup2.name, unicode(hostgroup2.idgroup)],
174
            ]}
175
        )
176

    
177
        # Récupération des groupes d'hôtes
178
        # accessibles à l'utilisateur 'user'
179
        response = self.app.post(
180
            '/rpc/hostgroups?maingroupid=%s' % (mainhostgroup.idgroup, ), {
181
            }, extra_environ={'REMOTE_USER': 'user'})
182
        json = response.json
183

    
184
        # On s'assure que la liste de groupes
185
        # d'hôtes retournée contient bien 'hg1'
186
        assert_equal(
187
            json, {"items": [
188
                [hostgroup1.name, unicode(hostgroup1.idgroup)]
189
            ]}
190
        )
191

    
192
    def test_get_host_groups_when_not_allowed(self):
193
        """
194
        Récupération des groupes d'hôtes secondaires sans les bons droits
195
        """
196

    
197
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
198
        mainhostgroup = DBSession.query(SupItemGroup).filter(
199
            SupItemGroup.name == u'mhg').first()
200

    
201
        # Récupération des groupes d'hôtes
202
        # accessibles à l'utilisateur 'visitor'
203
        response = self.app.post(
204
            '/rpc/hostgroups?maingroupid=%s' % (mainhostgroup.idgroup, ), {
205
            }, extra_environ={'REMOTE_USER': 'visitor'})
206
        json = response.json
207

    
208
        # On s'assure que la liste de groupes d'hôtes
209
        # retournée contient uniquement 'No subgroups'
210
        assert_equal(
211
            json, {"items": [['No subgroup', '%s'
212
                % (mainhostgroup.idgroup, )]]}
213
        )
214

    
215
    def test_get_host_groups_from_inexisting_main_group(self):
216
        """
217
        Récupération des groupes d'hôtes d'un groupe principal inexistant
218
        """
219

    
220
        # Récupération des groupes d'hôtes accessibles à l'utilisateur
221
        # 'visitor' et appartenant à un groupe principal inexistant
222
        response = self.app.post(
223
            '/rpc/hostgroups?maingroupid=6666666', {
224
            }, extra_environ={'REMOTE_USER': 'visitor'})
225
        json = response.json
226

    
227
        # On s'assure que la liste de groupes d'hôtes
228
        # retournée contient uniquement 'No subgroups'
229
        assert_equal(
230
            json, {"items": [['No subgroup', '6666666']]}
231
        )
232

    
233
##### Troisième onglet déroulant du formulaire #####
234

    
235
    def test_get_hosts_when_allowed(self):
236
        """
237
        Récupération des hôtes avec les bons droits
238
        """
239

    
240
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
241
        mainhostgroup = DBSession.query(SupItemGroup).filter(
242
            SupItemGroup.name == u'mhg').first()
243

    
244
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
245
        hostgroup1 = DBSession.query(SupItemGroup).filter(
246
            SupItemGroup.name == u'hg1').first()
247

    
248
        # Récupération du groupe d'hôtes 'hg2' dans la base de données
249
        hostgroup2 = DBSession.query(SupItemGroup).filter(
250
            SupItemGroup.name == u'hg2').first()
251

    
252
        # Récupération des hôtes du groupe 'mhg'
253
        # accessibles à l'utilisateur 'poweruser'
254
        response = self.app.post(
255
            '/rpc/hosts?othergroupid=%s' % (mainhostgroup.idgroup, ), {
256
            }, extra_environ={'REMOTE_USER': 'poweruser'})
257
        json = response.json
258

    
259
        # On s'assure que la liste d'hôtes retournée contient bien 'host1'
260
        assert_equal(
261
            json, {"items": [
262
                ['host1', unicode(mainhostgroup.idgroup)],
263
            ]}
264
        )
265

    
266
        # Récupération des hôtes du groupe 'hg1'
267
        # accessibles à l'utilisateur 'poweruser'
268
        response = self.app.post(
269
            '/rpc/hosts?othergroupid=%s' % (hostgroup1.idgroup, ), {
270
            }, extra_environ={'REMOTE_USER': 'poweruser'})
271
        json = response.json
272

    
273
        # On s'assure que la liste d'hotes retournée contient bien 'host2'
274
        assert_equal(
275
            json, {"items": [
276
                ['host2', unicode(hostgroup1.idgroup)],
277
            ]}
278
        )
279

    
280
        # Récupération des hôtes du groupe 'hg1'
281
        # accessibles à l'utilisateur 'user'
282
        response = self.app.post(
283
            '/rpc/hosts?othergroupid=%s' % (hostgroup1.idgroup, ), {
284
            }, extra_environ={'REMOTE_USER': 'user'})
285
        json = response.json
286

    
287
        # On s'assure que la liste d'hôtes retournée contient bien 'host2'
288
        assert_equal(
289
            json, {"items": [
290
                ['host2', unicode(hostgroup1.idgroup)],
291
            ]}
292
        )
293

    
294
        # Récupération des hôtes du groupe 'hg2'
295
        # accessibles à l'utilisateur 'poweruser'
296
        response = self.app.post(
297
            '/rpc/hosts?othergroupid=%s' % (hostgroup2.idgroup, ), {
298
            }, extra_environ={'REMOTE_USER': 'poweruser'})
299
        json = response.json
300

    
301
        # On s'assure que la liste d'hotes retournée contient bien 'host3'
302
        assert_equal(
303
            json, {"items": [
304
                ['host3', unicode(hostgroup1.idgroup)],
305
            ]}
306
        )
307

    
308
    def test_get_hosts_when_not_allowed(self):
309
        """
310
        Récupération des hôtes sans les bons droits
311
        """
312

    
313
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
314
        mainhostgroup = DBSession.query(SupItemGroup).filter(
315
            SupItemGroup.name == u'mhg').first()
316

    
317
        # Récupération du groupe d'hôtes
318
        # secondaire 'hg1' dans la base de données
319
        hostgroup1 = DBSession.query(SupItemGroup).filter(
320
            SupItemGroup.name == u'hg1').first()
321

    
322
        # Récupération du groupe d'hôtes
323
        # secondaire 'hg2' dans la base de données
324
        hostgroup2 = DBSession.query(SupItemGroup).filter(
325
            SupItemGroup.name == u'hg2').first()
326

    
327
        # Récupération des hôtes du groupe 'mhg'
328
        # accessibles à l'utilisateur 'user'
329
        response = self.app.post(
330
            '/rpc/hosts?othergroupid=%s' % (mainhostgroup.idgroup, ), {
331
            }, extra_environ={'REMOTE_USER': 'user'})
332
        json = response.json
333

    
334
        # On s'assure que la liste
335
        # d'hôtes retournée est vide
336
        assert_equal(
337
            json, {"items": []}
338
        )
339

    
340
        # Récupération des hôtes du groupe 'hg2'
341
        # accessibles à l'utilisateur 'user'
342
        response = self.app.post(
343
            '/rpc/hosts?othergroupid=%s' % (hostgroup2.idgroup, ), {
344
            }, extra_environ={'REMOTE_USER': 'user'})
345
        json = response.json
346

    
347
        # On s'assure que la liste
348
        # d'hôtes retournée est vide
349
        assert_equal(
350
            json, {"items": []}
351
        )
352

    
353
        # Récupération des hôtes du groupe 'mhg'
354
        # accessibles à l'utilisateur 'visitor'
355
        response = self.app.post(
356
            '/rpc/hosts?othergroupid=%s' % (mainhostgroup.idgroup, ), {
357
            }, extra_environ={'REMOTE_USER': 'visitor'})
358
        json = response.json
359

    
360
        # On s'assure que la liste
361
        # d'hôtes retournée est vide
362
        assert_equal(
363
            json, {"items": []}
364
        )
365

    
366
        # Récupération des hôtes du groupe 'hg1'
367
        # accessibles à l'utilisateur 'visitor'
368
        response = self.app.post(
369
            '/rpc/hosts?othergroupid=%s' % (hostgroup1.idgroup, ), {
370
            }, extra_environ={'REMOTE_USER': 'visitor'})
371
        json = response.json
372

    
373
        # On s'assure que la liste d'hôtes retournée est vide
374
        assert_equal(
375
            json, {"items": []}
376
        )
377

    
378
        # Récupération des hôtes du groupe 'hg2'
379
        # accessibles à l'utilisateur 'visitor'
380
        response = self.app.post(
381
            '/rpc/hosts?othergroupid=%s' % (hostgroup2.idgroup, ), {
382
            }, extra_environ={'REMOTE_USER': 'visitor'})
383
        json = response.json
384

    
385
        # On s'assure que la liste d'hôtes retournée est vide
386
        assert_equal(
387
            json, {"items": []}
388
        )
389

    
390
    def test_get_hosts_from_inexisting_secondary_group(self):
391
        """
392
        Récupération des hôtes d'un groupe secondaire inexistant
393
        """
394

    
395
        # Récupération des hôtes accessibles à l'utilisateur
396
        # 'visitor' et appartenant à un groupe secondaire inexistant
397
        response = self.app.post(
398
            '/rpc/hosts?othergroupid=6666666', {
399
            }, extra_environ={'REMOTE_USER': 'visitor'})
400
        json = response.json
401

    
402
        # On s'assure que la liste retournée est vide
403
        assert_equal(
404
            json, {"items": []}
405
        )
406