chrono/tests/manager/test_absence_reason.py

214 lines
7.6 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import pytest
from django.contrib.auth.models import Group, User
from chrono.agendas.models import AbsenceReason, AbsenceReasonGroup, Agenda
from .test_all import login
pytestmark = pytest.mark.django_db
@pytest.fixture
def manager_user():
managers_group, _ = Group.objects.get_or_create(name='Managers')
try:
user = User.objects.get(username='manager')
except User.DoesNotExist:
user = User.objects.create_user('manager', password='manager')
user.groups.set([managers_group])
return user
@pytest.fixture
def admin_user():
try:
user = User.objects.get(username='admin')
except User.DoesNotExist:
user = User.objects.create_superuser('admin', email=None, password='admin')
return user
@pytest.fixture
def agenda_with_restrictions(manager_user):
agenda = Agenda(label=u'Foo Bar')
agenda.view_role = manager_user.groups.all()[0]
agenda.save()
return agenda
def test_list_reasons_as_manager(app, manager_user, agenda_with_restrictions):
app = login(app, username='manager', password='manager')
app.get('/manage/absence-reasons/', status=403)
resp = app.get('/manage/')
assert 'Absence reasons' not in resp.text
def test_add_group(app, admin_user):
app = login(app)
resp = app.get('/manage/')
resp = resp.click('Absence reasons')
resp = resp.click('New group')
resp.form['label'] = 'Foo bar'
resp = resp.form.submit()
group = AbsenceReasonGroup.objects.latest('pk')
assert resp.location.endswith('/manage/absence-reasons/')
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/absence-reason/group/add/', status=403)
def test_edit_group(app, admin_user):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
app = login(app)
resp = app.get('/manage/absence-reasons/')
resp = resp.click(href='/manage/absence-reason/group/%s/edit/' % group.pk)
resp.form['label'] = 'Foo bar baz'
resp.form['slug'] = 'baz'
resp = resp.form.submit()
assert resp.location.endswith('/manage/absence-reasons/')
group.refresh_from_db()
assert group.label == 'Foo bar baz'
assert group.slug == 'baz'
def test_edit_group_as_manager(app, manager_user, agenda_with_restrictions):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
app = login(app, username='manager', password='manager')
app.get('/manage/absence-reason/group/%s/edit/' % group.pk, status=403)
def test_delete_group(app, admin_user):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
AbsenceReason.objects.create(label='Foo reason', group=group)
app = login(app)
resp = app.get('/manage/absence-reasons/')
resp = resp.click(href='/manage/absence-reason/group/%s/delete/' % group.pk)
resp = resp.form.submit()
assert resp.location.endswith('/manage/absence-reasons/')
assert AbsenceReasonGroup.objects.exists() is False
assert AbsenceReason.objects.exists() is False
def test_delete_group_as_manager(app, manager_user, agenda_with_restrictions):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
app = login(app, username='manager', password='manager')
app.get('/manage/absence-reason/group/%s/delete/' % group.pk, status=403)
def test_add_reason(app, admin_user):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
app = login(app)
resp = app.get('/manage/')
resp = resp.click('Absence reasons')
resp = resp.click('Add an absence reason')
resp.form['label'] = 'Foo reason'
resp = resp.form.submit()
reason = AbsenceReason.objects.latest('pk')
assert resp.location.endswith('/manage/absence-reasons/')
assert reason.label == 'Foo reason'
assert reason.group == group
def test_add_reason_as_manager(app, manager_user, agenda_with_restrictions):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
app = login(app, username='manager', password='manager')
app.get('/manage/absence-reason/group/%s/add/' % group.pk, status=403)
def test_edit_reason(app, admin_user):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
reason = AbsenceReason.objects.create(label='Foo reason', group=group)
app = login(app)
resp = app.get('/manage/absence-reasons/')
resp = resp.click(href='/manage/absence-reason/group/%s/%s/edit/' % (group.pk, reason.pk))
resp.form['label'] = 'Foo bar reason'
resp = resp.form.submit()
assert resp.location.endswith('/manage/absence-reasons/')
reason.refresh_from_db()
assert reason.label == 'Foo bar reason'
group2 = AbsenceReasonGroup.objects.create(label='Foo bar baz')
app.get('/manage/absence-reason/group/%s/%s/edit/' % (group2.pk, reason.pk), status=404)
def test_edit_reason_as_manager(app, manager_user, agenda_with_restrictions):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
reason = AbsenceReason.objects.create(label='Foo reason', group=group)
app = login(app, username='manager', password='manager')
app.get('/manage/absence-reason/group/%s/%s/edit/' % (group.pk, reason.pk), status=403)
def test_delete_reason(app, admin_user):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
reason = AbsenceReason.objects.create(label='Foo reason', group=group)
app = login(app)
resp = app.get('/manage/absence-reasons/')
resp = resp.click(href='/manage/absence-reason/group/%s/%s/delete/' % (group.pk, reason.pk))
resp = resp.form.submit()
assert resp.location.endswith('/manage/absence-reasons/')
assert AbsenceReasonGroup.objects.exists() is True
assert AbsenceReason.objects.exists() is False
group2 = AbsenceReasonGroup.objects.create(label='Foo bar baz')
app.get('/manage/absence-reason/group/%s/%s/delete/' % (group2.pk, reason.pk), status=404)
def test_delete_reason_as_manager(app, manager_user, agenda_with_restrictions):
group = AbsenceReasonGroup.objects.create(label='Foo bar')
reason = AbsenceReason.objects.create(label='Foo reason', group=group)
app = login(app, username='manager', password='manager')
app.get('/manage/absence-reason/group/%s/%s/delete/' % (group.pk, reason.pk), status=403)
def test_meetings_agenda_group(app, admin_user):
agenda = Agenda.objects.create(label=u'Foo bar', kind='meetings')
AbsenceReasonGroup.objects.create(label='Foo bar')
app = login(app)
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
assert 'has_absence_reasons' not in resp.context
# not for meetings agenda
app.get('/manage/agendas/%s/absence-reasons' % agenda.pk, status=404)
def test_agenda_group(app, admin_user):
agenda = Agenda.objects.create(label=u'Foo bar', kind='events')
app = login(app)
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
assert 'has_absence_reasons' in resp.context
assert resp.context['has_absence_reasons'] is False
assert 'Absence reasons' not in resp
assert '/manage/agendas/%s/absence-reasons' % agenda.pk not in resp
group = AbsenceReasonGroup.objects.create(label='Foo bar')
resp = app.get('/manage/agendas/%s/settings' % agenda.pk)
assert 'has_absence_reasons' in resp.context
assert resp.context['has_absence_reasons'] is True
assert 'Absence reasons' in resp
assert 'No absence reasons configured for this agenda.' in resp
resp = resp.click(href='/manage/agendas/%s/absence-reasons' % agenda.pk)
resp.form['absence_reasons_group'] = group.pk
resp = resp.form.submit().follow()
assert 'Absence reasons group: Foo bar' in resp