Projet

Général

Profil

0002-tests-add-test-to-environment-views-and-command-4009.patch

Nicolas Roche, 24 février 2020 10:15

Télécharger (8,36 ko)

Voir les différences:

Subject: [PATCH 2/3] tests: add test to environment views and command (#40098)

 tests/test_environment.py | 176 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 175 insertions(+), 1 deletion(-)
tests/test_environment.py
1 1
# -*- coding: utf-8 -*-
2 2
import pytest
3 3

  
4 4
from django.core.exceptions import ValidationError
5
from django.core.management import call_command
5 6
from django.utils import timezone
6 7

  
7
from hobo.environment.models import AVAILABLE_SERVICES, Combo, Passerelle, ServiceBase
8
from hobo.environment.models import AVAILABLE_SERVICES, Combo, Passerelle, ServiceBase, Variable
8 9

  
9 10
from test_manager import login
10 11

  
11 12
pytestmark = pytest.mark.django_db
12 13

  
13 14

  
14 15
def test_service_id():
15 16
    for service in AVAILABLE_SERVICES:
......
117 118
    response = form.submit()
118 119
    assert 'no valid certificate' in response
119 120

  
120 121
    assert not Combo.objects.exists()
121 122
    monkeypatch.setattr(ServiceBase, 'has_valid_certificate', lambda x: True)
122 123
    form = response.form
123 124
    response = form.submit()
124 125
    assert Combo.objects.exists()
126

  
127

  
128
def test_home_view(app, admin_user):
129
    app = login(app)
130
    Combo.objects.create(base_url='https://combo.agglo.love',
131
                         template_name='...portal-user...',
132
                         slug='portal')
133
    response = app.get('/sites').follow()
134
    assert 'Add new service:' in response.text
135
    for service in AVAILABLE_SERVICES:
136
        if service.is_enabled():
137
            assert str(service._meta.verbose_name) in response.text
138
    assert response.html.find('span', {'class': 'slug'}).a.text == 'https://combo.agglo.love/'
139

  
140

  
141
def test_variables_view(app, admin_user):
142
    app = login(app)
143
    Variable.objects.create(name='foo', value='bar')
144
    response = app.get('/sites/variables')
145
    assert response.html.find('label').text == 'foo'
146
    assert response.html.find('input')['value'] == 'bar'
147
    assert 'Add new variable' in response.text
148

  
149

  
150
def test_new_variable_view(app, admin_user):
151
    app = login(app)
152
    response = app.get('/sites/new-variable')
153
    response.form['name'] = 'foo'
154
    response.form['label'] = 'bar'
155
    response.form['value'] = 'barbar'
156
    response = response.form.submit()
157
    assert response.location == '/sites/variables'
158
    assert Variable.objects.all()[0].name == 'foo'
159
    assert Variable.objects.all()[0].label == 'bar'
160
    assert Variable.objects.all()[0].value == 'barbar'
161
    response = app.get('/sites/new-variable')
162
    response.form['name'] = 'foo'
163
    response.form['label'] = 'bar'
164
    response.form['value'] = 'foofoo'
165
    response = response.form.submit()
166
    assert response.location == '/sites/variables'
167
    assert Variable.objects.all()[0].value == 'foofoo'
168

  
169

  
170
def test_new_variable_service_view(app, admin_user):
171
    app = login(app)
172
    Combo.objects.create(base_url='https://combo.agglo.love',
173
                         template_name='...portal-user...',
174
                         slug='portal')
175
    response = app.get('/sites/new-variable-combo/portal')
176
    response.form['name'] = 'foo'
177
    response.form['label'] = 'bar'
178
    response.form['value'] = 'barbar'
179
    response = response.form.submit()
180
    assert response.location == '/sites/'
181
    assert Variable.objects.all()[0].name == 'foo'
182
    assert Variable.objects.all()[0].label == 'bar'
183
    assert Variable.objects.all()[0].value == 'barbar'
184

  
185

  
186
def test_variable_update_view(app, admin_user):
187
    app = login(app)
188
    Variable.objects.create(name='foo', value='bar')
189
    response = app.get('/sites/update-variable/1')
190
    assert response.html.find('input', {'name': 'name'})['value'] == 'foo'
191
    assert response.html.find('textarea').text == '\nbar'
192
    response.form['value'] = 'barbar'
193
    response = response.form.submit()
194
    assert response.location == '/sites/variables'
195
    assert Variable.objects.all()[0].value == 'barbar'
196

  
197

  
198
def test_variable_delete_view(app, admin_user):
199
    app = login(app)
200
    Variable.objects.create(name='foo', value='bar')
201
    response = app.get('/sites/delete-variable/1')
202
    assert response.html.find('h2').text == 'Removal of "foo"'
203
    response = response.form.submit()
204
    assert response.location == '/sites/variables'
205
    assert Variable.objects.count() == 0
206

  
207

  
208
def test_service_update_view(app, admin_user):
209
    app = login(app)
210
    Combo.objects.create(base_url='https://combo.agglo.love',
211
                         template_name='...portal-user...',
212
                         slug='portal')
213
    response = app.get('/sites/save-combo/portal')
214
    response.form['title'] = 'foobar'
215
    response = response.form.submit()
216
    assert response.location == '/sites/'
217
    assert Combo.objects.all()[0].title == 'foobar'
218

  
219

  
220
def test_service_save_extra_variables(app, admin_user, settings):
221
    settings.SERVICE_EXTRA_VARIABLES = {
222
        'passerelle': ['legal_url', 'commune_url', 'domain_key'],
223
        'combo': [{'name': 'theme', 'label': 'Theme'}],
224
    }
225
    app = login(app)
226
    Combo.objects.create(base_url='https://combo.agglo.love',
227
                         template_name='...portal-user...',
228
                         slug='portal')
229
    Passerelle.objects.create(base_url='https://passerelle.agglo.love',
230
                         slug='passerelle')
231
    app.get('/sites/save-combo/portal')
232
    Variable.objects.all()[0].name = 'theme'
233
    Variable.objects.all()[0].label = 'Theme'
234
    app.get('/sites/save-passerelle/passerelle')
235
    Variable.objects.all()[0].name = 'legal_url'
236
    Variable.objects.all()[1].name = 'commune_url'
237
    Variable.objects.all()[2].name = 'domain_key'
238

  
239

  
240
def test_service_delete_view(app, admin_user):
241
    app = login(app)
242
    Combo.objects.create(base_url='https://combo.agglo.love',
243
                         template_name='...portal-user...',
244
                         title='foo',
245
                         slug='portal')
246
    response = app.get('/sites/delete-combo/portal')
247
    assert response.html.find('h2').text == 'Removal of "foo"'
248
    response = response.form.submit()
249
    assert response.location == '/sites/'
250
    assert Combo.objects.count() == 0
251

  
252

  
253
def test_check_operational_view(app, admin_user, monkeypatch):
254
    app = login(app)
255
    Combo.objects.create(base_url='https://combo.agglo.love',
256
                         template_name='...portal-user...',
257
                         slug='portal')
258
    response = app.get('/sites/check_operational/combo/portal')
259
    assert response.json['operational'] == False
260

  
261
    monkeypatch.setattr(ServiceBase, 'is_operational', lambda x: True)
262
    response = app.get('/sites/check_operational/combo/portal')
263
    assert response.json['operational'] == True
264

  
265
    response = app.get('/sites/check_operational/foo/bar', status=404)
266

  
267

  
268
def test_debug_json_view(app, admin_user):
269
    app = login(app)
270
    Variable.objects.create(name='foo', value='bar')
271
    Combo.objects.create(base_url='https://combo.agglo.love',
272
                         template_name='...portal-user...',
273
                         slug='portal')
274
    response = app.get('/sites/debug-json')
275
    assert response.json[0]['variables']['foo'] == 'bar'
276
    assert response.json[0]['services'][0]['slug'] == 'hobo'
277
    assert response.json[0]['services'][1]['slug'] == 'portal'
278

  
279

  
280
def test_check_operational_command(monkeypatch, capsys):
281
    combo = Combo.objects.create(base_url='https://combo.agglo.love',
282
                                 template_name='...portal-user...',
283
                                 title='foo',
284
                                 slug='portal')
285
    monkeypatch.setattr(ServiceBase, 'is_operational', lambda x: True)
286
    call_command('check_operational', '-v2')
287
    captured = capsys.readouterr()
288
    assert captured.out == 'foo is operational\n'
289

  
290
    monkeypatch.setattr(ServiceBase, 'is_operational', lambda x: False)
291
    combo.last_operational_success_timestamp = '2022-2-22'
292
    combo.save()
293
    call_command('check_operational', '-v2')
294
    captured = capsys.readouterr()
295
    assert captured.out.split('\n')[:-1] == [
296
        'foo is NOT operational',
297
        '  last operational success: 2022-02-22 00:00:00+00:00'
298
    ]
125
-