diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index 59ccc40bd..e7ba11b4d 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -595,6 +595,8 @@ def emailwrap(email): @register.filter def document_content(doc): + if doc is None: + return None path = os.path.join(doc.get_file_path(),doc.filename_with_rev()) return get_document_content(doc.name,path,markup=False) diff --git a/ietf/meeting/forms.py b/ietf/meeting/forms.py index 95fbba800..994d25646 100644 --- a/ietf/meeting/forms.py +++ b/ietf/meeting/forms.py @@ -8,7 +8,7 @@ from django.forms.fields import Field from django.utils.encoding import force_text from django.utils import six -from ietf.doc.models import Document, DocAlias, DocEvent, State, NewRevisionDocEvent +from ietf.doc.models import Document, DocAlias, State, NewRevisionDocEvent from ietf.group.models import Group from ietf.ietfauth.utils import has_role from ietf.meeting.models import Session, countries, timezones diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index af628c642..ad76489fe 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -6,7 +6,6 @@ import urlparse from django.core.urlresolvers import reverse as urlreverse from django.conf import settings from django.contrib.auth.models import User -from django.http import HttpRequest from pyquery import PyQuery @@ -696,6 +695,26 @@ class InterimTests(TestCase): r = self.client.get(url) self.assertEqual(r.status_code, 200) + def test_interim_request_disapprove(self): + make_meeting_test_data() + meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first() + url = urlreverse('ietf.meeting.views.interim_request_details',kwargs={'number':meeting.number}) + login_testing_unauthorized(self,"secretary",url) + r = self.client.post(url,{'disapprove':'Disapprove'}) + self.assertEqual(r.status_code, 200) + for session in meeting.session_set.all(): + self.assertEqual(session.status_id,'disappr') + + def test_interim_request_cancel(self): + make_meeting_test_data() + meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first() + url = urlreverse('ietf.meeting.views.interim_request_details',kwargs={'number':meeting.number}) + login_testing_unauthorized(self,"secretary",url) + r = self.client.post(url,{'cancel':'Cancel'}) + self.assertEqual(r.status_code, 200) + for session in meeting.session_set.all(): + self.assertEqual(session.status_id,'canceledpa') + def test_interim_request_details_permissions(self): make_meeting_test_data() meeting = Meeting.objects.filter(type='interim',session__status='apprw',session__group__acronym='mars').first() diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index ca04b6b52..c95fcc3ef 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -992,6 +992,7 @@ def interim_request(request): if meeting_type == 'series': meeting = create_interim_meeting_from_forms(form,f) f.save(request,group,meeting,is_approved) + messages.success(request,'Interim meeting request submitted') return redirect(upcoming) else: assert False, (form.errors, formset.errors) @@ -1012,12 +1013,18 @@ def interim_request_details(request, number): if request.method == 'POST': if request.POST.get('approve'): meeting.session_set.update(status_id='scheda') + messages.success(request,'Interim meeting approved') if has_role(request.user, 'Secretariat'): return redirect(interim_send_announcement, number=number) if request.POST.get('disapprove'): - pass + meeting.session_set.update(status_id='disappr') + messages.success(request,'Interim meeting disapproved') if request.POST.get('cancel'): - pass + if meeting.session_set.first().status.slug == 'sched': + meeting.session_set.update(status_id='canceled') + else: + meeting.session_set.update(status_id='canceledpa') + messages.success(request,'Interim meeting cancelled') return render(request, "meeting/interim_request_details.html",{ "meeting":meeting, diff --git a/ietf/name/fixtures/names.json b/ietf/name/fixtures/names.json index 4480780a5..7dd4ed6fe 100644 --- a/ietf/name/fixtures/names.json +++ b/ietf/name/fixtures/names.json @@ -2042,6 +2042,16 @@ "model": "name.sessionstatusname", "pk": "canceled" }, +{ + "fields": { + "order": 0, + "used": true, + "name": "Cancelled - Pre Announcement", + "desc": "" + }, + "model": "name.sessionstatusname", + "pk": "canceledpa" +}, { "fields": { "order": 0, diff --git a/ietf/name/migrations/0011_add_session_status.py b/ietf/name/migrations/0011_add_session_status.py index 87049f4a9..d31eae87b 100644 --- a/ietf/name/migrations/0011_add_session_status.py +++ b/ietf/name/migrations/0011_add_session_status.py @@ -6,7 +6,7 @@ from django.db import migrations def populate_names(apps, schema_editor): SessionStatusName = apps.get_model("name", "SessionStatusName") SessionStatusName.objects.create(slug="scheda",name="Scheduled - Announcement to be sent") - + SessionStatusName.objects.create(slug="canceledpa",name="Cancelled - Pre Announcement") class Migration(migrations.Migration): diff --git a/ietf/secr/sreq/tests.py b/ietf/secr/sreq/tests.py index 1b81b8a93..a243c932c 100644 --- a/ietf/secr/sreq/tests.py +++ b/ietf/secr/sreq/tests.py @@ -36,8 +36,8 @@ class MainTestCase(TestCase): self.assertEqual(r.status_code, 200) sched = r.context['scheduled_groups'] unsched = r.context['unscheduled_groups'] - self.failUnless(len(unsched) == 0) - self.failUnless(len(sched) > 0) + self.assertEqual(len(unsched),2) + self.assertEqual(len(sched),2) class SubmitRequestCase(TestCase): def test_submit_request(self): diff --git a/ietf/templates/meeting/interim_announcement.txt b/ietf/templates/meeting/interim_announcement.txt index 1ee0c5d40..31d369d48 100644 --- a/ietf/templates/meeting/interim_announcement.txt +++ b/ietf/templates/meeting/interim_announcement.txt @@ -2,7 +2,7 @@ virtual interim meeting on {{ meeting.date }} from {{ meeting.session_set.first | session_start_time | date:"H:i" }} to {{ meeting.session_set.first | session_end_time | date:"H:i" }} UTC. Agenda: -{{ meeting.session_set.first.agenda | document_content }} +{{ meeting.session_set.first.agenda | document_content | default_if_none:"(No agenda submitted)" }} To join the interim meeting: {{ meeting.session_set.first.remote_instructions }} diff --git a/ietf/templates/meeting/interim_request_details.html b/ietf/templates/meeting/interim_request_details.html index c310da9ab..9177ac2f1 100644 --- a/ietf/templates/meeting/interim_request_details.html +++ b/ietf/templates/meeting/interim_request_details.html @@ -43,14 +43,18 @@
diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py index 416d22fff..942f0a42e 100644 --- a/ietf/utils/test_data.py +++ b/ietf/utils/test_data.py @@ -94,6 +94,7 @@ def make_immutable_base_data(): create_person(opsarea, "ad") sops = create_group(name="Server Operations", acronym="sops", type_id="wg", parent=opsarea) create_person(sops, "chair", name="Sops Chairman", username="sopschairman") + create_person(sops, "secr", name="Sops Secretary", username="sopssecretary") # create a bunch of ads for swarm tests for i in range(1, 10):