From 05870adeebed50c812f34e6b9089e0f8db17dbf0 Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Sun, 5 Sep 2021 13:02:33 +0000 Subject: [PATCH 1/2] Refactor get_related_meeting to simplify / correctly handle recording doctype - Legacy-Id: 19339 --- ietf/doc/models.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/ietf/doc/models.py b/ietf/doc/models.py index ff71e4a86..cd7327428 100644 --- a/ietf/doc/models.py +++ b/ietf/doc/models.py @@ -447,19 +447,9 @@ class DocumentInfo(models.Model): """Get the meeting this document relates to""" if not self.meeting_related(): return None # no related meeting if not meeting_related! - elif self.type_id in ("agenda", "minutes", "slides", "bluesheets",): - # session-related - session = self.get_related_session() - if session is not None: - return session.meeting - elif self.type_id == "procmaterials": - # proceedings-related - material = self.get_related_proceedings_material() - if material is not None: - return material.meeting - else: - log.unreachable('2021-08-29') # if meeting_related, there must be a way to retrieve the meeting! - return None + # get an item that links this doc to a meeting + item = self.get_related_session() or self.get_related_proceedings_material() + return getattr(item, 'meeting', None) def relations_that(self, relationship): """Return the related-document objects that describe a given relationship targeting self.""" From c0b076258b79626c6682aa2be8219cea8361f248 Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Sun, 5 Sep 2021 13:32:01 +0000 Subject: [PATCH 2/2] Add test for get_related_meeting. Branch ready for merge. - Legacy-Id: 19340 --- ietf/doc/tests.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index f29ed73d9..0b6f3c4a0 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -41,9 +41,10 @@ from ietf.group.models import Group from ietf.group.factories import GroupFactory, RoleFactory from ietf.ipr.factories import HolderIprDisclosureFactory from ietf.meeting.models import Meeting, Session, SessionPresentation, SchedulingEvent -from ietf.meeting.factories import MeetingFactory, SessionFactory, SessionPresentationFactory +from ietf.meeting.factories import ( MeetingFactory, SessionFactory, SessionPresentationFactory, + ProceedingsMaterialFactory ) -from ietf.name.models import SessionStatusName, BallotPositionName +from ietf.name.models import SessionStatusName, BallotPositionName, DocTypeName from ietf.person.models import Person from ietf.person.factories import PersonFactory, EmailFactory from ietf.utils.mail import outbox @@ -2246,6 +2247,35 @@ class DocumentMeetingTests(TestCase): self.assertEqual(response.status_code,302) self.assertEqual(2,doc.docevent_set.count()) + def test_get_related_meeting(self): + """Should be able to retrieve related meeting""" + meeting = MeetingFactory(type_id='ietf') + session = SessionFactory(meeting=meeting) + procmat = ProceedingsMaterialFactory(meeting=meeting) + for doctype in DocTypeName.objects.filter(used=True): + doc = DocumentFactory(type=doctype) + self.assertIsNone(doc.get_related_meeting(), 'Doc does not yet have a connection to the meeting') + # test through a session + doc.session_set.add(session) + doc = Document.objects.get(pk=doc.pk) + if doc.meeting_related(): + self.assertEqual(doc.get_related_meeting(), meeting, f'{doc.type.slug} should be related to meeting') + else: + self.assertIsNone(doc.get_related_meeting(), f'{doc.type.slug} should not be related to meeting') + # test with both session and procmat + doc.proceedingsmaterial_set.add(procmat) + doc = Document.objects.get(pk=doc.pk) + if doc.meeting_related(): + self.assertEqual(doc.get_related_meeting(), meeting, f'{doc.type.slug} should be related to meeting') + else: + self.assertIsNone(doc.get_related_meeting(), f'{doc.type.slug} should not be related to meeting') + # and test with only procmat + doc.session_set.remove(session) + doc = Document.objects.get(pk=doc.pk) + if doc.meeting_related(): + self.assertEqual(doc.get_related_meeting(), meeting, f'{doc.type.slug} should be related to meeting') + else: + self.assertIsNone(doc.get_related_meeting(), f'{doc.type.slug} should not be related to meeting') class ChartTests(ResourceTestCaseMixin, TestCase): def test_search_chart_conf(self):