Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_supitemgroup.py @ 530d2484

History | View | Annotate | Download (8.73 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 le formulaire de recherche avec un groupe d'hôtes.
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 TestSearchFormSupItemGroup(TestController):
21
    """Teste la récupération d'événements selon le supitemgroup."""
22
    def setUp(self):
23
        super(TestSearchFormSupItemGroup, self).setUp()
24
        populate_DB()
25

    
26
    def test_search_supitemgroup_when_allowed(self):
27
        """Teste la recherche par supitemgroup avec les bons droits d'accès."""
28

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
129
    def test_search_inexistent_supitemgroup(self):
130
        """Teste la recherche par supitemgroup sur un groupe inexistant."""
131

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

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

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

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

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

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

    
166
    def test_search_supitemgroup_when_disallowed(self):
167
        """Teste la recherche par supitemgroup SANS les droits d'accès."""
168

    
169
        # On récupère les 2 groupes de supitems utilisés lors de ces tests.
170
        maingroup = SupItemGroup.by_group_name(u'maingroup')
171
        group2 = SupItemGroup.by_group_name(u'group2')
172

    
173
        # L'utilisateur n'est pas authentifié.
174
        response = self.app.get('/', status=401)
175

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

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

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