hobo/tests/test_maintenance.py

87 lines
3.6 KiB
Python

from unittest import mock
from test_manager import login
from hobo.environment.models import Variable
from hobo.environment.utils import get_setting_variable
from hobo.maintenance.management.commands.disable_maintenance_page import Command
def test_maintenance_middleware(app, admin_user, db, monkeypatch, settings):
app = login(app)
resp = app.get('/')
assert resp.status_code == 200
settings.MAINTENANCE_PAGE = True
resp = app.get('/', status=503)
assert 'This site is currently unavailable.' in resp.text
# check custom maintenance message
settings.MAINTENANCE_PAGE_MESSAGE = 'foobar'
resp = app.get('/', status=503)
assert 'foobar' in resp.text
settings.MAINTENANCE_PASS_THROUGH_IPS = ['127.0.0.1']
resp = app.get('/')
assert resp.status_code == 200
settings.MAINTENANCE_PASS_THROUGH_IPS = []
resp = app.get('/', status=503)
settings.MAINTENANCE_PASS_THROUGH_HEADER = 'X-Entrouvert'
resp = app.get('/', headers={'X-Entrouvert': 'yes'})
assert resp.status_code == 200
def test_manage(app, admin_user, settings):
assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE').count() == 0
assert Variable.objects.filter(name='SETTING_MAINTENANCE_MESSAGE').count() == 0
assert Variable.objects.filter(name='SETTING_MAINTENANCE_PASS_THROUGH_HEADER').count() == 0
assert Variable.objects.filter(name='TENANT_DISABLE_CRON_JOBS').count() == 0
assert not getattr(settings, 'MAINTENANCE_PASS_THROUGH_IPS', [])
login(app)
resp = app.get('/')
assert 'Maintenance' not in resp.text
settings.MAINTENANCE_PASS_THROUGH_IPS = ['127.0.0.1']
resp = app.get('/')
assert 'Maintenance' in resp.text
resp = app.get('/maintenance/')
resp.form.set('maintenance_page', True)
resp.form.set('maintenance_page_message', 'Foo')
resp.form.set('maintenance_pass_trough_header', 'X-Entrouvert')
resp.form.set('disable_cron', True)
resp = resp.form.submit().follow()
assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE').get().value == 'true'
assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE_MESSAGE').get().value == 'Foo'
assert (
Variable.objects.filter(name='SETTING_MAINTENANCE_PASS_THROUGH_HEADER').get().value == 'X-Entrouvert'
)
assert Variable.objects.filter(name='SETTING_TENANT_DISABLE_CRON_JOBS').get().value == 'true'
resp.form.set('maintenance_page', False)
resp.form.set('maintenance_page_message', '')
resp.form.set('maintenance_pass_trough_header', '')
resp.form.set('disable_cron', False)
resp = resp.form.submit().follow()
assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE').get().value == 'false'
assert Variable.objects.filter(name='SETTING_MAINTENANCE_PAGE_MESSAGE').get().value == ''
assert Variable.objects.filter(name='SETTING_MAINTENANCE_PASS_THROUGH_HEADER').get().value == ''
assert Variable.objects.filter(name='SETTING_TENANT_DISABLE_CRON_JOBS').get().value == 'false'
def test_disable_maintenance_page_command(db):
maintenance_page_variable = get_setting_variable('MAINTENANCE_PAGE')
assert not bool(maintenance_page_variable.json)
command = Command()
command.handle()
maintenance_page_variable = get_setting_variable('MAINTENANCE_PAGE')
assert not bool(maintenance_page_variable.json)
maintenance_page_variable.json = True
maintenance_page_variable.save()
assert bool(maintenance_page_variable.json)
command.handle()
maintenance_page_variable = get_setting_variable('MAINTENANCE_PAGE')
assert not bool(maintenance_page_variable.json)