From a45feb7d5ad3bb2e38c91460defbcec51fdb7b73 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?=
Date: Sun, 26 Nov 2017 11:55:09 +0100
Subject: [PATCH 1/2] general: move agenda settings to a secondary page
(#11114)
---
.../templates/chrono/manager_agenda_settings.html | 173 +++++++++++++++++++++
.../templates/chrono/manager_agenda_view.html | 144 +----------------
.../templates/chrono/manager_desk_form.html | 2 +-
.../templates/chrono/manager_event_form.html | 2 +-
.../templates/chrono/manager_import_events.html | 2 +-
.../chrono/manager_import_exceptions.html | 2 +-
.../chrono/manager_meeting_type_form.html | 2 +-
.../chrono/manager_time_period_exception_form.html | 2 +-
.../templates/chrono/manager_time_period_form.html | 2 +-
chrono/manager/urls.py | 2 +
chrono/manager/views.py | 43 +++--
tests/test_manager.py | 154 +++++++++---------
12 files changed, 293 insertions(+), 237 deletions(-)
create mode 100644 chrono/manager/templates/chrono/manager_agenda_settings.html
diff --git a/chrono/manager/templates/chrono/manager_agenda_settings.html b/chrono/manager/templates/chrono/manager_agenda_settings.html
new file mode 100644
index 0000000..0fcc261
--- /dev/null
+++ b/chrono/manager/templates/chrono/manager_agenda_settings.html
@@ -0,0 +1,173 @@
+{% extends "chrono/manager_agenda_view.html" %}
+{% load i18n %}
+
+{% block breadcrumb %}
+{{ block.super }}
+{% trans "Settings" %}
+{% endblock %}
+
+{% block appbar %}
+{% trans "Settings" %}
+ [{% trans "identifier:" %} {{object.slug}}]
+
+{% if user.is_staff %}
+ {% trans 'Delete' %}
+{% endif %}
+{% if user_can_manage %}
+ {% trans 'Options' %}
+ {% if object.kind == "events" %}
+ {% trans 'Import Events' %}
+ {% trans 'New Event' %}
+ {% else %}
+ {% trans 'New Meeting Type' %}
+ {% trans 'New Desk' %}
+ {% endif %}
+{% endif %}
+{% endblock %}
+
+{% block content %}
+
+{% if object.kind == "events" %}
+{% trans "Events" %}
+{% if object.event_set.count %}
+
+{% else %}
+
+ {% blocktrans %}
+ This agenda doesn't have any event yet. Click on the "New Event" button in
+ the top right of the page to add a first one.
+ {% endblocktrans %}
+
+{% endif %}
+{% endif %}
+
+{% if object.kind == "meetings" %}
+
+{% trans 'Meeting Types' %}
+{% if object.meetingtype_set.count %}
+
+
+{% trans 'Time Periods' %}
+ {% if object.desk_set.count %}
+
+ {% for desk in object.desk_set.all %}
+
+ {% url 'chrono-manager-agenda-add-time-period' agenda_pk=object.pk pk=desk.pk as add_time_period_url %}
+
+
+ {% endfor %}
+
+ {% else %}
+
+ {% blocktrans %}
+ This agenda doesn't have any desk yet. Click on the "New Desk" button in
+ the top right of the page to add a first one.
+ {% endblocktrans %}
+
+{% endif %}
+
+{% else %}
+
+ {% blocktrans %}
+ This agenda doesn't have any meeting type yet. Click on the "New Meeting Type" button in
+ the top right of the page to add a first one.
+ {% endblocktrans %}
+
+{% endif %}
+
+
+{% endif %}
+
+
+{% trans "Permissions" %}
+
+
+ - {% trans "Edit Role:" %} {% if agenda.edit_role %}{{ agenda.edit_role }}{% else %}{% trans "undefined" %}{% endif %}
+ - {% trans "View Role:" %} {% if agenda.view_role %}{{ agenda.view_role }}{% else %}{% trans "undefined" %}{% endif %}
+
+
+{% trans "Booking Delays" %}
+
+
+ - {% trans "Minimal booking delay:" %} {{ agenda.minimal_booking_delay }} {% trans "days" %}
+ - {% trans "Maximal booking delay:" %} {{ agenda.maximal_booking_delay }} {% trans "days" %}
+
+
+{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_agenda_view.html b/chrono/manager/templates/chrono/manager_agenda_view.html
index aa94a85..b134a53 100644
--- a/chrono/manager/templates/chrono/manager_agenda_view.html
+++ b/chrono/manager/templates/chrono/manager_agenda_view.html
@@ -2,21 +2,9 @@
{% load i18n %}
{% block appbar %}
-{{ object.label }}
- [{% trans "identifier:" %} {{object.slug}}]
-
-{% if user.is_staff %}
- {% trans 'Delete' %}
-{% endif %}
+{{ object.label }}
{% if user_can_manage %}
- {% trans 'Options' %}
- {% if object.kind == "events" %}
- {% trans 'Import Events' %}
- {% trans 'New Event' %}
- {% else %}
- {% trans 'New Meeting Type' %}
- {% trans 'New Desk' %}
- {% endif %}
+ {% trans 'Settings' %}
{% endif %}
{% endblock %}
@@ -30,132 +18,4 @@
{% endblock %}
{% block content %}
-
-{% if object.kind == "events" %}
-{% if object.event_set.count %}
-
-{% else %}
-
- {% blocktrans %}
- This agenda doesn't have any event yet. Click on the "New Event" button in
- the top right of the page to add a first one.
- {% endblocktrans %}
-
-{% endif %}
-{% endif %}
-
-{% if object.kind == "meetings" %}
-
-{% trans 'Meeting Types' %}
-{% if object.meetingtype_set.count %}
-
-
-{% trans 'Time Periods' %}
- {% if object.desk_set.count %}
-
- {% for desk in object.desk_set.all %}
-
- {% url 'chrono-manager-agenda-add-time-period' agenda_pk=object.pk pk=desk.pk as add_time_period_url %}
-
-
- {% endfor %}
-
- {% else %}
-
- {% blocktrans %}
- This agenda doesn't have any desk yet. Click on the "New Desk" button in
- the top right of the page to add a first one.
- {% endblocktrans %}
-
-{% endif %}
-
-{% else %}
-
- {% blocktrans %}
- This agenda doesn't have any meeting type yet. Click on the "New Meeting Type" button in
- the top right of the page to add a first one.
- {% endblocktrans %}
-
-{% endif %}
-
-
-{% endif %}
-
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_desk_form.html b/chrono/manager/templates/chrono/manager_desk_form.html
index 930f892..02c713e 100644
--- a/chrono/manager/templates/chrono/manager_desk_form.html
+++ b/chrono/manager/templates/chrono/manager_desk_form.html
@@ -31,7 +31,7 @@
{{ form.as_p }}
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_event_form.html b/chrono/manager/templates/chrono/manager_event_form.html
index ffe4370..0a8f8f4 100644
--- a/chrono/manager/templates/chrono/manager_event_form.html
+++ b/chrono/manager/templates/chrono/manager_event_form.html
@@ -29,7 +29,7 @@
{{ form.as_p }}
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_import_events.html b/chrono/manager/templates/chrono/manager_import_events.html
index 3651524..6247f6b 100644
--- a/chrono/manager/templates/chrono/manager_import_events.html
+++ b/chrono/manager/templates/chrono/manager_import_events.html
@@ -25,7 +25,7 @@
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_import_exceptions.html b/chrono/manager/templates/chrono/manager_import_exceptions.html
index 1b119d8..39d5e52 100644
--- a/chrono/manager/templates/chrono/manager_import_exceptions.html
+++ b/chrono/manager/templates/chrono/manager_import_exceptions.html
@@ -20,7 +20,7 @@
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_meeting_type_form.html b/chrono/manager/templates/chrono/manager_meeting_type_form.html
index 601dd1d..6d79f7f 100644
--- a/chrono/manager/templates/chrono/manager_meeting_type_form.html
+++ b/chrono/manager/templates/chrono/manager_meeting_type_form.html
@@ -29,7 +29,7 @@
{{ form.as_p }}
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_time_period_exception_form.html b/chrono/manager/templates/chrono/manager_time_period_exception_form.html
index 5d920cb..79eee76 100644
--- a/chrono/manager/templates/chrono/manager_time_period_exception_form.html
+++ b/chrono/manager/templates/chrono/manager_time_period_exception_form.html
@@ -31,7 +31,7 @@
{{ form.as_p }}
{% endblock %}
diff --git a/chrono/manager/templates/chrono/manager_time_period_form.html b/chrono/manager/templates/chrono/manager_time_period_form.html
index 38c54ea..70e26f4 100644
--- a/chrono/manager/templates/chrono/manager_time_period_form.html
+++ b/chrono/manager/templates/chrono/manager_time_period_form.html
@@ -31,7 +31,7 @@
{{ form.as_p }}
{% endblock %}
diff --git a/chrono/manager/urls.py b/chrono/manager/urls.py
index 8a98cb0..cf80923 100644
--- a/chrono/manager/urls.py
+++ b/chrono/manager/urls.py
@@ -24,6 +24,8 @@ urlpatterns = [
name='chrono-manager-agenda-add'),
url(r'^agendas/(?P\w+)/$', views.agenda_view,
name='chrono-manager-agenda-view'),
+ url(r'^agendas/(?P\w+)/settings$', views.agenda_settings,
+ name='chrono-manager-agenda-settings'),
url(r'^agendas/(?P\w+)/edit$', views.agenda_edit,
name='chrono-manager-agenda-edit'),
url(r'^agendas/(?P\w+)/delete$', views.agenda_delete,
diff --git a/chrono/manager/views.py b/chrono/manager/views.py
index 91722c7..068d448 100644
--- a/chrono/manager/views.py
+++ b/chrono/manager/views.py
@@ -20,7 +20,7 @@ from django.contrib import messages
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse, reverse_lazy
from django.db.models import Q
-from django.http import HttpResponse, Http404
+from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext
@@ -67,6 +67,9 @@ class AgendaAddView(CreateView):
default_desk.save()
return model_form
+ def get_success_url(self):
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.object.id})
+
agenda_add = AgendaAddView.as_view()
@@ -81,6 +84,9 @@ class AgendaEditView(UpdateView):
raise PermissionDenied()
return obj
+ def get_success_url(self):
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.object.id})
+
agenda_edit = AgendaEditView.as_view()
@@ -113,15 +119,18 @@ agenda_delete = AgendaDeleteView.as_view()
class AgendaView(DetailView):
- template_name = 'chrono/manager_agenda_view.html'
model = Agenda
- def get_context_data(self, **kwargs):
- context = super(AgendaView, self).get_context_data(**kwargs)
- if not self.get_object().can_be_viewed(self.request.user):
+ def get(self, request, *args, **kwargs):
+ try:
+ agenda = Agenda.objects.get(id=kwargs.get('pk'))
+ except Agenda.DoesNotExist:
+ raise Http404()
+ if not agenda.can_be_viewed(self.request.user):
raise PermissionDenied()
- context['user_can_manage'] = self.get_object().can_be_managed(self.request.user)
- return context
+
+ return HttpResponseRedirect(
+ reverse('chrono-manager-agenda-settings', kwargs={'pk': agenda.id}))
agenda_view = AgendaView.as_view()
@@ -149,7 +158,7 @@ class ManagedAgendaMixin(object):
return initial
def get_success_url(self):
- return self.agenda.get_absolute_url()
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.id})
class ManagedAgendaSubobjectMixin(object):
@@ -167,7 +176,7 @@ class ManagedAgendaSubobjectMixin(object):
return context
def get_success_url(self):
- return self.agenda.get_absolute_url()
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.agenda.id})
class ManagedDeskMixin(object):
@@ -194,7 +203,7 @@ class ManagedDeskMixin(object):
return initial
def get_success_url(self):
- return self.desk.agenda.get_absolute_url()
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda.id})
class ManagedDeskSubobjectMixin(object):
@@ -213,7 +222,19 @@ class ManagedDeskSubobjectMixin(object):
return context
def get_success_url(self):
- return self.desk.agenda.get_absolute_url()
+ return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.desk.agenda.id})
+
+
+class AgendaSettings(ManagedAgendaMixin, DetailView):
+ template_name = 'chrono/manager_agenda_settings.html'
+ model = Agenda
+
+ def get_context_data(self, **kwargs):
+ context = super(AgendaSettings, self).get_context_data(**kwargs)
+ context['user_can_manage'] = self.get_object().can_be_managed(self.request.user)
+ return context
+
+agenda_settings = AgendaSettings.as_view()
class AgendaAddEventView(ManagedAgendaMixin, CreateView):
diff --git a/tests/test_manager.py b/tests/test_manager.py
index 3cffe5d..bdd4f0c 100644
--- a/tests/test_manager.py
+++ b/tests/test_manager.py
@@ -127,9 +127,10 @@ def test_add_agenda(app, admin_user):
resp = resp.form.submit()
agenda = Agenda.objects.get(label='Foo bar')
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
resp = resp.follow()
- assert 'Foo bar' in resp.body
+ assert 'Foo bar' in resp.body
+ assert 'Settings' in resp.body
def test_add_agenda_as_manager(app, manager_user):
# open /manage/ access to manager_user, and check agenda creation is not
@@ -146,14 +147,15 @@ def test_options_agenda(app, admin_user):
agenda.save()
app = login(app)
resp = app.get('/manage/', status=200)
- resp = resp.click('Foo bar')
+ resp = resp.click('Foo bar').follow()
resp = resp.click('Options')
assert resp.form['label'].value == 'Foo bar'
resp.form['label'] = 'Foo baz'
resp = resp.form.submit()
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
resp = resp.follow()
- assert 'Foo baz' in resp.body
+ assert 'Foo baz' in resp.body
+ assert 'Settings' in resp.body
def test_options_agenda_as_manager(app, manager_user):
agenda = Agenda(label=u'Foo bar')
@@ -162,28 +164,30 @@ def test_options_agenda_as_manager(app, manager_user):
app = login(app, username='manager', password='manager')
resp = app.get('/manage/', status=200)
resp = resp.click('Foo bar')
- assert not 'Options' in resp.body
+ assert not 'Settings' in resp.body
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=403)
resp = app.get('/manage/agendas/%s/edit' % agenda.id, status=403)
agenda.edit_role = manager_user.groups.all()[0]
agenda.save()
resp = app.get('/manage/', status=200)
- resp = resp.click('Foo bar')
+ resp = resp.click('Foo bar').follow()
resp = resp.click('Options')
assert resp.form['label'].value == 'Foo bar'
resp.form['label'] = 'Foo baz'
resp = resp.form.submit()
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
resp = resp.follow()
- assert 'Foo baz' in resp.body
+ assert 'Foo baz' in resp.body
+ assert 'Settings' in resp.body
def test_delete_agenda(app, admin_user):
agenda = Agenda(label=u'Foo bar')
agenda.save()
app = login(app)
resp = app.get('/manage/', status=200)
- resp = resp.click('Foo bar')
+ resp = resp.click('Foo bar').follow()
resp = resp.click('Delete')
resp = resp.form.submit()
assert resp.location.endswith('/manage/')
@@ -199,21 +203,21 @@ def test_delete_busy_agenda(app, admin_user):
app = login(app)
resp = app.get('/manage/', status=200)
- resp = resp.click('Foo bar')
+ resp = resp.click('Foo bar').follow()
resp = resp.click('Delete')
assert 'Are you sure you want to delete this?' in resp.body
booking = Booking(event=event)
booking.save()
resp = app.get('/manage/', status=200)
- resp = resp.click('Foo bar')
+ resp = resp.click('Foo bar').follow()
resp = resp.click('Delete')
assert 'This cannot be removed' in resp.body
booking.cancellation_datetime = now()
booking.save()
resp = app.get('/manage/', status=200)
- resp = resp.click('Foo bar')
+ resp = resp.click('Foo bar').follow()
resp = resp.click('Delete')
assert 'Are you sure you want to delete this?' in resp.body
@@ -229,7 +233,7 @@ def test_delete_agenda_as_manager(app, manager_user):
agenda.save()
app = login(app, username='manager', password='manager')
resp = app.get('/manage/', status=200)
- resp = resp.click('Foo bar')
+ resp = resp.click('Foo bar').follow()
assert 'Options' in resp.body
assert 'Delete' not in resp.body
resp = app.get('/manage/agendas/%s/delete' % agenda.id, status=403)
@@ -239,7 +243,7 @@ def test_add_event(app, admin_user):
agenda.maximal_booking_delay = 0
agenda.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
assert "This agenda doesn't have any event yet." in resp.body
year = now().year + 1
resp = resp.click('New Event')
@@ -266,15 +270,15 @@ def test_add_event_as_manager(app, manager_user):
agenda.view_role = manager_user.groups.all()[0]
agenda.save()
app = login(app, username='manager', password='manager')
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
- assert "This agenda doesn't have any event yet." in resp.body
- assert '>New Event<' not in resp.body
+ resp = app.get('/manage/agendas/%s/' % agenda.id, status=302)
+ app.get('/manage/agendas/%s/settings' % agenda.id, status=403)
app.get('/manage/agendas/%s/add-event' % agenda.id, status=403)
agenda.edit_role = manager_user.groups.all()[0]
agenda.save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/' % agenda.id).follow()
+ assert 'Settings' in resp.body
resp = resp.click('New Event')
resp.form['start_datetime'] = '2016-02-15 17:00'
resp.form['places'] = 10
@@ -293,7 +297,7 @@ def test_edit_event(app, admin_user):
places=20, agenda=agenda)
event.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click('Feb. 15, 2016, 5 p.m.')
assert resp.form['start_datetime'].value == '15/02/2016 17:00'
resp.form['start_datetime'] = '2016-02-16 17:00'
@@ -316,13 +320,11 @@ def test_edit_event_as_manager(app, manager_user):
places=20, agenda=agenda)
event.save()
app = login(app, username='manager', password='manager')
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
- assert '/events/%s/' % event.id not in resp.body
resp = app.get('/manage/events/%s/' % event.id, status=403)
agenda.edit_role = manager_user.groups.all()[0]
agenda.save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click('Feb. 15, 2016, 5 p.m.')
assert resp.form['start_datetime'].value == '15/02/2016 17:00'
resp.form['start_datetime'] = '2016-02-16 17:00'
@@ -342,7 +344,7 @@ def test_booked_places(app, admin_user):
Booking(event=event).save()
Booking(event=event).save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
assert '10 places' in resp.body
assert '2 booked places' in resp.body
@@ -356,19 +358,19 @@ def test_event_classes(app, admin_user):
Booking(event=event).save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
assert not 'full' in resp.body
assert not 'overbooking' in resp.body
for i in range(8):
Booking(event=event).save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
assert 'full' in resp.body
assert not 'overbooking' in resp.body
Booking(event=event).save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
assert 'full' in resp.body
assert 'overbooking' in resp.body
@@ -380,11 +382,11 @@ def test_delete_event(app, admin_user):
event.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click(href=r'/manage/events/%s/$' % event.id)
resp = resp.click('Delete')
resp = resp.form.submit()
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
assert Event.objects.count() == 0
def test_delete_busy_event(app, admin_user):
@@ -395,21 +397,21 @@ def test_delete_busy_event(app, admin_user):
event.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click(href=r'/manage/events/%s/$' % event.id)
resp = resp.click('Delete')
assert 'Are you sure you want to delete this?' in resp.body
booking = Booking(event=event)
booking.save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click(href=r'/manage/events/%s/$' % event.id)
resp = resp.click('Delete')
assert 'This cannot be removed' in resp.body
booking.cancellation_datetime = now()
booking.save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click(href=r'/manage/events/%s/$' % event.id)
resp = resp.click('Delete')
assert 'Are you sure you want to delete this?' in resp.body
@@ -429,11 +431,11 @@ def test_delete_event_as_manager(app, manager_user):
event.save()
app = login(app, username='manager', password='manager')
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click(href=r'/manage/events/%s/$' % event.id)
resp = resp.click('Delete')
resp = resp.form.submit()
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
assert Event.objects.count() == 0
def test_import_events(app, admin_user):
@@ -441,7 +443,7 @@ def test_import_events(app, admin_user):
agenda.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click('Import Events')
sample_csv_resp = resp.click('Download sample file')
assert sample_csv_resp.content_type == 'text/csv'
@@ -521,9 +523,10 @@ def test_add_meetings_agenda(app, admin_user):
resp.form['kind'] = 'meetings'
resp = resp.form.submit()
agenda = Agenda.objects.get(label='Foo bar')
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
resp = resp.follow()
- assert 'Foo bar' in resp.body
+ assert 'Foo bar' in resp.body
+ assert 'Settings' in resp.body
assert 'Meeting Types' in resp.body
agenda = Agenda.objects.get(label='Foo bar')
assert agenda.kind == 'meetings'
@@ -532,7 +535,7 @@ def test_meetings_agenda_add_meeting_type(app, admin_user):
agenda = Agenda(label=u'Foo bar', kind='meetings')
agenda.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/' % agenda.id).follow()
assert "This agenda doesn't have any meeting type yet." in resp.body
resp = resp.click('New Meeting Type')
resp.form['label'] = 'Blah'
@@ -557,11 +560,11 @@ def test_meetings_agenda_delete_meeting_type(app, admin_user):
meeting_type.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/' % agenda.id).follow()
resp = resp.click('Blah')
resp = resp.click('Delete')
resp = resp.form.submit()
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
assert MeetingType.objects.count() == 0
def test_meetings_agenda_add_time_period(app, admin_user):
@@ -569,10 +572,10 @@ def test_meetings_agenda_add_time_period(app, admin_user):
agenda.save()
desk = Desk.objects.create(agenda=agenda, label='Desk A')
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/' % agenda.id).follow()
assert not 'Add a time period' in resp.body
MeetingType(agenda=agenda, label='Blah').save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/' % agenda.id).follow()
resp = resp.click('Add a time period')
resp.form['weekday'].select(text='Wednesday')
resp.form['start_time'] = '10:00'
@@ -617,11 +620,11 @@ def test_meetings_agenda_delete_time_period(app, admin_user):
time_period.save()
app = login(app)
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/settings' % agenda.id, status=200)
resp = resp.click('Wednesday')
resp = resp.click('Delete')
resp = resp.form.submit()
- assert resp.location.endswith('/manage/agendas/%s/' % agenda.id)
+ assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
assert TimePeriod.objects.count() == 0
@@ -640,24 +643,21 @@ def test_meetings_agenda_add_time_period_as_manager(app, manager_user):
desk = Desk.objects.create(agenda=agenda, label='Desk A')
app = login(app, username='manager', password='manager')
resp = app.get('/manage/agendas/%d/' % agenda.id)
- assert 'New Meeting Type' in resp.content
- assert 'Add a time period' not in resp.content
+ assert not 'Settings' in resp.body
+ resp = app.get('/manage/agendas/%d/settings' % agenda.id, status=403)
MeetingType(agenda=agenda, label='Blah').save()
- resp = app.get('/manage/agendas/%d/' % agenda.id)
- assert 'Add a time period' not in resp.content
app.get('/manage/agendas/%d/desk/%d/add-time-period' % (agenda.id, desk.id), status=403)
time_period = TimePeriod(desk=desk, weekday=0, start_time=datetime.time(9, 0),
end_time=datetime.time(12, 0))
time_period.save()
resp = app.get('/manage/agendas/%d/' % agenda.id)
- assert '/manage/timeperiods/%s/edit' % time_period.id not in resp.body
- assert '/manage/timeperiods/%s/delete' % time_period.id not in resp.body
app.get('/manage/timeperiods/%d/edit' % time_period.id, status=403)
+ app.get('/manage/timeperiods/%d/delete' % time_period.id, status=403)
# grant edit right to manager
agenda.edit_role = manager_user.groups.all()[0]
agenda.save()
- resp = app.get('/manage/agendas/%d/' % agenda.id)
+ resp = app.get('/manage/agendas/%d/' % agenda.id).follow()
assert 'Add a time period' in resp.content
assert '/manage/timeperiods/%s/edit' % time_period.id in resp.body
assert '/manage/timeperiods/%s/delete' % time_period.id in resp.body
@@ -678,7 +678,7 @@ def test_meetings_agenda_add_desk(app, admin_user):
agenda = Agenda.objects.get(slug='foo-bar')
MeetingType(agenda=agenda, label='Blah').save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/' % agenda.id).follow()
resp = resp.click('New Desk')
resp.form['label'] = 'Desk A'
resp = resp.form.submit().follow()
@@ -708,7 +708,7 @@ def test_meetings_agenda_delete_desk(app, admin_user):
agenda = Agenda.objects.get(slug='foo-bar')
MeetingType(agenda=agenda, label='Blah').save()
- resp = app.get('/manage/agendas/%s/' % agenda.id, status=200)
+ resp = app.get('/manage/agendas/%s/' % agenda.id).follow()
resp = resp.click('New Desk')
resp.form['label'] = 'Desk A'
resp = resp.form.submit().follow()
@@ -716,7 +716,7 @@ def test_meetings_agenda_delete_desk(app, admin_user):
resp = resp.click('Desk A', index=0)
resp = resp.click('Delete')
resp = resp.form.submit()
- assert resp.location == 'http://testserver/manage/agendas/%s/' % agenda.id
+ assert resp.location == 'http://testserver/manage/agendas/%s/settings' % agenda.id
assert Desk.objects.count() == 1
@@ -775,7 +775,7 @@ def test_meetings_agenda_add_time_period_exception_when_booking_exists(app, admi
start_datetime=datetime.datetime(2017, 5, 22, 10, 30))
Booking.objects.create(event=event)
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('Add a time period exception')
resp.form['start_datetime'] = '2017-05-22 08:00'
resp.form['end_datetime'] = '2017-05-26 17:30'
@@ -794,7 +794,7 @@ def test_meetings_agenda_add_time_period_exception_when_cancelled_booking_exists
Booking.objects.create(event=event,
cancellation_datetime=datetime.datetime(2017, 5, 20, 10, 30))
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('Add a time period exception')
resp.form['start_datetime'] = '2017-05-22 08:00'
resp.form['end_datetime'] = '2017-05-26 17:30'
@@ -809,7 +809,7 @@ def test_meetings_agenda_add_invalid_time_period_exception(app, admin_user):
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('Add a time period exception')
resp.form['start_datetime'] = '2017-05-26 17:30'
resp.form['end_datetime'] = '2017-05-22 08:00'
@@ -824,7 +824,7 @@ def test_meetings_agenda_delete_time_period_exception(app, admin_user):
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('Add a time period exception')
today = datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)
tomorrow = make_aware(today + datetime.timedelta(days=15))
@@ -847,18 +847,18 @@ def test_agenda_import_time_period_exception_from_ics(app, admin_user):
desk = Desk.objects.create(agenda=agenda, label='Test Desk')
MeetingType(agenda=agenda, label='Foo').save()
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' not in resp.content
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' in resp.content
resp = resp.click('upload')
assert "You can upload a file or specify an address to a remote calendar." in resp
resp = resp.form.submit(status=302)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_file'] = Upload('exceptions.ics', 'invalid content', 'text/calendar')
resp = resp.form.submit(status=200)
@@ -904,7 +904,7 @@ DTEND:20180101
SUMMARY:New Year's Eve
END:VEVENT
END:VCALENDAR"""
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_file'] = Upload('exceptions.ics', ics_with_exceptions, 'text/calendar')
resp = resp.form.submit(status=302)
@@ -918,13 +918,13 @@ def test_agenda_import_time_period_exception_with_remote_ics(mocked_get, app, ad
desk = Desk.objects.create(agenda=agenda, label='New Desk')
MeetingType(agenda=agenda, label='Bar').save()
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' not in resp.content
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
assert 'ics_file' in resp.form.fields
@@ -946,7 +946,7 @@ END:VCALENDAR"""
assert TimePeriodException.objects.filter(desk=desk).count() == 1
exception = TimePeriodException.objects.get(desk=desk)
assert exception.external_id == 'random-event-id'
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_url'] = ''
resp = resp.form.submit(status=302)
@@ -959,13 +959,13 @@ def test_agenda_import_time_period_exception_with_remote_ics_no_events(mocked_ge
desk = Desk.objects.create(agenda=agenda, label='New Desk')
MeetingType(agenda=agenda, label='Bar').save()
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' not in resp.content
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_url'] = 'http://example.com/foo.ics'
mocked_response = mock.Mock()
@@ -988,7 +988,7 @@ END:VCALENDAR"""
VERSION:2.0
PRODID:-//foo.bar//EN
END:VCALENDAR"""
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp = resp.form.submit(status=302)
assert not TimePeriodException.objects.filter(desk=desk,
@@ -1001,13 +1001,13 @@ def test_agenda_update_time_period_exception_from_remote_ics(mocked_get, app, ad
desk = Desk.objects.create(agenda=agenda, label='New Desk')
MeetingType(agenda=agenda, label='Bar').save()
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' not in resp.content
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_url'] = 'http://example.com/foo.ics'
mocked_response = mock.Mock()
@@ -1030,7 +1030,7 @@ END:VCALENDAR"""
mocked_get.return_value = mocked_response
resp = resp.form.submit(status=302)
assert TimePeriodException.objects.filter(desk=desk).count() == 2
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_url'] = 'http://example.com/foo.ics'
mocked_response.text = """BEGIN:VCALENDAR
@@ -1053,13 +1053,13 @@ def test_agenda_import_time_period_exception_from_remote_ics_with_connection_err
desk = Desk.objects.create(agenda=agenda, label='New Desk')
MeetingType(agenda=agenda, label='Bar').save()
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' not in resp.content
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
assert 'ics_file' in resp.form.fields
@@ -1079,13 +1079,13 @@ def test_agenda_import_time_period_exception_from_forbidden_remote_ics(mocked_ge
desk = Desk.objects.create(agenda=agenda, label='New Desk')
MeetingType(agenda=agenda, label='Bar').save()
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' not in resp.content
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_url'] = 'http://example.com/foo.ics'
mocked_response = mock.Mock()
@@ -1103,12 +1103,12 @@ def test_agenda_import_time_period_exception_from_remote_ics_with_ssl_error(mock
desk = Desk.objects.create(agenda=agenda, label='New Desk')
MeetingType(agenda=agenda, label='Bar').save()
login(app)
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
assert 'Import exceptions from .ics' not in resp.content
TimePeriod.objects.create(weekday=1, desk=desk,
start_time=datetime.time(10, 0), end_time=datetime.time(12, 0))
- resp = app.get('/manage/agendas/%d/' % agenda.pk)
+ resp = app.get('/manage/agendas/%d/' % agenda.pk).follow()
resp = resp.click('upload')
resp.form['ics_url'] = 'https://example.com/foo.ics'
mocked_response = mock.Mock()
--
2.15.0