From f65335e25812531d7a8cd1e115c8c0b44ec3aa42 Mon Sep 17 00:00:00 2001 From: Ryan Cross Date: Fri, 12 Aug 2016 21:32:13 +0000 Subject: [PATCH] Fix issue with interim meeting series of more than two meetings. Changed to not send meeting change notifications for meetings not yet announced. Commit ready for merge. - Legacy-Id: 11781 --- ietf/meeting/tests_views.py | 42 ++++++++++++++++++- ietf/meeting/views.py | 2 +- .../static/ietf/js/meeting-interim-request.js | 7 ++-- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index a8d272519..48926fe6d 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -1026,7 +1026,8 @@ class InterimTests(TestCase): self.assertEqual(len(outbox), length_before + 1) self.assertTrue('Interim Meeting Cancelled' in outbox[-1]['Subject']) - def test_interim_request_edit(self): + def test_interim_request_edit_no_notice(self): + '''Edit a request. No notice should go out if it hasn't been announced yet''' make_meeting_test_data() meeting = Meeting.objects.filter(type='interim', session__status='apprw', session__group__acronym='mars').first() group = meeting.session_set.first().group @@ -1058,13 +1059,50 @@ class InterimTests(TestCase): data.update(form_initial) r = self.client.post(url, data) self.assertRedirects(r, urlreverse('ietf.meeting.views.interim_request_details', kwargs={'number': meeting.number})) + self.assertEqual(len(outbox),length_before) + session = meeting.session_set.first() + timeslot = session.official_timeslotassignment().timeslot + self.assertEqual(timeslot.time,new_time) + + def test_interim_request_edit(self): + '''Edit request. Send notice of change''' + make_meeting_test_data() + meeting = Meeting.objects.filter(type='interim', session__status='sched', session__group__acronym='mars').first() + group = meeting.session_set.first().group + url = urlreverse('ietf.meeting.views.interim_request_edit', kwargs={'number': meeting.number}) + # test unauthorized access + self.client.login(username="ameschairman", password="ameschairman+password") + r = self.client.get(url) + self.assertEqual(r.status_code, 403) + # test authorized use + login_testing_unauthorized(self, "secretary", url) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + # post changes + length_before = len(outbox) + form_initial = r.context['form'].initial + formset_initial = r.context['formset'].forms[0].initial + new_time = formset_initial['time'] + datetime.timedelta(hours=1) + data = {'group':group.pk, + 'meeting_type':'single', + 'session_set-0-id':meeting.session_set.first().id, + 'session_set-0-date':formset_initial['date'].strftime('%Y-%m-%d'), + 'session_set-0-time':new_time.strftime('%H:%M'), + 'session_set-0-requested_duration':formset_initial['requested_duration'], + 'session_set-0-remote_instructions':formset_initial['remote_instructions'], + #'session_set-0-agenda':formset_initial['agenda'], + 'session_set-0-agenda_note':formset_initial['agenda_note'], + 'session_set-TOTAL_FORMS':1, + 'session_set-INITIAL_FORMS':1} + data.update(form_initial) + r = self.client.post(url, data) + self.assertRedirects(r, urlreverse('ietf.meeting.views.interim_request_details', kwargs={'number': meeting.number})) self.assertEqual(len(outbox),length_before+1) self.assertTrue('CHANGED' in outbox[-1]['Subject']) session = meeting.session_set.first() timeslot = session.official_timeslotassignment().timeslot self.assertEqual(timeslot.time,new_time) - 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 b33de8ae9..77833427c 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -1329,7 +1329,7 @@ def interim_request_edit(request, number): sessions_post_save(formset) message = 'Interim meeting request saved' - if form.has_changed() or formset.has_changed(): + if (form.has_changed() or formset.has_changed()) and meeting.session_set.filter(status='sched'): send_interim_change_notice(request, meeting) message = message + ' and change announcement sent' messages.success(request, message) diff --git a/ietf/static/ietf/js/meeting-interim-request.js b/ietf/static/ietf/js/meeting-interim-request.js index 6b1f6c28a..d8f87aa2e 100644 --- a/ietf/static/ietf/js/meeting-interim-request.js +++ b/ietf/static/ietf/js/meeting-interim-request.js @@ -35,18 +35,19 @@ var interimRequest = { var total = +totalField.val(); var meeting_type = $('input[name="meeting_type"]:checked').val(); - el.find(':input').each(function() { + // increment formset counter + template.find(':input').each(function() { var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-'); var id = 'id_' + name; $(this).attr({'name': name, 'id': id}).val(''); }); - el.find('label').each(function() { + template.find('label').each(function() { var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-'); $(this).attr('for', newFor); }); - el.find('div.utc-time').each(function() { + template.find('div.utc-time').each(function() { var newId = $(this).attr('id').replace('-' + (total-1) + '-','-' + total + '-'); $(this).attr('id', newId); });