Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_misc.py @ 6f6efdcd

History | View | Annotate | Download (5.41 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 Host, Permission, \
13
                                    Event, CorrEvent, StateName, \
14
                                    User, UserGroup, DataPermission
15
from vigilo.models.demo.functions import *
16

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

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

    
35
    hostgroup = add_supitemgroup(name=u'foo')
36
    hostgroup.supitems.append(host)
37

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

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

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

    
70

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

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

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

    
100
        # Il doit y avoir 1 seule ligne de résultats.
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), 1)
104

    
105
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
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
    def test_search_by_trouble_ticket(self):
111
        """Teste la recherche sur le ticket d'incident."""
112
        insert_deps()
113
        transaction.commit()
114

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

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

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

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

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

    
144
        # Permet également de vérifier que la recherche
145
        # par date est inclusive.
146
        response = self.app.get(
147
            '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
148
                'from_date': from_date,
149
                'to_date': to_date,
150
            },
151
            extra_environ={'REMOTE_USER': 'user'})
152
        transaction.commit()
153

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

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