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 |
|
-
|