fix: omit session location when timeslot.show_location is False (#4712)

* fix: omit session location when timeslot.show_location is False

* test: test that location is omitted  when show_location is False
This commit is contained in:
Jennifer Richards 2022-11-06 07:51:07 -04:00 committed by GitHub
parent 8cf309cd6a
commit 594c3f4316
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 5 deletions

View file

@ -39,15 +39,15 @@ from ietf.doc.models import Document
from ietf.group.models import Group, Role, GroupFeatures from ietf.group.models import Group, Role, GroupFeatures
from ietf.group.utils import can_manage_group from ietf.group.utils import can_manage_group
from ietf.person.models import Person from ietf.person.models import Person
from ietf.meeting.helpers import can_approve_interim_request, can_view_interim_request from ietf.meeting.helpers import can_approve_interim_request, can_view_interim_request, preprocess_assignments_for_agenda
from ietf.meeting.helpers import send_interim_approval_request from ietf.meeting.helpers import send_interim_approval_request, AgendaKeywordTagger
from ietf.meeting.helpers import send_interim_meeting_cancellation_notice, send_interim_session_cancellation_notice from ietf.meeting.helpers import send_interim_meeting_cancellation_notice, send_interim_session_cancellation_notice
from ietf.meeting.helpers import send_interim_minutes_reminder, populate_important_dates, update_important_dates from ietf.meeting.helpers import send_interim_minutes_reminder, populate_important_dates, update_important_dates
from ietf.meeting.models import Session, TimeSlot, Meeting, SchedTimeSessAssignment, Schedule, SessionPresentation, SlideSubmission, SchedulingEvent, Room, Constraint, ConstraintName from ietf.meeting.models import Session, TimeSlot, Meeting, SchedTimeSessAssignment, Schedule, SessionPresentation, SlideSubmission, SchedulingEvent, Room, Constraint, ConstraintName
from ietf.meeting.test_data import make_meeting_test_data, make_interim_meeting, make_interim_test_data from ietf.meeting.test_data import make_meeting_test_data, make_interim_meeting, make_interim_test_data
from ietf.meeting.utils import finalize, condition_slide_order from ietf.meeting.utils import finalize, condition_slide_order
from ietf.meeting.utils import add_event_info_to_session_qs from ietf.meeting.utils import add_event_info_to_session_qs
from ietf.meeting.views import session_draft_list, parse_agenda_filter_params, sessions_post_save from ietf.meeting.views import session_draft_list, parse_agenda_filter_params, sessions_post_save, agenda_extract_schedule
from ietf.name.models import SessionStatusName, ImportantDateName, RoleName, ProceedingsMaterialTypeName from ietf.name.models import SessionStatusName, ImportantDateName, RoleName, ProceedingsMaterialTypeName
from ietf.utils.decorators import skip_coverage from ietf.utils.decorators import skip_coverage
from ietf.utils.mail import outbox, empty_outbox, get_payload_text from ietf.utils.mail import outbox, empty_outbox, get_payload_text
@ -147,6 +147,31 @@ class BaseMeetingTestCase(TestCase):
"This is a slideshow") "This is a slideshow")
class AgendaApiTests(TestCase):
def test_agenda_extract_schedule_location(self):
meeting = MeetingFactory(type_id='ietf')
room = RoomFactory(meeting=meeting, floorplan=FloorPlanFactory(meeting=meeting))
hidden_ts = TimeSlotFactory(meeting=meeting, location=room, show_location=False)
shown_ts = TimeSlotFactory(meeting=meeting, location=room, show_location=True)
hidden_sess = SessionFactory(meeting=meeting, add_to_schedule=False)
shown_sess = SessionFactory(meeting=meeting, add_to_schedule=False)
meeting.schedule.assignments.create(timeslot=hidden_ts, session=hidden_sess)
meeting.schedule.assignments.create(timeslot=shown_ts, session=shown_sess)
processed = preprocess_assignments_for_agenda(
SchedTimeSessAssignment.objects.filter(session__in=[hidden_sess, shown_sess]),
meeting
)
AgendaKeywordTagger(assignments=processed).apply()
extracted = {item.pk: agenda_extract_schedule(item) for item in processed}
hidden = extracted[hidden_sess.pk]
self.assertIsNone(hidden['room'])
self.assertEqual(hidden['location'], {})
shown = extracted[shown_sess.pk]
self.assertEqual(shown['room'], room.name)
self.assertEqual(shown['location'], {'name': room.floorplan.name, 'short': room.floorplan.short})
class MeetingTests(BaseMeetingTestCase): class MeetingTests(BaseMeetingTestCase):
def test_meeting_agenda(self): def test_meeting_agenda(self):

View file

@ -1701,11 +1701,11 @@ def agenda_extract_schedule (item):
return { return {
"id": item.id, "id": item.id,
"sessionId": item.session.id, "sessionId": item.session.id,
"room": item.room_name, "room": item.room_name if item.timeslot.show_location else None,
"location": { "location": {
"short": item.timeslot.location.floorplan.short, "short": item.timeslot.location.floorplan.short,
"name": item.timeslot.location.floorplan.name, "name": item.timeslot.location.floorplan.name,
} if (item.timeslot.location and item.timeslot.location.floorplan) else {}, } if (item.timeslot.show_location and item.timeslot.location and item.timeslot.location.floorplan) else {},
"acronym": item.acronym, "acronym": item.acronym,
"duration": item.timeslot.duration.seconds, "duration": item.timeslot.duration.seconds,
"name": item.timeslot.name, "name": item.timeslot.name,