Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_supitemgroup.py @ 239a320d

History | View | Annotate | Download (8.63 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Teste le formulaire de recherche avec un groupe d'hôtes.
4
"""
5
from nose.tools import assert_true, assert_equal
6
from datetime import datetime
7
import transaction
8

    
9
from vigiboard.tests import TestController
10
from vigilo.models.session import DBSession
11
from vigilo.models.tables import SupItemGroup, Host, Permission, StateName, \
12
                                    Event, CorrEvent, User, UserGroup, \
13
                                    DataPermission
14

    
15
from utils import populate_DB
16

    
17
class TestSearchFormSupItemGroup(TestController):
18
    """Teste la récupération d'événements selon le supitemgroup."""
19
    def setUp(self):
20
        super(TestSearchFormSupItemGroup, self).setUp()
21
        populate_DB()
22

    
23
    def test_search_supitemgroup_when_allowed(self):
24
        """Teste la recherche par supitemgroup avec les bons droits d'accès."""
25

    
26
        # On récupère les 3 groupes de supitems utilisés lors de ces tests.
27
        root = SupItemGroup.by_group_name('root')
28
        maingroup = SupItemGroup.by_group_name('maingroup')
29
        group1 = SupItemGroup.by_group_name('group1')
30

    
31
        # L'utilisateur est authentifié avec des permissions réduites.
32
        # Il effectue une recherche sur un groupe de supitems auquel
33
        # il a accès, on s'attend à ce que la requête retourne 2 résultats.
34
        environ = {'REMOTE_USER': 'limited_access'}
35
        response = self.app.get(
36
            '/?supitemgroup=%d' % group1.idgroup,
37
            extra_environ=environ
38
        )
39

    
40
        # Il doit y avoir 2 lignes dans la réponse.
41
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
42
        print "There are %d rows in the result set" % len(rows)
43
        assert_equal(len(rows), 2)
44

    
45
        # Il doit y avoir plusieurs colonnes dans la réponse.
46
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
47
        print "There are %d columns in the result set" % len(cols)
48
        assert_true(len(cols) > 1)
49

    
50
        # Le même utilisateur effectue une recherche sur un groupe de supitems
51
        # auquel il n'a pas accès, mais qui est parent du groupe précédent.
52
        # On s'attend donc à ce que la requête retourne également 2 résultats.
53
        environ = {'REMOTE_USER': 'limited_access'}
54
        response = self.app.get(
55
            '/?supitemgroup=%d' % maingroup.idgroup,
56
            extra_environ=environ
57
        )
58

    
59
        # Il doit y avoir 2 lignes dans la réponse.
60
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
61
        print "There are %d rows in the result set" % len(rows)
62
        assert_equal(len(rows), 2)
63

    
64
        # Il doit y avoir plusieurs colonnes dans la réponse.
65
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
66
        print "There are %d columns in the result set" % len(cols)
67
        assert_true(len(cols) > 1)
68

    
69
        # Le même utilisateur effectue une recherche à partir du groupe racine.
70
        # On s'attend donc à ce que la requête retourne également 2 résultats.
71
        environ = {'REMOTE_USER': 'limited_access'}
72
        response = self.app.get(
73
            '/?supitemgroup=%d' % root.idgroup,
74
            extra_environ=environ
75
        )
76

    
77
        # Il doit y avoir 2 lignes dans la réponse.
78
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
79
        print "There are %d rows in the result set" % len(rows)
80
        assert_equal(len(rows), 2)
81

    
82
        # Il doit y avoir plusieurs colonnes dans la réponse.
83
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
84
        print "There are %d columns in the result set" % len(cols)
85
        assert_true(len(cols) > 1)
86

    
87
        # L'utilisateur est authentifié avec des permissions plus étendues.
88
        # Il effectue une recherche sur un groupe de supitems auquel
89
        # il a accès, on s'attend à ce que la requête retourne 5 résultats,
90
        # dont 4 grâce à l'héritage de permissions entre les groupes.
91
        environ = {'REMOTE_USER': 'access'}
92
        response = self.app.get(
93
            '/?supitemgroup=%d' % maingroup.idgroup,
94
            extra_environ=environ
95
        )
96

    
97
        # Il doit y avoir 5 lignes dans la réponse.
98
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
99
        print "There are %d rows in the result set" % len(rows)
100
        assert_equal(len(rows), 5)
101

    
102
        # Il doit y avoir plusieurs colonnes dans la réponse.
103
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
104
        print "There are %d columns in the result set" % len(cols)
105
        assert_true(len(cols) > 1)
106

    
107
        # L'utilisateur est authentifié et fait partie du groupe
108
        # 'managers'. Il effectue une recherche sur un groupe de supitems, 
109
        # et on s'attend à ce que la requête retourne 5 résultats.
110
        environ = {'REMOTE_USER': 'manager'}
111
        response = self.app.get(
112
            '/?supitemgroup=%d' % maingroup.idgroup,
113
            extra_environ=environ
114
        )
115

    
116
        # Il doit y avoir 5 lignes dans la réponse.
117
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
118
        print "There are %d rows in the result set" % len(rows)
119
        assert_equal(len(rows), 5)
120

    
121
        # Il doit y avoir plusieurs colonnes dans la réponse.
122
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
123
        print "There are %d columns in the result set" % len(cols)
124
        assert_true(len(cols) > 1)
125

    
126
    def test_search_inexistent_supitemgroup(self):
127
        """Teste la recherche par supitemgroup sur un groupe inexistant."""
128

    
129
        # L'utilisateur est authentifié avec des permissions
130
        # étendues. Il effectue une recherche sur un groupe d'hôtes
131
        # qui n'existe pas, il ne doit donc obtenir aucun résultat.
132
        response = self.app.get('/?supitemgroup=%d' % -42,
133
            extra_environ={'REMOTE_USER': 'access'})
134

    
135
        # Il doit y avoir 1 seule ligne de résultats.
136
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
137
        print "There are %d rows in the result set" % len(rows)
138
        assert_equal(len(rows), 1)
139

    
140
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
141
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
142
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
143
        print "There are %d columns in the result set" % len(cols)
144
        assert_equal(len(cols), 1)
145

    
146
        # L'utilisateur est authentifié et fait partie du groupe
147
        # 'managers'. Il effectue une recherche sur un groupe d'hôtes
148
        # qui n'existe pas, il ne doit donc obtenir aucun résultat.
149
        response = self.app.get('/?supitemgroup=%d' % -42,
150
            extra_environ={'REMOTE_USER': 'manager'})
151

    
152
        # Il doit y avoir 1 seule ligne de résultats.
153
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
154
        print "There are %d rows in the result set" % len(rows)
155

    
156
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
157
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
158
        assert_equal(len(rows), 1)
159
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
160
        print "There are %d columns in the result set" % len(cols)
161
        assert_equal(len(cols), 1)
162

    
163
    def test_search_supitemgroup_when_disallowed(self):
164
        """Teste la recherche par supitemgroup SANS les droits d'accès."""
165

    
166
        # On récupère les 2 groupes de supitems utilisés lors de ces tests.
167
        maingroup = SupItemGroup.by_group_name('maingroup')
168
        group2 = SupItemGroup.by_group_name('group2')
169

    
170
        # L'utilisateur n'est pas authentifié.
171
        response = self.app.get('/', status=401)
172

    
173
        # L'utilisateur est authentifié avec des permissions réduites.
174
        # Il effectue une recherche sur un groupe de supitems auquel il
175
        # n'a pas accès, mais qui est le fils du groupe parent d'un groupe
176
        # auquel il a accès. Il ne doit donc obtenir aucun résultat.
177
        environ = {'REMOTE_USER': 'limited_access'}
178
        response = self.app.get(
179
            '/?supitemgroup=%d' % group2.idgroup,
180
            extra_environ=environ
181
        )
182

    
183
        # Il doit y avoir 1 seule ligne dans la réponse.
184
        # (la réponse contient le texte "Il n'y a aucun événément", traduit)
185
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
186
        print "There are %d rows in the result set" % len(rows)
187
        assert_equal(len(rows), 1)
188

    
189
        # Il doit y avoir 1 seule colonne dans la réponse.
190
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
191
        print "There are %d columns in the result set" % len(cols)
192
        assert_equal(len(cols), 1)
193