Project

General

Profile

Revision fae18e45

IDfae18e45de5a5bb5320e23ca13139039ea06efca
Parent fc33fcfb
Child 131b409a

Added by Vincent QUEMENER over 13 years ago

Ajout de tests sur le formulaire de recherche de VigiGraph (plus précisément sur la transmission des résultats de la recherche au formulaire de sélection).

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@5012 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

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

  
8 8
from vigigraph.tests import TestController
9 9
from vigilo.models.session import DBSession
10
from vigilo.models.tables import Host, \
11
    Graph, GraphGroup, Permission
12
from vigilo.models.demo.functions import add_supitemgroup, \
13
    add_host, add_host2group, add_usergroup, add_user, \
14
    add_supitemgrouppermission, add_usergroup_permission, \
10
from vigilo.models.tables import Host, Graph, GraphGroup
11
from vigilo.models.demo.functions import \
15 12
    add_graph, add_graphgroup, add_graph2group, \
16 13
    add_perfdatasource, add_perfdatasource2graph, \
17 14
    add_vigiloserver, add_application
18 15

  
16
from vigigraph.tests.functional.test_host_selection_form import populateDB
19 17

  
20
class TestHostSelectionForm(TestController):
18

  
19
def addGraphs(host1, host2, host3):
20
    """
21
    Ajout d'un graphe pour chacun des trois hôtes passés en paramètres.
22

  
23
    @param host1: Premier hôte.
24
    @type  host1: L{vigilo.models.Host}
25
    @param host2: Deuxième hôte.
26
    @type  host2: L{vigilo.models.Host}
27
    @param host3: Troisième hôte.
28
    @type  host3: L{vigilo.models.Host}
29
    """
30

  
31
    # Ajout d'un serveur de supervision
32
    vigiloserver = add_vigiloserver(u'locahost')
33

  
34
    # Ajout d'une application 'vigirrd'
35
    add_application(u"vigirrd")
36

  
37
    # Ajout de trois graphes
38
    graph1 = add_graph("graph1")
39
    graph2 = add_graph("graph2")
40
    graph3 = add_graph("graph3")
41

  
42
    # Ajout d'une perfdatasource pour chaque hôte
43
    datasource1 = add_perfdatasource(
44
        u'load', host1, None, None, vigiloserver)
45
    datasource2 = add_perfdatasource(
46
        u'load', host2, None, None, vigiloserver)
47
    datasource3 = add_perfdatasource(
48
        u'load', host3, None, None, vigiloserver)
49

  
50
    # Ajout d'une perfdatsource à chaque graphe
51
    add_perfdatasource2graph(datasource1, graph1)
52
    add_perfdatasource2graph(datasource2, graph2)
53
    add_perfdatasource2graph(datasource3, graph3)
54

  
55
    # Ajout de trois groupes de graphes
56
    graphgroup1 = add_graphgroup("graphgroup1")
57
    graphgroup2 = add_graphgroup("graphgroup2")
58
    graphgroup3 = add_graphgroup("graphgroup3")
59

  
60
    # Ajout de chaque graphe à un groupe de graphes
61
    add_graph2group(graph1, graphgroup1)
62
    add_graph2group(graph2, graphgroup2)
63
    add_graph2group(graph3, graphgroup3)
64

  
65

  
66
class TestGraphSelectionForm(TestController):
21 67
    """
22 68
    Teste le formulaire de sélection des
23
    hôtes et groupes d'hôtes de Vigigraph.
69
    graphes et groupes de graphes de Vigigraph.
24 70
    """
25 71

  
26 72
    def setUp(self):
27 73
        """Préparation de la base de données de tests."""
28 74

  
29 75
        # Initialisation de la base
30
        super(TestHostSelectionForm, self).setUp()
31

  
32
        # Ajout d'un serveur de supervision
33
        vigiloserver = add_vigiloserver(u'locahost')
34

  
35
        # Ajout d'une application 'vigirrd'
36
        add_application(u"vigirrd")
37

  
38
        # Ajout d'un groupe d'hôtes principal
39
        mainhostgroup = add_supitemgroup(u'mhg', None)
40

  
41
        # Ajout d'un premier groupe d'hôtes de second niveau
42
        hostgroup1 = add_supitemgroup(u'hg1', mainhostgroup)
43

  
44
        # Ajout d'un second groupe d'hôtes de second niveau
45
        hostgroup2 = add_supitemgroup(u'hg2', mainhostgroup)
46

  
47
        # Ajout de trois hôtes
48
        host1 = add_host(u'host1')
49
        host2 = add_host(u'host2')
50
        host3 = add_host(u'host3')
51

  
52
        # Ajout du premier hôte dans le groupe d'hôtes principal.
53
        add_host2group(host1, mainhostgroup)
54
        # Ajout du deuxième hôte dans le premier
55
        # groupe d'hôtes de second niveau.
56
        add_host2group(host2, hostgroup1)
57
        # Ajout du troisième hôte dans le second
58
        # groupe d'hôtes de second niveau.
59
        add_host2group(host3, hostgroup2)
60

  
61
        # Ajout de trois graphes
62
        graph1 = add_graph("graph1")
63
        graph2 = add_graph("graph2")
64
        graph3 = add_graph("graph3")
65

  
66
        # Ajout d'une perfdatasource pour chaque hôte
67
        datasource1 = add_perfdatasource(
68
            u'load', host1, None, None, vigiloserver)
69
        datasource2 = add_perfdatasource(
70
            u'load', host2, None, None, vigiloserver)
71
        datasource3 = add_perfdatasource(
72
            u'load', host3, None, None, vigiloserver)
73

  
74
        # Ajout d'une perfdatsource à chaque graphe
75
        add_perfdatasource2graph(datasource1, graph1)
76
        add_perfdatasource2graph(datasource2, graph2)
77
        add_perfdatasource2graph(datasource3, graph3)
78

  
79
        # Ajout de trois groupes de graphes
80
        graphgroup1 = add_graphgroup("graphgroup1")
81
        graphgroup2 = add_graphgroup("graphgroup2")
82
        graphgroup3 = add_graphgroup("graphgroup3")
83

  
84
        # Ajout de chaque graphe à un groupe de graphes
85
        add_graph2group(graph1, graphgroup1)
86
        add_graph2group(graph2, graphgroup2)
87
        add_graph2group(graph3, graphgroup3)
88

  
89
        # Ajout de trois groupes d'utilisateurs
90
        poweruser_group = add_usergroup(u'powerusers')
91
        user_group = add_usergroup(u'users')
92
        visitor_group = add_usergroup(u'visitor')
93

  
94
        # Ajout de trois utilisateurs
95
        add_user(u'poweruser', u'some.power@us.er',
96
            u'Power User', u'poweruserpass', u'powerusers')
97
        add_user(u'user', u'some.random@us.er',
98
            u'User', u'userpass', u'users')
99
        add_user(u'visitor', u'some.visiting@us.er',
100
            u'', u'visitorpass', u'visitor')
101

  
102
        # Ajout des permissions sur le groupe d'hôtes
103
        # principal pour le premier groupe d'utilisateurs
104
        add_supitemgrouppermission(mainhostgroup, poweruser_group)
105

  
106
        # Ajout des permissions sur le premier groupe d'hôtes
107
        # secondaire pour le second groupe d'utilisateurs
108
        add_supitemgrouppermission(hostgroup1, user_group)
109

  
110
        # Ajout de la permission 'vigigraph-access' aux groupes d'utilisateurs
111
        perm = Permission.by_permission_name(u'vigigraph-access')
112
        add_usergroup_permission(poweruser_group, perm)
113
        add_usergroup_permission(user_group, perm)
114
        add_usergroup_permission(visitor_group, perm)
76
        super(TestGraphSelectionForm, self).setUp()
77

  
78
        # Ajout de données de tests dans la base
79
        (host1, host2, host3) = populateDB()
80

  
81
        # Ajout de graphes dans la base
82
        addGraphs(host1, host2, host3)
115 83

  
116 84
        # Validation des ajouts dans la base
117 85
        DBSession.flush()
......
152 120
            GraphGroup.name == u'graphgroup3').first()
153 121

  
154 122
        # Récupération des groupes de graphes de l'hôte
123
        # host1 accessibles à l'utilisateur 'manager'
124
        response = self.app.post(
125
        '/rpc/graphgroups?idhost=%s' % (host1.idhost, ), {
126
            }, extra_environ={'REMOTE_USER': 'manager'})
127
        json = response.json
128

  
129
        # On s'assure que la liste de groupes
130
        # de graphes retournée contient bien 'graphgroup1'
131
        assert_equal(
132
            json, {"items": [
133
                [graphgroup1.name, unicode(graphgroup1.idgroup)]
134
            ]}
135
        )
136

  
137
        # Récupération des groupes de graphes de l'hôte
138
        # host2 accessibles à l'utilisateur 'manager'
139
        response = self.app.post(
140
        '/rpc/graphgroups?idhost=%s' % (host2.idhost, ), {
141
            }, extra_environ={'REMOTE_USER': 'manager'})
142
        json = response.json
143

  
144
        # On s'assure que la liste de groupes
145
        # de graphes retournée contient bien 'graphgroup2'
146
        assert_equal(
147
            json, {"items": [
148
                [graphgroup2.name, unicode(graphgroup2.idgroup)]
149
            ]}
150
        )
151

  
152
        # Récupération des groupes de graphes de l'hôte
155 153
        # host1 accessibles à l'utilisateur 'poweruser'
156 154
        response = self.app.post(
157 155
        '/rpc/graphgroups?idhost=%s' % (host1.idhost, ), {
......
210 208
                [graphgroup3.name, unicode(graphgroup3.idgroup)]
211 209
            ]}
212 210
        )
211

  
213 212
    def test_get_graph_groups_when_not_allowed(self):
214 213
        """
215 214
        Récupération des groupes de graphes sans les bons droits
......
262 261
            json, {"items": []}
263 262
        )
264 263

  
264
    def test_get_graph_groups_as_anonymous(self):
265
        """
266
        Récupération des groupes de graphes en tant qu'anonyme
267
        """
268

  
269
        # Récupération de l'hôte 'host1' dans la base de données
270
        host1 = DBSession.query(Host).filter(
271
            Host.name == u'host1').first()
272

  
273
        # Récupération des groupes de graphes de l'hôte
274
        # 'host1' par un utilisateur anonyme : le contrôleur
275
        # doit retourner une erreur 401 (HTTPUnauthorized)
276
        self.app.post(
277
            '/rpc/graphgroups?idhost=%s' % (host1.idhost, ), {
278
            }, status=401)
279

  
265 280
    def test_get_graph_groups_from_inexisting_host(self):
266 281
        """
267 282
        Récupération des groupes de graphes d'un hôte inexistant
......
330 345
            Graph.name == u'graph3').first()
331 346

  
332 347
        # Récupération des graphes du groupe de graphes
348
        # 'graphgroup1' accessibles à l'utilisateur 'manager'
349
        response = self.app.post(
350
        '/rpc/graphs?idgraphgroup=%s&idhost=%s' %
351
            (graphgroup1.idgroup, host1.idhost), {},
352
            extra_environ={'REMOTE_USER': 'manager'})
353
        json = response.json
354

  
355
        # On s'assure que la liste de
356
        # graphes retournée contient 'graph1'
357
        assert_equal(
358
            json, {"items": [
359
                [graph1.name, unicode(graph1.idgraph)]
360
            ]}
361
        )
362

  
363
        # Récupération des graphes du groupe de graphes
364
        # 'graphgroup2' accessibles à l'utilisateur 'manager'
365
        response = self.app.post(
366
        '/rpc/graphs?idgraphgroup=%s&idhost=%s' %
367
            (graphgroup2.idgroup, host2.idhost), {},
368
            extra_environ={'REMOTE_USER': 'manager'})
369
        json = response.json
370

  
371
        # On s'assure que la liste de
372
        # graphes retournée contient 'graph2'
373
        assert_equal(
374
            json, {"items": [
375
                [graph2.name, unicode(graph2.idgraph)]
376
            ]}
377
        )
378

  
379
        # Récupération des graphes du groupe de graphes
333 380
        # 'graphgroup1' accessibles à l'utilisateur 'poweruser'
334 381
        response = self.app.post(
335 382
        '/rpc/graphs?idgraphgroup=%s&idhost=%s' %
......
458 505
            json, {"items": []}
459 506
        )
460 507

  
508
    def test_get_graphs_as_anonymous(self):
509
        """
510
        Récupération des graphes en tant qu'anonyme
511
        """
512

  
513
        # Récupération de l'hôte 'host1' dans la base de données
514
        host1 = DBSession.query(Host).filter(
515
            Host.name == u'host1').first()
516

  
517
        # Récupération du groupe de graphes
518
        # 'graphgroup1' dans la base de données
519
        graphgroup1 = DBSession.query(GraphGroup).filter(
520
            GraphGroup.name == u'graphgroup1').first()
521

  
522
        # Récupération des graphes du groupe de graphes
523
        # 'graphgroup1' par un utilisateur anonyme : le contrôleur
524
        # doit retourner une erreur 401 (HTTPUnauthorized)
525
        self.app.post(
526
            '/rpc/graphs?idgraphgroup=%s&idhost=%s' %
527
            (graphgroup1.idgroup, host1.idhost),
528
            {}, status=401)
529

  
461 530
    def test_get_graphs_from_inexisting_graph_group(self):
462 531
        """
463 532
        Récupération des graphes d'un groupe de graphes inexistant
464 533
        """
465 534

  
466 535
        # Récupération des graphes accessibles à l'utilisateur
467
        # 'visitor' et appartenant à un groupe inexistant
536
        # 'manager' et appartenant à un groupe inexistant
468 537
        response = self.app.post(
469 538
            '/rpc/graphs?idgraphgroup=6666666&idhost=6666666', {
470
            }, extra_environ={'REMOTE_USER': 'visitor'})
539
            }, extra_environ={'REMOTE_USER': 'manager'})
471 540
        json = response.json
472 541

  
473 542
        # On s'assure que la liste de
vigigraph/tests/functional/test_host_selection_form.py
13 13
    add_supitemgrouppermission, add_usergroup_permission
14 14

  
15 15

  
16
def populateDB():
17
    """
18
    Peuple la base de données en ajoutant :
19
    - 3 groupes d'hôtes ;
20
    - 3 hôtes ;
21
    - 3 utilisateurs.
22
    Affecte les permissions nécessaires aux utilisateurs en vue des tests.
23
    Retourne les 3 hôtes créés.
24

  
25
    @return: Tuple contenant les trois hôtes.
26
    @rtype:  C{tuple} of L{vigilo.models.Host}
27
    """
28

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

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

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

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

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

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

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

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

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

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

  
79
    return (host1, host2, host3)
80

  
81

  
16 82
class TestHostSelectionForm(TestController):
17 83
    """
18 84
    Teste le formulaire de sélection des
......
25 91
        # Initialisation de la base
26 92
        super(TestHostSelectionForm, self).setUp()
27 93

  
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)
94
        # Ajout de données de tests dans la base
95
        populateDB()
77 96

  
78 97
        # Validation des ajouts dans la base
79 98
        DBSession.flush()
......
91 110
            SupItemGroup.name == u'mhg').first()
92 111

  
93 112
        # Récupération des groupes d'hôtes principaux
113
        # accessibles à l'utilisateur 'manager'
114
        response = self.app.post(
115
            '/rpc/maingroups', {
116
            }, extra_environ={'REMOTE_USER': 'manager'})
117
        json = response.json
118

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

  
127
        # Récupération des groupes d'hôtes principaux
94 128
        # accessibles à l'utilisateur 'poweruser'
95 129
        response = self.app.post(
96 130
            '/rpc/maingroups', {
......
138 172
            json, {"items": []}
139 173
        )
140 174

  
175
    def test_get_main_host_groups_as_anonymous(self):
176
        """
177
        Récupération des groupes d'hôtes principaux en tant qu'anonyme
178
        """
179

  
180
        # Récupération des groupes d'hôtes principaux
181
        # par un utilisateur anonyme : le contrôleur doit
182
        # retourner une erreur 401 (HTTPUnauthorized)
183
        self.app.post(
184
            '/rpc/maingroups', {
185
            }, status=401)
186

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

  
143 189
    def test_get_host_groups_when_allowed(self):
......
158 204
            SupItemGroup.name == u'hg2').first()
159 205

  
160 206
        # Récupération des groupes d'hôtes
207
        # accessibles à l'utilisateur 'manager'
208
        response = self.app.post(
209
            '/rpc/hostgroups?maingroupid=%s' % (mainhostgroup.idgroup, ), {
210
            }, extra_environ={'REMOTE_USER': 'manager'})
211
        json = response.json
212

  
213
        # On s'assure que la liste de groupes d'hôtes retournée
214
        # contient bien 'No subgroup', 'hg1', et 'hg2'
215
        assert_equal(
216
            json, {"items": [
217
                ['No subgroup', unicode(mainhostgroup.idgroup)],
218
                [hostgroup1.name, unicode(hostgroup1.idgroup)],
219
                [hostgroup2.name, unicode(hostgroup2.idgroup)],
220
            ]}
221
        )
222

  
223
        # Récupération des groupes d'hôtes
161 224
        # accessibles à l'utilisateur 'poweruser'
162 225
        response = self.app.post(
163 226
            '/rpc/hostgroups?maingroupid=%s' % (mainhostgroup.idgroup, ), {
......
212 275
                % (mainhostgroup.idgroup, )]]}
213 276
        )
214 277

  
278
    def test_get_host_groups_as_anonymous(self):
279
        """
280
        Récupération des groupes d'hôtes secondaires en tant qu'anonyme
281
        """
282

  
283
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
284
        mainhostgroup = DBSession.query(SupItemGroup).filter(
285
            SupItemGroup.name == u'mhg').first()
286

  
287
        # Récupération des groupes d'hôtes par un
288
        # utilisateur anonyme : le contrôleur doit
289
        # retourner une erreur 401 (HTTPUnauthorized)
290
        self.app.post(
291
            '/rpc/hostgroups?maingroupid=%s' % (mainhostgroup.idgroup, ), {
292
            }, status=401)
293

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

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

  
227 306
        # On s'assure que la liste de groupes d'hôtes
......
245 324
        hostgroup1 = DBSession.query(SupItemGroup).filter(
246 325
            SupItemGroup.name == u'hg1').first()
247 326

  
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 327
        # Récupération des hôtes du groupe 'mhg'
253
        # accessibles à l'utilisateur 'poweruser'
328
        # accessibles à l'utilisateur 'manager'
254 329
        response = self.app.post(
255 330
            '/rpc/hosts?othergroupid=%s' % (mainhostgroup.idgroup, ), {
256
            }, extra_environ={'REMOTE_USER': 'poweruser'})
331
            }, extra_environ={'REMOTE_USER': 'manager'})
257 332
        json = response.json
258 333

  
259 334
        # On s'assure que la liste d'hôtes retournée contient bien 'host1'
......
264 339
        )
265 340

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

  
273 348
        # On s'assure que la liste d'hotes retournée contient bien 'host2'
......
277 352
            ]}
278 353
        )
279 354

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

  
362
        # On s'assure que la liste d'hôtes retournée contient bien 'host1'
363
        assert_equal(
364
            json, {"items": [
365
                ['host1', unicode(mainhostgroup.idgroup)],
366
            ]}
367
        )
368

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

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

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

  
301
        # On s'assure que la liste d'hotes retournée contient bien 'host3'
390
        # On s'assure que la liste d'hôtes retournée contient bien 'host2'
302 391
        assert_equal(
303 392
            json, {"items": [
304
                ['host3', unicode(hostgroup1.idgroup)],
393
                ['host2', unicode(hostgroup1.idgroup)],
305 394
            ]}
306 395
        )
307 396

  
......
375 464
            json, {"items": []}
376 465
        )
377 466

  
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
467
    def test_get_hosts_as_anonymous(self):
468
        """
469
        Récupération des d'hôtes en tant qu'anonyme
470
        """
384 471

  
385
        # On s'assure que la liste d'hôtes retournée est vide
386
        assert_equal(
387
            json, {"items": []}
388
        )
472
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
473
        mainhostgroup = DBSession.query(SupItemGroup).filter(
474
            SupItemGroup.name == u'mhg').first()
475

  
476
        # Récupération des hôtes du groupe 'mhg' par
477
        # un utilisateur anonyme : le contrôleur doit
478
        # retourner une erreur 401 (HTTPUnauthorized)
479
        self.app.post(
480
            '/rpc/hosts?othergroupid=%s' % (mainhostgroup.idgroup, ), {
481
            }, status=401)
389 482

  
390 483
    def test_get_hosts_from_inexisting_secondary_group(self):
391 484
        """
......
393 486
        """
394 487

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

  
402 495
        # On s'assure que la liste retournée est vide
vigigraph/tests/functional/test_search_form.py
1
# -*- coding: utf-8 -*-
2
"""
3
Suite de tests du formulaire de recherche de VigiGraph.
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 Host, SupItemGroup, Graph, GraphGroup
11

  
12
from vigigraph.tests.functional.test_host_selection_form import populateDB
13
from vigigraph.tests.functional.test_graph_selection_form import addGraphs
14

  
15

  
16
class TestSearchForm(TestController):
17
    """
18
    Teste le formulaire de recherche des
19
    hôtes et des graphes 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(TestSearchForm, self).setUp()
27

  
28
        # Ajout de données de tests dans la base
29
        (host1, host2, host3) = populateDB()
30

  
31
        # Ajout de graphes dans la base
32
        addGraphs(host1, host2, host3)
33

  
34
        # Validation des ajouts dans la base
35
        DBSession.flush()
36
        transaction.commit()
37

  
38
    def test_select_host_when_allowed(self):
39
        """
40
        Résultats de la recherche sur un hôte avec les bons droits
41
        """
42

  
43
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
44
        mainhostgroup = DBSession.query(SupItemGroup).filter(
45
            SupItemGroup.name == u'mhg').first()
46

  
47
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
48
        hostgroup1 = DBSession.query(SupItemGroup).filter(
49
            SupItemGroup.name == u'hg1').first()
50

  
51
        # Récupération de l'hôte 'host1' dans la base de données
52
        host1 = DBSession.query(Host).filter(
53
            Host.name == u'host1').first()
54

  
55
        # Récupération de l'hôte 'host2' dans la base de données
56
        host2 = DBSession.query(Host).filter(
57
            Host.name == u'host2').first()
58

  
59
        # Récupération des résultats transmis au
60
        # formulaire de sélection après une recherche sur
61
        # l'hôte 'host1' pour l'utilisateur 'manager'
62
        response = self.app.post(
63
        '/rpc/selectHostAndGraph?host=%s' % (str(host1.name), ), {
64
            }, extra_environ={'REMOTE_USER': 'manager'})
65
        json = response.json
66

  
67
        # On s'assure que la liste retournée
68
        # contient bien 'mhg' et 'No subgroup'
69
        assert_equal(
70
            json, {"items": [
71
                [mainhostgroup.name, u'No subgroup'],
72
                []
73
            ]}
74
        )
75

  
76
        # Récupération des résultats transmis au
77
        # formulaire de sélection après une recherche sur
78
        # l'hôte 'host1' pour l'utilisateur 'poweruser'
79
        response = self.app.post(
80
        '/rpc/selectHostAndGraph?host=%s' % (str(host1.name), ), {
81
            }, extra_environ={'REMOTE_USER': 'poweruser'})
82
        json = response.json
83

  
84
        # On s'assure que la liste retournée
85
        # contient bien 'mhg' et 'No subgroup'
86
        assert_equal(
87
            json, {"items": [
88
                [mainhostgroup.name, u'No subgroup'],
89
                []
90
            ]}
91
        )
92

  
93
        # Récupération des résultats transmis au
94
        # formulaire de sélection après une recherche sur
95
        # l'hôte 'host2' pour l'utilisateur 'poweruser'
96
        response = self.app.post(
97
        '/rpc/selectHostAndGraph?host=%s' % (str(host2.name), ), {
98
            }, extra_environ={'REMOTE_USER': 'poweruser'})
99
        json = response.json
100

  
101
        # On s'assure que la liste retournée
102
        # contient bien 'mhg' et 'hostgroup1'
103
        assert_equal(
104
            json, {"items": [
105
                [mainhostgroup.name, hostgroup1.name],
106
                []
107
            ]}
108
        )
109

  
110
        # Récupération des résultats transmis au
111
        # formulaire de sélection après une recherche sur
112
        # l'hôte 'host2' pour l'utilisateur 'user'
113
        response = self.app.post(
114
        '/rpc/selectHostAndGraph?host=%s' % (str(host2.name), ), {
115
            }, extra_environ={'REMOTE_USER': 'user'})
116
        json = response.json
117

  
118
        # On s'assure que la liste retournée
119
        # contient bien 'mhg' et 'hostgroup1'
120
        assert_equal(
121
            json, {"items": [
122
                [mainhostgroup.name, hostgroup1.name],
123
                []
124
            ]}
125
        )
126

  
127
    def test_select_host_when_not_allowed(self):
128
        """
129
        Résultats de la recherche sur un hôte sans les droits
130
        """
131

  
132
        # Récupération de l'hôte 'host1' dans la base de données
133
        host1 = DBSession.query(Host).filter(
134
            Host.name == u'host1').first()
135

  
136
        # Récupération de l'hôte 'host3' dans la base de données
137
        host3 = DBSession.query(Host).filter(
138
            Host.name == u'host3').first()
139

  
140
        # Récupération des résultats transmis au
141
        # formulaire de sélection après une recherche sur
142
        # l'hôte 'host1' pour l'utilisateur 'user'
143
        response = self.app.post(
144
        '/rpc/selectHostAndGraph?host=%s' % (str(host1.name), ), {
145
            }, extra_environ={'REMOTE_USER': 'user'})
146
        json = response.json
147

  
148
        # On s'assure que la liste
149
        # retournée est vide
150
        assert_equal(
151
            json, {"items": [
152
                [],[]
153
            ]}
154
        )
155

  
156
        # Récupération des résultats transmis au
157
        # formulaire de sélection après une recherche sur
158
        # l'hôte 'host3' pour l'utilisateur 'user'
159
        response = self.app.post(
160
        '/rpc/selectHostAndGraph?host=%s' % (str(host3.name), ), {
161
            }, extra_environ={'REMOTE_USER': 'user'})
162
        json = response.json
163

  
164
        # On s'assure que la liste
165
        # retournée est vide
166
        assert_equal(
167
            json, {"items": [
168
                [],[]
169
            ]}
170
        )
171

  
172
        # Récupération des résultats transmis au
173
        # formulaire de sélection après une recherche sur
174
        # l'hôte 'host1' pour l'utilisateur 'visitor'
175
        response = self.app.post(
176
        '/rpc/selectHostAndGraph?host=%s' % (str(host1.name), ), {
177
            }, extra_environ={'REMOTE_USER': 'visitor'})
178
        json = response.json
179

  
180
        # On s'assure que la liste
181
        # retournée est vide
182
        assert_equal(
183
            json, {"items": [
184
                [],[]
185
            ]}
186
        )
187

  
188
        # Récupération des résultats transmis au
189
        # formulaire de sélection après une recherche sur
190
        # l'hôte 'host3' pour l'utilisateur 'visitor'
191
        response = self.app.post(
192
        '/rpc/selectHostAndGraph?host=%s' % (str(host3.name), ), {
193
            }, extra_environ={'REMOTE_USER': 'visitor'})
194
        json = response.json
195

  
196
        # On s'assure que la liste
197
        # retournée est vide
198
        assert_equal(
199
            json, {"items": [
200
                [],[]
201
            ]}
202
        )
203

  
204
    def test_select_host_as_anonymous(self):
205
        """
206
        Résultats de la recherche sur un hôte en tant qu'anonyme
207
        """
208

  
209
        # Récupération de l'hôte 'host1' dans la base de données
210
        host1 = DBSession.query(Host).filter(
211
            Host.name == u'host1').first()
212

  
213
        # Récupération des résultats transmis au
214
        # formulaire de sélection après une recherche sur
215
        # l'hôte 'host1' pour un utilisateur anonyme :
216
        # le contrôleur doit retourner une erreur 401.
217
        self.app.post(
218
            '/rpc/selectHostAndGraph?host=%s' % (str(host1.name), ), {
219
            }, status=401)
220

  
221
    def test_select_inexisting_host(self):
222
        """
223
        Résultats de la recherche sur un hôte inexistant
224
        """
225

  
226
        # Récupération des résultats transmis au
227
        # formulaire de sélection après une recherche sur
228
        # un hôte inexistant pour l'utilisateur 'manager'
229
        response = self.app.post(
230
        '/rpc/selectHostAndGraph?host=hote_totalement_inexistant', {
231
            }, extra_environ={'REMOTE_USER': 'manager'})
232
        json = response.json
233

  
234
        # On s'assure que la liste
235
        # retournée est vide
236
        assert_equal(
237
            json, {"items": [
238
                [], []
239
            ]}
240
        )
241

  
242
    def test_select_graph_without_a_host(self):
243
        """
244
        Résultats de la recherche sur un graphe sans préciser d'hôte
245
        """
246

  
247
        # Récupération du graphe 'graph1' dans la base de données
248
        graph1 = DBSession.query(Graph).filter(
249
            Graph.name == u'graph1').first()
250

  
251
        # On s'assure qu'une erreur 412 est retournée lorsque
252
        # l'on recherche un graphe sans préciser d'hôte.
253
        self.app.post(
254
        '/rpc/selectHostAndGraph?host=%s' % (str(graph1.name), ), {
255
            }, extra_environ={'REMOTE_USER': 'manager'}, status=412)
256

  
257
    def test_select_graph_with_an_erroneous_host(self):
258
        """
259
        Résultats de la recherche sur un graphe en précisant un hôte erroné
260
        """
261

  
262
        # Récupération du graphe 'graph1' dans la base de données
263
        graph1 = DBSession.query(Graph).filter(
264
            Graph.name == u'graph1').first()
265

  
266
        # On s'assure qu'une liste vide est retournée lorsque
267
        # l'on recherche un graphe en précisant un hôte erroné.
268
        response = self.app.post(
269
        '/rpc/selectHostAndGraph?host=%s' % (str(graph1.name), ), {
270
            }, extra_environ={'REMOTE_USER': 'manager'})
271
        json = response.json
272

  
273
        assert_equal(
274
            json, {"items": [
275
                [], []
276
            ]}
277
        )
278

  
279
    def test_select_graph_when_allowed(self):
280
        """
281
        Résultats de la recherche sur un graphe avec les bons droits
282
        """
283

  
284
        # Récupération du groupe d'hôtes 'mhg' dans la base de données
285
        mainhostgroup = DBSession.query(SupItemGroup).filter(
286
            SupItemGroup.name == u'mhg').first()
287

  
288
        # Récupération du groupe d'hôtes 'hg1' dans la base de données
289
        hostgroup1 = DBSession.query(SupItemGroup).filter(
290
            SupItemGroup.name == u'hg1').first()
291

  
292
        # Récupération de l'hôte 'host1' dans la base de données
293
        host1 = DBSession.query(Host).filter(
294
            Host.name == u'host1').first()
295

  
296
        # Récupération de l'hôte 'host2' dans la base de données
297
        host2 = DBSession.query(Host).filter(
298
            Host.name == u'host2').first()
299

  
300
        # Récupération du groupe de graphes
301
        # 'graphgroup1' dans la base de données
302
        graphgroup1 = DBSession.query(GraphGroup).filter(
303
            GraphGroup.name == u'graphgroup1').first()
304

  
305
        # Récupération du groupe de graphes
306
        # 'graphgroup2' dans la base de données
307
        graphgroup2 = DBSession.query(GraphGroup).filter(
308
            GraphGroup.name == u'graphgroup2').first()
309

  
310
        # Récupération du graphe 'graph1' dans la base de données
311
        graph1 = DBSession.query(Graph).filter(
312
            Graph.name == u'graph1').first()
313

  
314
        # Récupération du graphe 'graph2' dans la base de données
315
        graph2 = DBSession.query(Graph).filter(
316
            Graph.name == u'graph2').first()
317

  
318
        # Récupération des résultats transmis au
319
        # formulaire de sélection après une recherche sur
320
        # le graphe 'graph1' pour l'utilisateur 'manager'
321
        response = self.app.post(
322
        '/rpc/selectHostAndGraph?host=%s&graph=%s' %
323
            (str(host1.name), str(graph1.name)), {
324
            }, extra_environ={'REMOTE_USER': 'manager'})
325
        json = response.json
326

  
327
        # On s'assure que la liste retournée
328
        # est conforme à celle attendue
329
        assert_equal(
330
            json, {"items": [
331
                [mainhostgroup.name, u'No subgroup'],
332
                [graphgroup1.name]
333
            ]}
334
        )
335

  
336
        # Récupération des résultats transmis au
337
        # formulaire de sélection après une recherche sur
338
        # le graphe 'graph1' pour l'utilisateur 'poweruser'
339
        response = self.app.post(
340
        '/rpc/selectHostAndGraph?host=%s&graph=%s' %
341
            (str(host1.name), str(graph1.name)), {
342
            }, extra_environ={'REMOTE_USER': 'poweruser'})
343
        json = response.json
344

  
345
        # On s'assure que la liste retournée
346
        # est conforme à celle attendue
347
        assert_equal(
348
            json, {"items": [
349
                [mainhostgroup.name, u'No subgroup'],
350
                [graphgroup1.name]
351
            ]}
352
        )
353

  
354
        # Récupération des résultats transmis au
355
        # formulaire de sélection après une recherche sur
356
        # le graphe 'graph2' pour l'utilisateur 'poweruser'
357
        response = self.app.post(
358
        '/rpc/selectHostAndGraph?host=%s&graph=%s' %
359
            (str(host2.name), str(graph2.name)), {
360
            }, extra_environ={'REMOTE_USER': 'poweruser'})
361
        json = response.json
362

  
363
        # On s'assure que la liste retournée
364
        # est conforme à celle attendue
365
        assert_equal(
366
            json, {"items": [
367
                [mainhostgroup.name, hostgroup1.name],
368
                [graphgroup2.name]
369
            ]}
370
        )
371

  
372
        # Récupération des résultats transmis au
373
        # formulaire de sélection après une recherche sur
374
        # le graphe 'graph2' pour l'utilisateur 'user'
375
        response = self.app.post(
376
        '/rpc/selectHostAndGraph?host=%s&graph=%s' %
377
            (str(host2.name), str(graph2.name)), {
378
            }, extra_environ={'REMOTE_USER': 'user'})
379
        json = response.json
380

  
381
        # On s'assure que la liste retournée
382
        # est conforme à celle attendue
383
        assert_equal(
384
            json, {"items": [
385
                [mainhostgroup.name, hostgroup1.name],
386
                [graphgroup2.name]
387
            ]}
388
        )
389

  
390
    def test_select_graph_when_not_allowed(self):
391
        """
392
        Résultats de la recherche sur un graphe sans les droits
393
        """
394

  
395
        # Récupération de l'hôte 'host1' dans la base de données
396
        host1 = DBSession.query(Host).filter(
397
            Host.name == u'host1').first()
398

  
399
        # Récupération de l'hôte 'host3' dans la base de données
400
        host3 = DBSession.query(Host).filter(
401
            Host.name == u'host3').first()
402

  
403
        # Récupération du graphe 'graph1' dans la base de données
404
        graph1 = DBSession.query(Graph).filter(
405
            Graph.name == u'graph1').first()
406

  
407
        # Récupération du graphe 'graph3' dans la base de données
408
        graph3 = DBSession.query(Graph).filter(
409
            Graph.name == u'graph1').first()
410

  
411
        # Récupération des résultats transmis au
412
        # formulaire de sélection après une recherche sur
413
        # le graphe 'graph1' pour l'utilisateur 'user'
414
        response = self.app.post(
415
        '/rpc/selectHostAndGraph?host=%s&graph=%s' %
416
            (str(host1.name), str(graph1.name)), {
417
            }, extra_environ={'REMOTE_USER': 'user'})
418
        json = response.json
419

  
420
        # On s'assure que la liste
421
        # retournée est vide
422
        assert_equal(
423
            json, {"items": [
424
                [], []
425
            ]}
426
        )
427

  
428
        # Récupération des résultats transmis au
429
        # formulaire de sélection après une recherche sur
430
        # le graphe 'graph3' pour l'utilisateur 'user'
431
        response = self.app.post(
432
        '/rpc/selectHostAndGraph?host=%s&graph=%s' %
433
            (str(host3.name), str(graph3.name)), {
434
            }, extra_environ={'REMOTE_USER': 'user'})
435
        json = response.json
436

  
437
        # On s'assure que la liste
438
        # retournée est vide
439
        assert_equal(
440
            json, {"items": [
441
                [], []
442
            ]}
443
        )
444

  
445
        # Récupération des résultats transmis au
446
        # formulaire de sélection après une recherche sur
447
        # le graphe 'graph1' pour l'utilisateur 'visitor'
448
        response = self.app.post(
449
        '/rpc/selectHostAndGraph?host=%s&graph=%s' %
450
            (str(host1.name), str(graph1.name)), {
451
            }, extra_environ={'REMOTE_USER': 'visitor'})
452
        json = response.json
453

  
454
        # On s'assure que la liste
455
        # retournée est vide
456
        assert_equal(
457
            json, {"items": [
458
                [], []
459
            ]}
460
        )
461

  
462
        # Récupération des résultats transmis au
463
        # formulaire de sélection après une recherche sur
464
        # le graphe 'graph3' pour l'utilisateur 'visitor'
465
        response = self.app.post(
466
        '/rpc/selectHostAndGraph?host=%s&graph=s' %
467
            (str(host3.name), str(graph3.name)), {
468
            }, extra_environ={'REMOTE_USER': 'visitor'})
469
        json = response.json
470

  
471
        # On s'assure que la liste
472
        # retournée est vide
473
        assert_equal(
474
            json, {"items": [
475
                [], []
476
            ]}
477
        )
478

  
479
    def test_select_graph_as_anonymous(self):
480
        """
481
        Résultats de la recherche sur un graphe en tant qu'anonyme
482
        """
483

  
484
        # Récupération de l'hôte 'host1' dans la base de données
485
        host1 = DBSession.query(Host).filter(
486
            Host.name == u'host1').first()
487

  
488
        # Récupération du graphe 'graph1' dans la base de données
489
        graph1 = DBSession.query(Graph).filter(
490
            Graph.name == u'graph1').first()
491

  
492
        # Récupération des résultats transmis au
493
        # formulaire de sélection après une recherche sur
494
        # le graphe 'graph1' pour un utilisateur anonyme :
495
        # le contrôleur doit retourner une erreur 401
496
        self.app.post(
497
            '/rpc/selectHostAndGraph?host=%s&graph=%s' %
498
            (str(host1.name), str(graph1.name)), {
499
            }, status=401)
500

  
501
    def test_select_inexisting_graph(self):
502
        """
503
        Résultats de la recherche sur un graphe inexistant
504
        """
505

  
506
        # Récupération de l'hôte 'host1' dans la base de données
507
        host1 = DBSession.query(Host).filter(
508
            Host.name == u'host1').first()
509

  
510
        # Récupération des résultats transmis au
511
        # formulaire de sélection après une recherche sur
512
        # un graphe inexistant pour l'utilisateur 'manager'
513
        response = self.app.post(
514
        '/rpc/selectHostAndGraph?host=%sgraph=graphe_totalement_inexistant' %
515
            (str(host1.name), ), {
516
            }, extra_environ={'REMOTE_USER': 'manager'})
517
        json = response.json
518

  
519
        # On s'assure que la liste
520
        # retournée est vide
521
        assert_equal(
522
            json, {"items": [
523
                [], []
524
            ]}
525
        )
526

  
527

  

Also available in: Unified diff