From c0b076258b79626c6682aa2be8219cea8361f248 Mon Sep 17 00:00:00 2001
From: Jennifer Richards <jennifer@painless-security.com>
Date: Sun, 5 Sep 2021 13:32:01 +0000
Subject: [PATCH] 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):