214 lines
7.6 KiB
Python
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
|