Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_misc.py @ 0bd9c069

History | View | Annotate | Download (5.43 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Teste le formulaire de recherche avec divers champs.
4
"""
5
from pylons.i18n import ugettext as _
6
from nose.tools import assert_true, assert_equal
7
from datetime import datetime
8
import transaction
9

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

    
16
def insert_deps():
17
    """Insère les dépendances nécessaires aux tests."""
18
    timestamp = datetime.now()
19

    
20
    host = Host(
21
        name=u'bar',
22
        checkhostcmd=u'',
23
        description=u'',
24
        hosttpl=u'',
25
        address=u'127.0.0.1',
26
        snmpport=42,
27
        snmpcommunity=u'public',
28
        snmpversion=u'3',
29
        weight=42,
30
    )
31
    DBSession.add(host)
32
    DBSession.flush()
33

    
34
    hostgroup = SupItemGroup(name=u'foo')
35
    hostgroup.supitems.append(host)
36
    DBSession.add(hostgroup)
37
    DBSession.flush()
38

    
39
    event = Event(
40
        supitem=host,
41
        timestamp=timestamp,
42
        current_state=StateName.statename_to_value(u'WARNING'),
43
        message=u'Hello world',
44
    )
45
    DBSession.add(event)
46
    DBSession.flush()
47

    
48
    correvent = CorrEvent(
49
        impact=42,
50
        priority=42,
51
        trouble_ticket=u'FOO BAR BAZ',
52
        status=u'None',
53
        occurrence=42,
54
        timestamp_active=timestamp,
55
        cause=event,
56
    )
57
    correvent.events.append(event)
58
    DBSession.add(correvent)
59
    DBSession.flush()
60

    
61
    # On donne l'accès aux données.
62
    usergroup = UserGroup.by_group_name(u'users')
63
    DBSession.add(DataPermission(
64
        group=hostgroup,
65
        usergroup=usergroup,
66
        access=u'r',
67
    ))
68
    DBSession.flush()
69
    return timestamp
70

    
71

    
72
class TestSearchFormMisc(TestController):
73
    """Teste la récupération d'événements selon le nom d'hôte."""
74
    def setUp(self):
75
        super(TestSearchFormMisc, self).setUp()
76
        perm = Permission.by_permission_name(u'vigiboard-access')
77
        user = User(
78
            user_name=u'user',
79
            fullname=u'',
80
            email=u'some.random@us.er',
81
        )
82
        usergroup = UserGroup(
83
            group_name=u'users',
84
        )
85
        user.usergroups.append(usergroup)
86
        usergroup.permissions.append(perm)
87
        DBSession.add(user)
88
        DBSession.add(usergroup)
89
        DBSession.flush()
90

    
91
    def test_search_by_output(self):
92
        """Teste la recherche sur le message issu de Nagios."""
93
        insert_deps()
94
        transaction.commit()
95

    
96
        # Permet également de vérifier que la recherche est
97
        # insensible à la casse.
98
        response = self.app.get('/?output=hello*',
99
            extra_environ={'REMOTE_USER': 'user'})
100

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

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

    
111
    def test_search_by_trouble_ticket(self):
112
        """Teste la recherche sur le ticket d'incident."""
113
        insert_deps()
114
        transaction.commit()
115

    
116
        # Permet également de vérifier que la recherche est
117
        # insensible à la casse.
118
        response = self.app.get('/?trouble_ticket=*bar*',
119
            extra_environ={'REMOTE_USER': 'user'})
120
        transaction.commit()
121

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

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

    
132
    def test_search_by_dates(self):
133
        """Teste la recherche par dates."""
134
        timestamp = insert_deps()
135
        transaction.commit()
136

    
137
        # Préparation des dates/heures.
138
        # On réutilise le formattage attendu par le contrôleur
139
        # (donc dépendant de la locale des tests, "fr" par défaut).
140
        # TRANSLATORS: Format de date et heure.
141
        from_date = timestamp.strftime(str(_("%Y-%m-%d %I:%M:%S %p")))
142
        # TRANSLATORS: Format de date et heure.
143
        to_date = datetime.max.strftime(str(_("%Y-%m-%d %I:%M:%S %p")))
144

    
145
        # Permet également de vérifier que la recherche
146
        # par date est inclusive.
147
        response = self.app.get(
148
            '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
149
                'from_date': from_date,
150
                'to_date': to_date,
151
            },
152
            extra_environ={'REMOTE_USER': 'user'})
153
        transaction.commit()
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
        assert_equal(len(rows), 1)
159

    
160
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
161
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
162
        print "There are %d columns in the result set" % len(cols)
163
        assert_true(len(cols) > 1)
164