Skip to content

Commit c6b2e8e

Browse files
committed
Merged in [17425] from rjsparks@nostrum.com:
Make required AD approval of virtual interims configurable. Fixes ietf-tools#2912. - Legacy-Id: 17426 Note: SVN reference [17425] has been migrated to Git commit 6248706
2 parents c107062 + 6248706 commit c6b2e8e

5 files changed

Lines changed: 29 additions & 14 deletions

File tree

ietf/meeting/forms.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2016-2019, All Rights Reserved
1+
# Copyright The IETF Trust 2016-2020, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

44

@@ -218,8 +218,8 @@ def __init__(self, *args, **kwargs):
218218
self.user = kwargs.pop('user')
219219
if 'group' in kwargs:
220220
self.group = kwargs.pop('group')
221-
if 'is_approved_or_virtual' in kwargs:
222-
self.is_approved_or_virtual = kwargs.pop('is_approved_or_virtual')
221+
if 'requires_approval' in kwargs:
222+
self.requires_approval = kwargs.pop('requires_approval')
223223
super(InterimSessionModelForm, self).__init__(*args, **kwargs)
224224
self.is_edit = bool(self.instance.pk)
225225
# setup fields that aren't intrinsic to the Session object

ietf/meeting/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ def sessions_post_save(request, forms):
602602
continue
603603

604604
if form.instance.pk is not None and not SchedulingEvent.objects.filter(session=form.instance).exists():
605-
if form.is_approved_or_virtual:
605+
if not form.requires_approval:
606606
status_id = 'scheda'
607607
else:
608608
status_id = 'apprw'

ietf/meeting/tests_views.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from django.urls import reverse as urlreverse
2424
from django.conf import settings
2525
from django.contrib.auth.models import User
26-
from django.test import Client
26+
from django.test import Client, override_settings
2727
from django.db.models import F
2828

2929
import debug # pyflakes:ignore
@@ -39,7 +39,6 @@
3939
from ietf.meeting.test_data import make_meeting_test_data, make_interim_meeting
4040
from ietf.meeting.utils import finalize, condition_slide_order
4141
from ietf.meeting.utils import add_event_info_to_session_qs
42-
from ietf.meeting.utils import current_session_status
4342
from ietf.meeting.views import session_draft_list
4443
from ietf.name.models import SessionStatusName, ImportantDateName
4544
from ietf.utils.decorators import skip_coverage
@@ -1398,7 +1397,7 @@ def test_interim_request_options(self):
13981397
count = person.role_set.filter(name='chair',group__type__in=('wg', 'rg'), group__state__in=('active', 'proposed')).count()
13991398
self.assertEqual(count, len(q("#id_group option")) - 1) # -1 for options placeholder
14001399

1401-
def test_interim_request_single_virtual(self):
1400+
def do_interim_request_single_virtual(self):
14021401
make_meeting_test_data()
14031402
group = Group.objects.get(acronym='mars')
14041403
date = datetime.date.today() + datetime.timedelta(days=30)
@@ -1440,7 +1439,6 @@ def test_interim_request_single_virtual(self):
14401439
session = meeting.session_set.first()
14411440
self.assertEqual(session.remote_instructions,remote_instructions)
14421441
self.assertEqual(session.agenda_note,agenda_note)
1443-
self.assertEqual(current_session_status(session).slug,'scheda')
14441442
timeslot = session.official_timeslotassignment().timeslot
14451443
self.assertEqual(timeslot.time,dt)
14461444
self.assertEqual(timeslot.duration,duration)
@@ -1451,8 +1449,22 @@ def test_interim_request_single_virtual(self):
14511449
self.assertTrue(os.path.exists(path))
14521450
# check notice to secretariat
14531451
self.assertEqual(len(outbox), length_before + 1)
1454-
self.assertIn('interim meeting ready for announcement', outbox[-1]['Subject'])
1452+
return meeting
1453+
1454+
@override_settings(VIRTUAL_INTERIMS_REQUIRE_APPROVAL = True)
1455+
def test_interim_request_single_virtual_settings_approval_required(self):
1456+
meeting = self.do_interim_request_single_virtual()
1457+
self.assertEqual(meeting.session_set.last().schedulingevent_set.last().status_id,'apprw')
1458+
self.assertIn('New Interim Meeting Request', outbox[-1]['Subject'])
1459+
self.assertIn('session-request@ietf.org', outbox[-1]['To'])
1460+
self.assertIn('aread@example.org', outbox[-1]['Cc'])
1461+
1462+
@override_settings(VIRTUAL_INTERIMS_REQUIRE_APPROVAL = False)
1463+
def test_interim_request_single_virtual_settings_approval_not_required(self):
1464+
meeting = self.do_interim_request_single_virtual()
1465+
self.assertEqual(meeting.session_set.last().schedulingevent_set.last().status_id,'scheda')
14551466
self.assertIn('iesg-secretary@ietf.org', outbox[-1]['To'])
1467+
self.assertIn('interim meeting ready for announcement', outbox[-1]['Subject'])
14561468

14571469
def test_interim_request_single_in_person(self):
14581470
make_meeting_test_data()

ietf/meeting/views.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2017,6 +2017,8 @@ def interim_request(request):
20172017
is_virtual = form.is_virtual()
20182018
meeting_type = form.cleaned_data.get('meeting_type')
20192019

2020+
requires_approval = not ( is_approved or ( is_virtual and not settings.VIRTUAL_INTERIMS_REQUIRE_APPROVAL ))
2021+
20202022
# pre create meeting
20212023
if meeting_type in ('single', 'multi-day'):
20222024
meeting = form.save(date=get_earliest_session_date(formset))
@@ -2026,13 +2028,13 @@ def interim_request(request):
20262028
InterimSessionModelForm.__init__,
20272029
user=request.user,
20282030
group=group,
2029-
is_approved_or_virtual=(is_approved or is_virtual))
2031+
requires_approval=requires_approval)
20302032
formset = SessionFormset(instance=meeting, data=request.POST)
20312033
formset.is_valid()
20322034
formset.save()
20332035
sessions_post_save(request, formset)
20342036

2035-
if not (is_approved or is_virtual):
2037+
if requires_approval:
20362038
send_interim_approval_request(meetings=[meeting])
20372039
elif not has_role(request.user, 'Secretariat'):
20382040
send_interim_announcement_request(meeting=meeting)
@@ -2046,7 +2048,7 @@ def interim_request(request):
20462048
InterimSessionModelForm.__init__,
20472049
user=request.user,
20482050
group=group,
2049-
is_approved_or_virtual=(is_approved or is_virtual))
2051+
requires_approval=requires_approval)
20502052
formset = SessionFormset(instance=Meeting(), data=request.POST)
20512053
formset.is_valid() # re-validate
20522054
for session_form in formset.forms:
@@ -2063,7 +2065,7 @@ def interim_request(request):
20632065
series.append(meeting)
20642066
sessions_post_save(request, [session_form])
20652067

2066-
if not (is_approved or is_virtual):
2068+
if requires_approval:
20672069
send_interim_approval_request(meetings=series)
20682070
elif not has_role(request.user, 'Secretariat'):
20692071
send_interim_announcement_request(meeting=meeting)
@@ -2191,7 +2193,7 @@ def interim_request_edit(request, number):
21912193
InterimSessionModelForm.__init__,
21922194
user=request.user,
21932195
group=group,
2194-
is_approved_or_virtual=is_approved)
2196+
requires_approval= not is_approved)
21952197

21962198
formset = SessionFormset(instance=meeting, data=request.POST)
21972199

ietf/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,7 @@ def skip_unreadable_post(record):
764764

765765
# Interim Meeting Tool settings
766766
INTERIM_ANNOUNCE_FROM_EMAIL = 'IESG Secretary <iesg-secretary@ietf.org>'
767+
VIRTUAL_INTERIMS_REQUIRE_APPROVAL = True
767768

768769
# Days from meeting to day of cut off dates on submit -- cutoff_time_utc is added to this
769770
IDSUBMIT_DEFAULT_CUTOFF_DAY_OFFSET_00 = 13

0 commit comments

Comments
 (0)