172 lines
6.5 KiB
Python
172 lines
6.5 KiB
Python
import pytest
|
|
|
|
from chrono.agendas.models import Agenda, EventsType
|
|
from tests.utils import login
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
def test_list_events_type_as_manager(app, manager_user):
|
|
agenda = Agenda(label='Foo Bar')
|
|
agenda.view_role = manager_user.groups.all()[0]
|
|
agenda.save()
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/events-types/', status=403)
|
|
|
|
resp = app.get('/manage/', status=200)
|
|
assert 'Events types' not in resp.text
|
|
|
|
|
|
def test_add_events_type(app, admin_user):
|
|
app = login(app)
|
|
resp = app.get('/manage/', status=200)
|
|
resp = resp.click('Events types')
|
|
resp = resp.click('New')
|
|
resp.form['label'] = 'Foo bar'
|
|
resp = resp.form.submit()
|
|
events_type = EventsType.objects.latest('pk')
|
|
assert resp.location.endswith('/manage/events-types/')
|
|
assert events_type.label == 'Foo bar'
|
|
assert events_type.slug == 'foo-bar'
|
|
assert events_type.custom_fields == []
|
|
|
|
|
|
def test_add_events_type_as_manager(app, manager_user):
|
|
agenda = Agenda(label='Foo Bar')
|
|
agenda.view_role = manager_user.groups.all()[0]
|
|
agenda.save()
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/events-type/add/', status=403)
|
|
|
|
|
|
def test_edit_events_type(app, admin_user):
|
|
events_type = EventsType.objects.create(label='Foo bar')
|
|
events_type2 = EventsType.objects.create(label='baz')
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/events-types/', status=200)
|
|
resp = resp.click(href='/manage/events-type/%s/edit/' % events_type.pk)
|
|
resp.form['label'] = 'Foo bar baz'
|
|
resp.form['slug'] = events_type2.slug
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['slug'] == ['Events type with this Identifier already exists.']
|
|
|
|
resp.form['slug'] = 'baz2'
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/events-types/')
|
|
events_type.refresh_from_db()
|
|
assert events_type.label == 'Foo bar baz'
|
|
assert events_type.slug == 'baz2'
|
|
assert events_type.custom_fields == []
|
|
|
|
|
|
def test_edit_events_type_custom_fields(app, admin_user):
|
|
events_type = EventsType.objects.create(label='Foo bar')
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/events-type/%s/edit/' % events_type.pk)
|
|
resp.form['form-0-varname'] = 'foo'
|
|
resp.form['form-0-label'] = 'Foo'
|
|
resp = resp.form.submit()
|
|
assert resp.context['formset'][0].errors['field_type'] == ['This field is required.']
|
|
resp.form['form-0-label'] = ''
|
|
resp.form['form-0-field_type'] = 'text'
|
|
resp = resp.form.submit()
|
|
assert resp.context['formset'][0].errors['label'] == ['This field is required.']
|
|
resp.form['form-0-label'] = 'Foo'
|
|
resp = resp.form.submit()
|
|
assert resp.status_code == 302
|
|
events_type.refresh_from_db()
|
|
assert events_type.custom_fields == [
|
|
{'varname': 'foo', 'label': 'Foo', 'field_type': 'text'},
|
|
]
|
|
|
|
resp = app.get('/manage/events-type/%s/edit/' % events_type.pk)
|
|
assert resp.form['form-TOTAL_FORMS'].value == '2'
|
|
assert resp.form['form-0-varname'].value == 'foo'
|
|
assert resp.form['form-0-label'].value == 'Foo'
|
|
assert resp.form['form-0-field_type'].value == 'text'
|
|
assert resp.form['form-1-varname'].value == ''
|
|
assert resp.form['form-1-label'].value == ''
|
|
assert resp.form['form-1-field_type'].value == ''
|
|
resp.form['form-0-label'] = 'Foo-bis'
|
|
resp.form['form-1-varname'] = 'blah'
|
|
resp.form['form-1-label'] = 'Blah'
|
|
resp.form['form-1-field_type'] = 'bool'
|
|
resp = resp.form.submit()
|
|
assert resp.status_code == 302
|
|
events_type.refresh_from_db()
|
|
assert events_type.custom_fields == [
|
|
{'varname': 'foo', 'label': 'Foo-bis', 'field_type': 'text'},
|
|
{'varname': 'blah', 'label': 'Blah', 'field_type': 'bool'},
|
|
]
|
|
|
|
resp = app.get('/manage/events-type/%s/edit/' % events_type.pk)
|
|
assert resp.form['form-TOTAL_FORMS'].value == '3'
|
|
assert resp.form['form-0-varname'].value == 'foo'
|
|
assert resp.form['form-0-label'].value == 'Foo-bis'
|
|
assert resp.form['form-0-field_type'].value == 'text'
|
|
assert resp.form['form-1-varname'].value == 'blah'
|
|
assert resp.form['form-1-label'].value == 'Blah'
|
|
assert resp.form['form-1-field_type'].value == 'bool'
|
|
assert resp.form['form-2-varname'].value == ''
|
|
assert resp.form['form-2-label'].value == ''
|
|
assert resp.form['form-2-field_type'].value == ''
|
|
resp.form['form-0-varname'] = 'foo'
|
|
resp.form['form-0-label'] = 'Foo'
|
|
resp.form['form-1-varname'] = ''
|
|
resp = resp.form.submit()
|
|
assert resp.status_code == 302
|
|
events_type.refresh_from_db()
|
|
assert events_type.custom_fields == [
|
|
{'varname': 'foo', 'label': 'Foo', 'field_type': 'text'},
|
|
]
|
|
|
|
# custom_fields contains anything (bad format or incomplete)
|
|
bad_values = [
|
|
{'foo': 'bar'},
|
|
['foo', 'bar'],
|
|
[['foo', 'bar']],
|
|
[{'foo': 'bar'}],
|
|
[{'varname': '', 'label': 'Foo', 'field_type': 'text'}],
|
|
[{'varname': 'foo', 'label': '', 'field_type': 'text'}],
|
|
[{'varname': 'foo', 'label': 'Foo', 'field_type': ''}],
|
|
]
|
|
for bad_value in bad_values:
|
|
events_type.custom_fields = bad_value
|
|
events_type.save()
|
|
resp = app.get('/manage/events-type/%s/edit/' % events_type.pk)
|
|
assert resp.form['form-TOTAL_FORMS'].value == '1'
|
|
assert resp.form['form-0-varname'].value == ''
|
|
assert resp.form['form-0-label'].value == ''
|
|
assert resp.form['form-0-field_type'].value == ''
|
|
|
|
|
|
def test_edit_events_type_as_manager(app, manager_user):
|
|
agenda = Agenda(label='Foo Bar')
|
|
agenda.view_role = manager_user.groups.all()[0]
|
|
agenda.save()
|
|
events_type = EventsType.objects.create(label='Foo bar')
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/events-type/%s/edit/' % events_type.pk, status=403)
|
|
|
|
|
|
def test_delete_events_type(app, admin_user):
|
|
events_type = EventsType.objects.create(label='Foo bar')
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/events-types/', status=200)
|
|
resp = resp.click(href='/manage/events-type/%s/delete/' % events_type.pk)
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/events-types/')
|
|
assert EventsType.objects.exists() is False
|
|
|
|
|
|
def test_delete_events_type_as_manager(app, manager_user):
|
|
agenda = Agenda(label='Foo Bar')
|
|
agenda.view_role = manager_user.groups.all()[0]
|
|
agenda.save()
|
|
events_type = EventsType.objects.create(label='Foo bar')
|
|
app = login(app, username='manager', password='manager')
|
|
app.get('/manage/events-type/%s/delete/' % events_type.pk, status=403)
|