255 lines
10 KiB
Python
255 lines
10 KiB
Python
import pytest
|
|
from django.utils.timezone import now
|
|
|
|
from chrono.agendas.models import Agenda, Booking, CheckType, CheckTypeGroup, Desk, Event
|
|
from tests.utils import login
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
@pytest.fixture
|
|
def agenda_with_restrictions(manager_user):
|
|
agenda = Agenda(label='Foo Bar')
|
|
agenda.view_role = manager_user.groups.all()[0]
|
|
agenda.save()
|
|
return agenda
|
|
|
|
|
|
def test_list_types_as_manager(app, manager_user, agenda_with_restrictions):
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/check-types/', status=403)
|
|
|
|
resp = app.get('/manage/')
|
|
assert 'Check types' not in resp.text
|
|
|
|
|
|
def test_add_group(app, admin_user):
|
|
app = login(app)
|
|
resp = app.get('/manage/')
|
|
resp = resp.click('Check types')
|
|
resp = resp.click('New group')
|
|
resp.form['label'] = 'Foo bar'
|
|
resp = resp.form.submit()
|
|
group = CheckTypeGroup.objects.latest('pk')
|
|
assert resp.location.endswith('/manage/check-types/')
|
|
assert group.label == 'Foo bar'
|
|
assert group.slug == 'foo-bar'
|
|
|
|
|
|
def test_add_group_as_manager(app, manager_user, agenda_with_restrictions):
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/check-type/group/add/', status=403)
|
|
|
|
|
|
def test_edit_group(app, admin_user):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
group2 = CheckTypeGroup.objects.create(label='baz')
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/check-types/')
|
|
resp = resp.click(href='/manage/check-type/group/%s/edit/' % group.pk)
|
|
resp.form['label'] = 'Foo bar baz'
|
|
resp.form['slug'] = group2.slug
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['slug'] == ['Check type group with this Identifier already exists.']
|
|
|
|
resp.form['slug'] = 'baz2'
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/check-types/')
|
|
group.refresh_from_db()
|
|
assert group.label == 'Foo bar baz'
|
|
assert group.slug == 'baz2'
|
|
|
|
|
|
def test_edit_group_as_manager(app, manager_user, agenda_with_restrictions):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/check-type/group/%s/edit/' % group.pk, status=403)
|
|
|
|
|
|
def test_delete_group(app, admin_user):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
CheckType.objects.create(label='Foo reason', group=group)
|
|
agenda = Agenda.objects.create(label='Foo bar')
|
|
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)
|
|
Booking.objects.create(event=event)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/check-types/')
|
|
resp = resp.click(href='/manage/check-type/group/%s/delete/' % group.pk)
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/check-types/')
|
|
assert CheckTypeGroup.objects.exists() is False
|
|
assert CheckType.objects.exists() is False
|
|
|
|
|
|
def test_delete_group_as_manager(app, manager_user, agenda_with_restrictions):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/check-type/group/%s/delete/' % group.pk, status=403)
|
|
|
|
|
|
def test_add_check_type(app, admin_user):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/')
|
|
resp = resp.click('Check types')
|
|
resp = resp.click('Add a check type')
|
|
resp.form['label'] = 'Foo reason'
|
|
assert 'slug' not in resp.context['form'].fields
|
|
assert 'disabled' not in resp.context['form'].fields
|
|
resp = resp.form.submit()
|
|
check_type = CheckType.objects.latest('pk')
|
|
assert resp.location.endswith('/manage/check-types/')
|
|
assert check_type.label == 'Foo reason'
|
|
assert check_type.group == group
|
|
assert check_type.slug == 'foo-reason'
|
|
assert check_type.kind == 'absence'
|
|
|
|
resp = app.get('/manage/check-type/group/%s/add/' % group.pk)
|
|
resp.form['label'] = 'Foo reason'
|
|
resp.form['kind'] = 'presence'
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/check-types/')
|
|
check_type = CheckType.objects.latest('pk')
|
|
assert check_type.label == 'Foo reason'
|
|
assert check_type.slug == 'foo-reason-1'
|
|
assert check_type.kind == 'presence'
|
|
|
|
|
|
def test_add_check_type_as_manager(app, manager_user, agenda_with_restrictions):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/check-type/group/%s/add/' % group.pk, status=403)
|
|
|
|
|
|
def test_edit_check_type(app, admin_user):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
check_type = CheckType.objects.create(label='Foo reason', group=group, kind='presence')
|
|
check_type2 = CheckType.objects.create(label='Baz', group=group)
|
|
group2 = CheckTypeGroup.objects.create(label='Foo bar')
|
|
check_type3 = CheckType.objects.create(label='Foo bar reason', group=group2)
|
|
agenda = Agenda.objects.create(label='Foo bar')
|
|
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)
|
|
Booking.objects.create(event=event)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/check-types/')
|
|
resp = resp.click(href='/manage/check-type/group/%s/%s/edit/' % (group.pk, check_type.pk))
|
|
assert 'This check type is set on some existing bookings, modify it with caution.' not in resp
|
|
resp.form['label'] = 'Foo bar reason'
|
|
resp.form['slug'] = check_type2.slug
|
|
resp.form['disabled'] = True
|
|
assert 'kind' not in resp.context['form'].fields
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['slug'] == ['Another check type exists with the same identifier.']
|
|
|
|
resp.form['slug'] = check_type3.slug
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/check-types/')
|
|
check_type.refresh_from_db()
|
|
assert check_type.label == 'Foo bar reason'
|
|
assert check_type.slug == 'foo-bar-reason'
|
|
assert check_type.kind == 'presence'
|
|
assert check_type.disabled is True
|
|
|
|
# check_type is used
|
|
Booking.objects.update(user_check_type_slug=check_type.slug)
|
|
resp = app.get('/manage/check-type/group/%s/%s/edit/' % (group.pk, check_type.pk))
|
|
assert 'This check type is set on some existing bookings, modify it with caution.' in resp
|
|
|
|
app.get('/manage/check-type/group/%s/%s/edit/' % (group2.pk, check_type.pk), status=404)
|
|
|
|
|
|
def test_edit_check_type_as_manager(app, manager_user, agenda_with_restrictions):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
check_type = CheckType.objects.create(label='Foo reason', group=group)
|
|
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/check-type/group/%s/%s/edit/' % (group.pk, check_type.pk), status=403)
|
|
|
|
|
|
def test_delete_check_type(app, admin_user):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
check_type = CheckType.objects.create(label='Foo reason', group=group)
|
|
agenda = Agenda.objects.create(label='Foo bar')
|
|
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)
|
|
Booking.objects.create(event=event)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/check-types/')
|
|
resp = resp.click(href='/manage/check-type/group/%s/%s/delete/' % (group.pk, check_type.pk))
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/check-types/')
|
|
assert CheckTypeGroup.objects.exists() is True
|
|
assert CheckType.objects.exists() is False
|
|
|
|
# check_type is used
|
|
check_type = CheckType.objects.create(label='Foo reason', group=group)
|
|
Booking.objects.update(user_check_type_slug=check_type.slug)
|
|
resp = app.get('/manage/check-type/group/%s/%s/delete/' % (group.pk, check_type.pk))
|
|
assert 'Can not delete this check type: it is set on some existing bookings.' in resp
|
|
resp.form.submit(status=404)
|
|
|
|
group2 = CheckTypeGroup.objects.create(label='Foo bar baz')
|
|
app.get('/manage/check-type/group/%s/%s/delete/' % (group2.pk, check_type.pk), status=404)
|
|
|
|
|
|
def test_delete_check_type_as_manager(app, manager_user, agenda_with_restrictions):
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
check_type = CheckType.objects.create(label='Foo reason', group=group)
|
|
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/check-type/group/%s/%s/delete/' % (group.pk, check_type.pk), status=403)
|
|
|
|
|
|
def test_meetings_agenda_group(app, admin_user):
|
|
agenda = Agenda.objects.create(label='Foo bar', kind='meetings')
|
|
CheckTypeGroup.objects.create(label='Foo bar')
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
|
|
assert 'has_check_types' not in resp.context
|
|
|
|
# not for meetings agenda
|
|
app.get('/manage/agendas/%s/check-types' % agenda.pk, status=404)
|
|
|
|
|
|
def test_agenda_group(app, admin_user):
|
|
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
|
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
|
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)
|
|
booking = Booking.objects.create(event=event)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
|
|
assert 'has_check_types' in resp.context
|
|
assert resp.context['has_check_types'] is False
|
|
assert 'No check types configured for this agenda.' not in resp
|
|
assert '/manage/agendas/%s/check-types' % agenda.pk not in resp
|
|
resp = resp.click(href='/manage/agendas/%s/check-options' % agenda.pk)
|
|
assert 'check_type_group' not in resp.context['form'].fields
|
|
|
|
group = CheckTypeGroup.objects.create(label='Foo bar')
|
|
check_type = CheckType.objects.create(label='Foo reason', group=group)
|
|
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
|
|
assert 'has_check_types' in resp.context
|
|
assert resp.context['has_check_types'] is True
|
|
assert 'No check types configured for this agenda.' in resp
|
|
resp = resp.click(href='/manage/agendas/%s/check-options' % agenda.pk)
|
|
resp.form['check_type_group'] = group.pk
|
|
resp = resp.form.submit().follow()
|
|
agenda.refresh_from_db()
|
|
assert agenda.check_type_group == group
|
|
assert 'Check type group: Foo bar' in resp
|
|
|
|
# cannot change check_type group booking with non null check_type exists
|
|
booking.user_check_type_slug = check_type.slug
|
|
booking.save()
|
|
resp = app.get('/manage/agendas/%s/check-options' % agenda.pk)
|
|
assert 'check_type_group' not in resp.context['form'].fields
|