fix: Only consider ietf meetings as "next" for agenda_ical or agenda_json (#5238)

* style: Clean up get_meeting() signature and code style

* chore: Remove unused parameter from agenda_ical() view's signature

* fix: Only consider ietf meetings as "next" in agenda_ical

* fix: Only consider ietf meetings as "next" in agenda_json

* test: Test agenda_json "next meeting" and clean up agenda_ical test

* style: Reformat new tests using Black style
This commit is contained in:
Jennifer Richards 2023-02-28 13:47:20 -04:00 committed by GitHub
parent cf94b896c8
commit 9a1de57c9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 9 deletions

View file

@ -36,12 +36,14 @@ from ietf.utils.pipe import pipe
from ietf.utils.text import xslugify
def get_meeting(num=None,type_in=['ietf',],days=28):
def get_meeting(num=None, type_in=('ietf',), days=28):
meetings = Meeting.objects
if type_in:
if type_in is not None:
meetings = meetings.filter(type__in=type_in)
if num == None:
meetings = meetings.filter(date__gte=timezone.now()-datetime.timedelta(days=days)).order_by('date')
if num is None:
meetings = meetings.filter(
date__gte=timezone.now() - datetime.timedelta(days=days)
).order_by('date')
else:
meetings = meetings.filter(number=num)
if meetings.exists():

View file

@ -345,6 +345,39 @@ class MeetingTests(BaseMeetingTestCase):
r = self.client.get(urlreverse('floor-plan', kwargs=dict(num=meeting.number)))
self.assertEqual(r.status_code, 200)
def test_agenda_ical_next_meeting_type(self):
# start with no upcoming IETF meetings, just an interim
MeetingFactory(
type_id="interim", date=date_today() + datetime.timedelta(days=15)
)
r = self.client.get(urlreverse("ietf.meeting.views.agenda_ical", kwargs={}))
self.assertEqual(
r.status_code, 404, "Should not return an interim meeting as next meeting"
)
# create an IETF meeting after the interim - it should be found as "next"
ietf_meeting = MeetingFactory(
type_id="ietf", date=date_today() + datetime.timedelta(days=30)
)
SessionFactory(meeting=ietf_meeting, name="Session at IETF meeting")
r = self.client.get(urlreverse("ietf.meeting.views.agenda_ical", kwargs={}))
self.assertContains(r, "Session at IETF meeting", status_code=200)
def test_agenda_json_next_meeting_type(self):
# start with no upcoming IETF meetings, just an interim
MeetingFactory(
type_id="interim", date=date_today() + datetime.timedelta(days=15)
)
r = self.client.get(urlreverse("ietf.meeting.views.agenda_json", kwargs={}))
self.assertEqual(
r.status_code, 404, "Should not return an interim meeting as next meeting"
)
# create an IETF meeting after the interim - it should be found as "next"
ietf_meeting = MeetingFactory(
type_id="ietf", date=date_today() + datetime.timedelta(days=30)
)
SessionFactory(meeting=ietf_meeting, name="Session at IETF meeting")
r = self.client.get(urlreverse("ietf.meeting.views.agenda_json", kwargs={}))
self.assertContains(r, "Session at IETF meeting", status_code=200)
@override_settings(PROCEEDINGS_V1_BASE_URL='https://example.com/{meeting.number}')
def test_agenda_redirects_for_old_meetings(self):

View file

@ -2041,10 +2041,13 @@ def should_include_assignment(filter_params, assignment):
hidden = len(set(filter_params['hide']).intersection(assignment.filter_keywords)) > 0
return shown and not hidden
def agenda_ical(request, num=None, name=None, acronym=None, session_id=None):
def agenda_ical(request, num=None, acronym=None, session_id=None):
"""Agenda ical view
By default, all agenda items will be shown. A filter can be specified in
If num is None, looks for the next IETF meeting. Otherwise, uses the requested meeting
regardless of its type.
By default, all agenda items will be shown. A filter can be specified in
the querystring. It has the format
?show=...&hide=...&showtypes=...&hidetypes=...
@ -2059,8 +2062,13 @@ def agenda_ical(request, num=None, name=None, acronym=None, session_id=None):
Hiding (by wg or type) takes priority over showing.
"""
meeting = get_meeting(num, type_in=None)
schedule = get_schedule(meeting, name)
if num is None:
meeting = get_ietf_meeting()
if meeting is None:
raise Http404
else:
meeting = get_meeting(num, type_in=None) # get requested meeting, whatever its type
schedule = get_schedule(meeting)
updated = meeting.updated()
if schedule is None and acronym is None and session_id is None:
@ -2099,7 +2107,12 @@ def agenda_ical(request, num=None, name=None, acronym=None, session_id=None):
@cache_page(15 * 60)
def agenda_json(request, num=None):
meeting = get_meeting(num, type_in=['ietf','interim'])
if num is None:
meeting = get_ietf_meeting()
if meeting is None:
raise Http404
else:
meeting = get_meeting(num, type_in=None) # get requested meeting, whatever its type
sessions = []
locations = set()