general: move agenda settings to a secondary page (#11114)

This commit is contained in:
Frédéric Péters 2017-11-26 11:55:09 +01:00
parent caeb1654f6
commit c5310aca40
12 changed files with 294 additions and 238 deletions

View File

@ -0,0 +1,173 @@
{% extends "chrono/manager_agenda_view.html" %}
{% load i18n %}
{% block breadcrumb %}
{{ block.super }}
<a href=".">{% trans "Settings" %}</a>
{% endblock %}
{% block appbar %}
<h2>{% trans "Settings" %}
<span class="identifier">[{% trans "identifier:" %} {{object.slug}}]</span></h2>
</h2>
{% if user.is_staff %}
<a rel="popup" href="{% url 'chrono-manager-agenda-delete' pk=object.id %}">{% trans 'Delete' %}</a>
{% endif %}
{% if user_can_manage %}
<a rel="popup" href="{% url 'chrono-manager-agenda-edit' pk=object.id %}">{% trans 'Options' %}</a>
{% if object.kind == "events" %}
<a rel="popup" href="{% url 'chrono-manager-agenda-import-events' pk=object.id %}">{% trans 'Import Events' %}</a>
<a rel="popup" href="{% url 'chrono-manager-agenda-add-event' pk=object.id %}">{% trans 'New Event' %}</a>
{% else %}
<a rel="popup" href="{% url 'chrono-manager-agenda-add-meeting-type' pk=object.id %}">{% trans 'New Meeting Type' %}</a>
<a rel="popup" href="{% url 'chrono-manager-agenda-add-desk' pk=object.id %}">{% trans 'New Desk' %}</a>
{% endif %}
{% endif %}
{% endblock %}
{% block content %}
{% if object.kind == "events" %}
<h3>{% trans "Events" %}</h3>
{% if object.event_set.count %}
<div>
<ul class="objects-list single-links">
{% for event in object.event_set.all %}
<li class="{% if event.booked_places > event.places %}overbooking{% endif %}
{% if event.full %}full{% endif %}
{% if not event.in_bookable_period %}not-{% endif %}bookable"
{% if event.places %}
data-total="{{event.places}}" data-booked="{{event.booked_places}}"
{% elif event.waiting_list_places %}
data-total="{{event.waiting_list_places}}" data-booked="{{event.waiting_list}}"
{% endif %}
><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-event-edit' pk=event.id %}{% else %}#{% endif %}">
{% if event.label %}{{event.label}} / {% endif %}
{{ event.start_datetime }}
{% if event.full %}/ <span class="full">{% trans "full" %}</span>{% endif %}
(
{% if event.places %}
{% blocktrans with places=event.places booked_places=event.booked_places %}{{ places }} places, {{ booked_places }} booked places{% endblocktrans %}
{% endif %}
{% if event.places and event.waiting_list_places %} / {% endif %}
{% if event.waiting_list_places %}
{% blocktrans with places=event.waiting_list_places waiting_places=event.waiting_list %}
{{waiting_places}} on {{ places }} in waiting list
{% endblocktrans %}
{% endif %}
)
{% if not event.in_bookable_period %}
({% trans "out of bookable period" %})
{% endif %}
</a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-event-delete' pk=event.id %}">{% trans "remove" %}</a>{% endif %}
<span class="occupation-bar"></span>
</li>
{% endfor %}
</ul>
</div>
{% else %}
<div class="big-msg-info">
{% 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 %}
</div>
{% endif %}
{% endif %}
{% if object.kind == "meetings" %}
<h3>{% trans 'Meeting Types' %}</h3>
{% if object.meetingtype_set.count %}
<div>
<ul class="objects-list single-links">
{% for meeting_type in object.meetingtype_set.all %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-meeting-type-edit' pk=meeting_type.id %}{% else %}#{% endif %}">
{{meeting_type.label}}
<span class="identifier">[{% trans "identifier:" %} {{meeting_type.slug}}]</span>
</a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-meeting-type-delete' pk=meeting_type.id %}">{% trans "remove" %}</a>{% endif %}
</li>
{% endfor %}
</ul>
</div>
<h3>{% trans 'Time Periods' %}</h3>
{% if object.desk_set.count %}
<div class="timeperiods">
{% for desk in object.desk_set.all %}
<div class="timeperiod">
{% url 'chrono-manager-agenda-add-time-period' agenda_pk=object.pk pk=desk.pk as add_time_period_url %}
<ul class="objects-list single-links">
{% if forloop.counter != 1 or forloop.revcounter != 1 %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-desk-edit' pk=desk.id %}{% else %}#{% endif %}">
<strong>{{ desk.label }}</strong>
</a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-desk-delete' pk=desk.id %}">{% trans "remove" %}</a>{% endif %}
</li>
{% endif %}
{% for time_period in desk.timeperiod_set.all %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-time-period-edit' pk=time_period.id %}{% else %}#{% endif %}">
{{time_period.weekday_str}} / {{time_period.start_time}} → {{time_period.end_time}} </a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-delete' pk=time_period.id %}">{% trans "remove" %}</a>{% endif %}
</li>
{% endfor %}
{% if user_can_manage %}
<li><a class="add" rel="popup" href="{{add_time_period_url}}">{% trans 'Add a time period' %}</a></li>
{% endif %}
{% if desk.timeperiod_set.count %}
{% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %}
<li><a href="#"><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon upload" rel="popup" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Import exceptions from .ics' %}">{% trans 'upload' %}</a></li>
{% for exception in desk.get_exceptions_within_two_weeks %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}{% else %}#{% endif %}">
{{ exception }}
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>{% endif %}
{% endfor %}
{% if not desk.are_all_exceptions_displayed %}
<li><a class="timeperiod-exception-all" rel="popup" data-selector="div.timeperiod" href="{% url 'chrono-manager-time-period-exception-list' pk=desk.id %}">({% trans 'see all exceptions' %})</a></li>
{% endif %}
<li><a class="add" rel="popup" href="{{add_time_period_exception_url}}">{% trans 'Add a time period exception' %}</a></li>
{% endif %}
</ul>
</div>
{% endfor %}
</div>
{% else %}
<div>
{% 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 %}
</div>
{% endif %}
{% else %}
<div class="big-msg-info">
{% 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 %}
</div>
{% endif %}
{% endif %}
<h3>{% trans "Permissions" %}</h3>
<ul>
<li>{% trans "Edit Role:" %} {% if agenda.edit_role %}{{ agenda.edit_role }}{% else %}<i>{% trans "undefined" %}</i>{% endif %}</li>
<li>{% trans "View Role:" %} {% if agenda.view_role %}{{ agenda.view_role }}{% else %}<i>{% trans "undefined" %}</i>{% endif %}</li>
</ul>
<h3>{% trans "Booking Delays" %}</h3>
<ul>
<li>{% trans "Minimal booking delay:" %} {{ agenda.minimal_booking_delay }} {% trans "days" %}</li>
<li>{% trans "Maximal booking delay:" %} {{ agenda.maximal_booking_delay }} {% trans "days" %}</li>
</ul>
{% endblock %}

View File

@ -2,21 +2,9 @@
{% load i18n %}
{% block appbar %}
<h2>{{ object.label }}
<span class="identifier">[{% trans "identifier:" %} {{object.slug}}]</span></h2>
</h2>
{% if user.is_staff %}
<a rel="popup" href="{% url 'chrono-manager-agenda-delete' pk=object.id %}">{% trans 'Delete' %}</a>
{% endif %}
<h2>{{ object.label }}</h2>
{% if user_can_manage %}
<a rel="popup" href="{% url 'chrono-manager-agenda-edit' pk=object.id %}">{% trans 'Options' %}</a>
{% if object.kind == "events" %}
<a rel="popup" href="{% url 'chrono-manager-agenda-import-events' pk=object.id %}">{% trans 'Import Events' %}</a>
<a rel="popup" href="{% url 'chrono-manager-agenda-add-event' pk=object.id %}">{% trans 'New Event' %}</a>
{% else %}
<a rel="popup" href="{% url 'chrono-manager-agenda-add-meeting-type' pk=object.id %}">{% trans 'New Meeting Type' %}</a>
<a rel="popup" href="{% url 'chrono-manager-agenda-add-desk' pk=object.id %}">{% trans 'New Desk' %}</a>
{% endif %}
<a href="{% url 'chrono-manager-agenda-settings' pk=object.id %}">{% trans 'Settings' %}</a>
{% endif %}
{% endblock %}
@ -30,132 +18,4 @@
{% endblock %}
{% block content %}
{% if object.kind == "events" %}
{% if object.event_set.count %}
<div>
<ul class="objects-list single-links">
{% for event in object.event_set.all %}
<li class="{% if event.booked_places > event.places %}overbooking{% endif %}
{% if event.full %}full{% endif %}
{% if not event.in_bookable_period %}not-{% endif %}bookable"
{% if event.places %}
data-total="{{event.places}}" data-booked="{{event.booked_places}}"
{% elif event.waiting_list_places %}
data-total="{{event.waiting_list_places}}" data-booked="{{event.waiting_list}}"
{% endif %}
><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-event-edit' pk=event.id %}{% else %}#{% endif %}">
{% if event.label %}{{event.label}} / {% endif %}
{{ event.start_datetime }}
{% if event.full %}/ <span class="full">{% trans "full" %}</span>{% endif %}
(
{% if event.places %}
{% blocktrans with places=event.places booked_places=event.booked_places %}{{ places }} places, {{ booked_places }} booked places{% endblocktrans %}
{% endif %}
{% if event.places and event.waiting_list_places %} / {% endif %}
{% if event.waiting_list_places %}
{% blocktrans with places=event.waiting_list_places waiting_places=event.waiting_list %}
{{waiting_places}} on {{ places }} in waiting list
{% endblocktrans %}
{% endif %}
)
{% if not event.in_bookable_period %}
({% trans "out of bookable period" %})
{% endif %}
</a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-event-delete' pk=event.id %}">{% trans "remove" %}</a>{% endif %}
<span class="occupation-bar"></span>
</li>
{% endfor %}
</ul>
</div>
{% else %}
<div class="big-msg-info">
{% 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 %}
</div>
{% endif %}
{% endif %}
{% if object.kind == "meetings" %}
<h3>{% trans 'Meeting Types' %}</h3>
{% if object.meetingtype_set.count %}
<div>
<ul class="objects-list single-links">
{% for meeting_type in object.meetingtype_set.all %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-meeting-type-edit' pk=meeting_type.id %}{% else %}#{% endif %}">
{{meeting_type.label}}
<span class="identifier">[{% trans "identifier:" %} {{meeting_type.slug}}]</span>
</a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-meeting-type-delete' pk=meeting_type.id %}">{% trans "remove" %}</a>{% endif %}
</li>
{% endfor %}
</ul>
</div>
<h3>{% trans 'Time Periods' %}</h3>
{% if object.desk_set.count %}
<div class="timeperiods">
{% for desk in object.desk_set.all %}
<div class="timeperiod">
{% url 'chrono-manager-agenda-add-time-period' agenda_pk=object.pk pk=desk.pk as add_time_period_url %}
<ul class="objects-list single-links">
{% if forloop.counter != 1 or forloop.revcounter != 1 %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-desk-edit' pk=desk.id %}{% else %}#{% endif %}">
<strong>{{ desk.label }}</strong>
</a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-desk-delete' pk=desk.id %}">{% trans "remove" %}</a>{% endif %}
</li>
{% endif %}
{% for time_period in desk.timeperiod_set.all %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-time-period-edit' pk=time_period.id %}{% else %}#{% endif %}">
{{time_period.weekday_str}} / {{time_period.start_time}} → {{time_period.end_time}} </a>
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-delete' pk=time_period.id %}">{% trans "remove" %}</a>{% endif %}
</li>
{% endfor %}
{% if user_can_manage %}
<li><a class="add" rel="popup" href="{{add_time_period_url}}">{% trans 'Add a time period' %}</a></li>
{% endif %}
{% if desk.timeperiod_set.count %}
{% url 'chrono-manager-agenda-add-time-period-exception' agenda_pk=object.pk pk=desk.pk as add_time_period_exception_url %}
<li><a href="#"><strong>{% trans 'Exceptions' %}</strong></a><a class="link-action-icon upload" rel="popup" href="{% url 'chrono-manager-desk-add-import-time-period-exceptions' pk=desk.pk %}" title="{% trans 'Import exceptions from .ics' %}">{% trans 'upload' %}</a></li>
{% for exception in desk.get_exceptions_within_two_weeks %}
<li><a rel="popup" href="{% if user_can_manage %}{% url 'chrono-manager-time-period-exception-edit' pk=exception.pk %}{% else %}#{% endif %}">
{{ exception }}
{% if user_can_manage %}<a rel="popup" class="delete" href="{% url 'chrono-manager-time-period-exception-delete' pk=exception.id %}">{% trans "remove" %}</a>{% endif %}
{% endfor %}
{% if not desk.are_all_exceptions_displayed %}
<li><a class="timeperiod-exception-all" rel="popup" data-selector="div.timeperiod" href="{% url 'chrono-manager-time-period-exception-list' pk=desk.id %}">({% trans 'see all exceptions' %})</a></li>
{% endif %}
<li><a class="add" rel="popup" href="{{add_time_period_exception_url}}">{% trans 'Add a time period exception' %}</a></li>
{% endif %}
</ul>
</div>
{% endfor %}
</div>
{% else %}
<div>
{% 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 %}
</div>
{% endif %}
{% else %}
<div class="big-msg-info">
{% 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 %}
</div>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -31,7 +31,7 @@
{{ form.as_p }}
<div class="buttons">
<button class="submit-button">{% trans "Save" %}</button>
<a class="cancel" href="{% url 'chrono-manager-agenda-view' pk=agenda.id %}">{% trans 'Cancel' %}</a>
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -29,7 +29,7 @@
{{ form.as_p }}
<div class="buttons">
<button class="submit-button">{% trans "Save" %}</button>
<a class="cancel" href="{% url 'chrono-manager-agenda-view' pk=agenda.id %}">{% trans 'Cancel' %}</a>
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -25,7 +25,7 @@
</p>
<div class="buttons">
<button>{% trans "Import" %}</button>
<a class="cancel" href="{% url 'chrono-manager-agenda-view' pk=agenda.id %}">{% trans 'Cancel' %}</a>
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -20,7 +20,7 @@
</p>
<div class="buttons">
<button>{% trans "Import" %}</button>
<a class="cancel" href="{% url 'chrono-manager-agenda-view' pk=agenda.id %}">{% trans 'Cancel' %}</a>
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -29,7 +29,7 @@
{{ form.as_p }}
<div class="buttons">
<button class="submit-button">{% trans "Save" %}</button>
<a class="cancel" href="{% url 'chrono-manager-agenda-view' pk=agenda.id %}">{% trans 'Cancel' %}</a>
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=agenda.id %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -31,7 +31,7 @@
{{ form.as_p }}
<div class="buttons">
<button class="submit-button">{% trans "Save" %}</button>
<a class="cancel" href="{% url 'chrono-manager-agenda-view' pk=desk.agenda.id %}">{% trans 'Cancel' %}</a>
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=desk.agenda.id %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -31,7 +31,7 @@
{{ form.as_p }}
<div class="buttons">
<button class="submit-button">{% trans "Save" %}</button>
<a class="cancel" href="{% url 'chrono-manager-agenda-view' pk=desk.agenda.id %}">{% trans 'Cancel' %}</a>
<a class="cancel" href="{% url 'chrono-manager-agenda-settings' pk=desk.agenda.id %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -24,6 +24,8 @@ urlpatterns = [
name='chrono-manager-agenda-add'),
url(r'^agendas/(?P<pk>\w+)/$', views.agenda_view,
name='chrono-manager-agenda-view'),
url(r'^agendas/(?P<pk>\w+)/settings$', views.agenda_settings,
name='chrono-manager-agenda-settings'),
url(r'^agendas/(?P<pk>\w+)/edit$', views.agenda_edit,
name='chrono-manager-agenda-edit'),
url(r'^agendas/(?P<pk>\w+)/delete$', views.agenda_delete,

View File

@ -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):

View File

@ -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 '<h2>Foo bar' in resp.body
assert 'Foo bar' in resp.body
assert '<h2>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 '<h2>Foo baz' in resp.body
assert 'Foo baz' in resp.body
assert '<h2>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 '<h2>Foo baz' in resp.body
assert 'Foo baz' in resp.body
assert '<h2>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 '<h2>Settings' in resp.body
resp = resp.click('New Event')
resp.form['start_datetime'] = '2016-02-15 17:00'
resp.form['places'] = 10
@ -294,7 +298,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'
@ -317,13 +321,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'
@ -343,7 +345,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
@ -357,19 +359,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
@ -381,11 +383,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):
@ -396,21 +398,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
@ -430,11 +432,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):
@ -442,7 +444,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'
@ -522,9 +524,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 '<h2>Foo bar' in resp.body
assert 'Foo bar' in resp.body
assert '<h2>Settings' in resp.body
assert 'Meeting Types' in resp.body
agenda = Agenda.objects.get(label='Foo bar')
assert agenda.kind == 'meetings'
@ -533,7 +536,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'
@ -558,11 +561,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):
@ -570,10 +573,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'
@ -618,11 +621,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
@ -641,24 +644,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
@ -679,7 +679,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()
@ -709,7 +709,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()
@ -717,7 +717,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.endswith('/manage/agendas/%s/settings' % agenda.id)
assert Desk.objects.count() == 1
@ -776,7 +776,7 @@ def test_meetings_agenda_add_time_period_exception_when_booking_exists(app, admi
start_datetime=make_aware(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 = resp.form.submit() # submit empty form
# fields should be marked with errors
@ -792,7 +792,7 @@ def test_meetings_agenda_add_time_period_exception_when_booking_exists(app, admi
desk = Desk.objects.create(agenda=agenda, label='Desk B')
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('Add a time period exception', href='desk/%s/' % desk.id)
resp.form['start_datetime'] = '2017-05-22 08:00'
resp.form['end_datetime'] = '2017-05-26 17:30'
@ -810,7 +810,7 @@ def test_meetings_agenda_add_time_period_exception_when_cancelled_booking_exists
Booking.objects.create(event=event,
cancellation_datetime=make_aware(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'
@ -825,7 +825,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'
@ -840,7 +840,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))
@ -863,18 +863,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)
@ -920,7 +920,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)
@ -934,13 +934,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
@ -962,7 +962,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)
@ -975,13 +975,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()
@ -1004,7 +1004,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,
@ -1017,13 +1017,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()
@ -1046,7 +1046,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
@ -1069,13 +1069,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
@ -1095,13 +1095,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()
@ -1119,12 +1119,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()