Skip to content

Commit

Permalink
Fix issue where third session requests, which rerequire AD approval, …
Browse files Browse the repository at this point in the history
…get left with approved status, instead of scheduled, after Secretraiat sends out notifications of official schedule. Fixes #2765.  Commit ready for merge.

 - Legacy-Id: 16607
  • Loading branch information
rpcross committed Jul 31, 2019
1 parent d332bfd commit 9a82586
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 55 deletions.
34 changes: 17 additions & 17 deletions ietf/secr/meetings/tests.py
Expand Up @@ -18,6 +18,7 @@
from ietf.group.models import Group, GroupEvent
from ietf.meeting.models import Meeting, Room, TimeSlot, SchedTimeSessAssignment, Session
from ietf.meeting.test_data import make_meeting_test_data
from ietf.name.models import SessionStatusName
from ietf.person.models import Person
from ietf.secr.meetings.forms import get_times
from ietf.utils.mail import outbox
Expand Down Expand Up @@ -91,19 +92,7 @@ def test_add_meeting(self):
self.assertEqual(response.status_code, 200)
self.assertEqual(Meeting.objects.count(),count + 1)
new_meeting = Meeting.objects.get(number=number)

# ensure new schedule is populated with specials sessions from previous meeting
self.assertTrue(new_meeting.agenda)
self.assertTrue(meeting.agenda.assignments.filter(timeslot__type='break').count() > 0)
self.assertEqual(
meeting.agenda.assignments.filter(timeslot__type='break').count(),
new_meeting.agenda.assignments.filter(timeslot__type='break').count()
)
self.assertTrue(meeting.agenda.assignments.filter(timeslot__type='reg').count() > 0)
self.assertEqual(
meeting.agenda.assignments.filter(timeslot__type='reg').count(),
new_meeting.agenda.assignments.filter(timeslot__type='reg').count()
)
self.assertEqual(new_meeting.attendees, None)

def test_edit_meeting(self):
Expand Down Expand Up @@ -159,16 +148,21 @@ def test_blue_sheets_generate(self):
def test_notifications(self):
"Test Notifications"
meeting = make_meeting_test_data()
mars_group = Group.objects.get(acronym='mars')
ames_group = Group.objects.get(acronym='ames')
ames_stsa = meeting.agenda.assignments.get(session__group=ames_group)
assert ames_stsa.session.status_id == 'schedw'
mars_stsa = meeting.agenda.assignments.get(session__group=mars_group)
mars_stsa.session.status = SessionStatusName.objects.get(slug='appr')
mars_stsa.session.save()
url = reverse('ietf.secr.meetings.views.notifications',kwargs={'meeting_id':72})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
q = PyQuery(response.content)
self.assertEqual(q('#id_notification_list').html(),'ames, mars')

# test that only changes since last notification show up
mars_group = Group.objects.get(acronym='mars')
ames_group = Group.objects.get(acronym='ames')
now = datetime.datetime.now()
then = datetime.datetime.now()+datetime.timedelta(hours=1)
person = Person.objects.get(name="(System)")
Expand All @@ -183,13 +177,19 @@ def test_notifications(self):
q = PyQuery(response.content)
self.assertEqual(q('#id_notification_list').html(),'ames')

# test that email goes out
# test post: email goes out, status changed
mailbox_before = len(outbox)
self.client.login(username="secretary", password="secretary+password")
response = self.client.post(url)
self.assertEqual(response.status_code, 302)
self.assertEqual(len(outbox), mailbox_before + 1)

ames_stsa = meeting.agenda.assignments.get(session__group=ames_group)
print(ames_stsa.session.status_id)
assert ames_stsa.session.status_id == 'sched'
mars_stsa = meeting.agenda.assignments.get(session__group=mars_group)
print(mars_stsa.session.status_id)
assert mars_stsa.session.status_id == 'sched'

def test_meetings_rooms(self):
meeting = make_meeting_test_data()
url = reverse('ietf.secr.meetings.views.rooms',kwargs={'meeting_id':72,'schedule_name':'test-agenda'})
Expand Down
42 changes: 4 additions & 38 deletions ietf/secr/meetings/views.py
@@ -1,3 +1,6 @@
# Copyright The IETF Trust 2007-2019, All Rights Reserved
# -*- coding: utf-8 -*-

import datetime
import os
import time
Expand Down Expand Up @@ -86,46 +89,12 @@ def build_timeslots(meeting,room=None):
location=room,
duration=t.duration)

def build_nonsession(meeting,schedule):
'''
This function takes a meeting object and creates non-session records
for a new meeting, based on the last meeting
'''
last_meeting = get_last_meeting(meeting)
if not last_meeting:
return None

delta = meeting.date - last_meeting.date
system = Person.objects.get(name='(System)')

for slot in TimeSlot.objects.filter(meeting=last_meeting,type__in=('break','reg','other','plenary','lead')):
new_time = slot.time + delta
session = Session.objects.create(meeting=meeting,
name=slot.name,
short=get_session(slot).short,
group=get_session(slot).group,
requested_by=system,
status_id='sched',
type=slot.type)

ts = TimeSlot.objects.create(type=slot.type,
meeting=meeting,
name=slot.name,
time=new_time,
duration=slot.duration,
show_location=slot.show_location)
SchedTimeSessAssignment.objects.create(schedule=schedule,session=session,timeslot=ts)

def check_nonsession(meeting,schedule):
'''
Ensure non-session timeslots exist and have appropriate SchedTimeSessAssignment objects
for the specified schedule.
'''
slots = TimeSlot.objects.filter(meeting=meeting,type__in=('break','reg','other','plenary','lead','offagenda'))
if not slots:
build_nonsession(meeting,schedule)
return None

plenary = slots.filter(type='plenary').first()
if plenary:
assignments = plenary.sessionassignments.all()
Expand Down Expand Up @@ -269,9 +238,6 @@ def add(request):
meeting.save()

populate_important_dates(meeting)

# copy special sessions from previous meeting
build_nonsession(meeting,schedule)

# Create Physical new meeting directory and subdirectories
make_materials_directories(meeting)
Expand Down Expand Up @@ -605,7 +571,7 @@ def notifications(request, meeting_id):
# ensure session state is scheduled
for ss in meeting.agenda.assignments.all():
session = ss.session
if session.status.slug == "schedw":
if session.status.slug in ["schedw", "appr"]:
session.status_id = "sched"
session.scheduled = datetime.datetime.now()
session.save()
Expand Down

0 comments on commit 9a82586

Please sign in to comment.