Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_userutils.py @ 7365fb51

History | View | Annotate | Download (2.7 KB)

1 57f7cb3f Gabriel DE PERTHUIS
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4 3ee2b81b Francois POIROTTE
Teste l'héritage des permissions sur les groupes d'hôtes/services.
5 57f7cb3f Gabriel DE PERTHUIS
"""
6 c1ce3d6a Francois POIROTTE
import tg
7
import transaction
8 57f7cb3f Gabriel DE PERTHUIS
from nose.tools import assert_true
9
10 7365fb51 Francois POIROTTE
from vigilo.models.session import DBSession
11
from vigilo.models import HostGroup, Permission, User
12 57f7cb3f Gabriel DE PERTHUIS
from vigiboard.tests import TestController
13
14 3ee2b81b Francois POIROTTE
class TestGroupPermissionsInheritance(TestController):
15 aa0788a2 Francois POIROTTE
    """Test retrieval of groups of hosts/services."""
16 47acbffb Francois POIROTTE
    def test_groups_inheritance(self):
17
        """
18
        S'assure que les groupes sont correctement hérités.
19
        """
20 d3c47597 Francois POIROTTE
21 47acbffb Francois POIROTTE
        # Création de 2 groupes d'utilisateurs.
22 86c3ae23 Francois POIROTTE
        hosteditors = HostGroup(name=u'hosteditors', parent=None)
23 47acbffb Francois POIROTTE
        DBSession.add(hosteditors)
24 57f7cb3f Gabriel DE PERTHUIS
25 86c3ae23 Francois POIROTTE
        hostmanagers = HostGroup(name=u'hostmanagers', parent=hosteditors)
26 47acbffb Francois POIROTTE
        DBSession.add(hostmanagers)
27 aa0788a2 Francois POIROTTE
28 bc94248f Francois POIROTTE
        # L'attribution des permissions.
29 aa0788a2 Francois POIROTTE
        manage_perm = Permission.by_permission_name(u'manage')
30
        edit_perm = Permission.by_permission_name(u'edit')
31
32 86c3ae23 Francois POIROTTE
        manage_perm.hostgroups.append(hostmanagers)
33
        edit_perm.hostgroups.append(hosteditors)
34 aa0788a2 Francois POIROTTE
        DBSession.flush()
35
        transaction.commit()
36 57f7cb3f Gabriel DE PERTHUIS
37 bc94248f Francois POIROTTE
        # On obtient les variables de session comme si on était loggué
38
        # en tant que manager.
39
        environ = {'REMOTE_USER': 'manager'}
40 57f7cb3f Gabriel DE PERTHUIS
        response = self.app.get('/', extra_environ=environ)
41
        
42 bc94248f Francois POIROTTE
        # On récupère la liste des groups auxquels l'utilisateur appartient.
43 c1ce3d6a Francois POIROTTE
        username = response.request.environ \
44
            ['repoze.who.identity'] \
45
            ['repoze.who.userid']
46 bc94248f Francois POIROTTE
        grp = User.by_user_name(username).groups
47 aa0788a2 Francois POIROTTE
48 47acbffb Francois POIROTTE
        # Permet de rafraîchir les instances.
49 86c3ae23 Francois POIROTTE
        hostmanagers = DBSession.query(HostGroup).filter(
50
                            HostGroup.name==u'hostmanagers').one()
51
        hosteditors = DBSession.query(HostGroup).filter(
52
                            HostGroup.name==u'hosteditors').one()
53 47acbffb Francois POIROTTE
54 bc94248f Francois POIROTTE
        # On vérifie que la liste est correcte : le manager doit avoir accès
55
        # aux groupes 'hostmanagers' & 'hosteditors' (dont il hérite).
56 47acbffb Francois POIROTTE
        assert_true(hostmanagers.idgroup in grp and
57
            hosteditors.idgroup in grp,
58 57f7cb3f Gabriel DE PERTHUIS
            msg = "il est dans %s" % grp)
59 aa0788a2 Francois POIROTTE
60 bc94248f Francois POIROTTE
        # On recommence avec l'utilisateur editor.
61
        environ = {'REMOTE_USER': 'editor'}
62 57f7cb3f Gabriel DE PERTHUIS
        response = self.app.get('/', extra_environ=environ)
63 bc94248f Francois POIROTTE
64 c1ce3d6a Francois POIROTTE
        username = response.request.environ \
65
            ['repoze.who.identity'] \
66
            ['repoze.who.userid']
67 bc94248f Francois POIROTTE
        grp = User.by_user_name(username).groups
68
69
        # L'utilisateur editor ne doit avoir accès qu'au groupe 'hosteditors'.
70 47acbffb Francois POIROTTE
        assert_true(not(hostmanagers.idgroup in grp) and
71
            hosteditors.idgroup in grp,
72 57f7cb3f Gabriel DE PERTHUIS
            msg = "il est dans %s" % grp)