Skip to content

Commit 74b14b6

Browse files
committed
Merged in [19339] [19340] from jennifer@painless-security.com:
Refactor get_related_meeting to simplify / correctly handle recording doctype - Legacy-Id: 19343 Note: SVN reference [19339] has been migrated to Git commit 05870ad Note: SVN reference [19340] has been migrated to Git commit c0b0762
2 parents 77cead5 + c0b0762 commit 74b14b6

3 files changed

Lines changed: 39 additions & 15 deletions

File tree

changelog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ ietfdb (7.37.0) ietf; urgency=medium
6868
Adjusted proceedings and materials templates to show fewer unnecessary
6969
duplicates. Fixes #2981 and #3387.
7070

71+
* Merged in [19339] [19340] from jennifer@painless-security.com:
72+
Refactor get_related_meeting to simplify / correctly handle
73+
recording doctype.
74+
7175
-- Robert Sparks <rjsparks@nostrum.com> 04 Sep 2021 15:37:50 +0000
7276

7377

ietf/doc/models.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -447,19 +447,9 @@ def get_related_meeting(self):
447447
"""Get the meeting this document relates to"""
448448
if not self.meeting_related():
449449
return None # no related meeting if not meeting_related!
450-
elif self.type_id in ("agenda", "minutes", "slides", "bluesheets",):
451-
# session-related
452-
session = self.get_related_session()
453-
if session is not None:
454-
return session.meeting
455-
elif self.type_id == "procmaterials":
456-
# proceedings-related
457-
material = self.get_related_proceedings_material()
458-
if material is not None:
459-
return material.meeting
460-
else:
461-
log.unreachable('2021-08-29') # if meeting_related, there must be a way to retrieve the meeting!
462-
return None
450+
# get an item that links this doc to a meeting
451+
item = self.get_related_session() or self.get_related_proceedings_material()
452+
return getattr(item, 'meeting', None)
463453

464454
def relations_that(self, relationship):
465455
"""Return the related-document objects that describe a given relationship targeting self."""

ietf/doc/tests.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@
4141
from ietf.group.factories import GroupFactory, RoleFactory
4242
from ietf.ipr.factories import HolderIprDisclosureFactory
4343
from ietf.meeting.models import Meeting, Session, SessionPresentation, SchedulingEvent
44-
from ietf.meeting.factories import MeetingFactory, SessionFactory, SessionPresentationFactory
44+
from ietf.meeting.factories import ( MeetingFactory, SessionFactory, SessionPresentationFactory,
45+
ProceedingsMaterialFactory )
4546

46-
from ietf.name.models import SessionStatusName, BallotPositionName
47+
from ietf.name.models import SessionStatusName, BallotPositionName, DocTypeName
4748
from ietf.person.models import Person
4849
from ietf.person.factories import PersonFactory, EmailFactory
4950
from ietf.utils.mail import outbox
@@ -2246,6 +2247,35 @@ def test_add_document_session(self):
22462247
self.assertEqual(response.status_code,302)
22472248
self.assertEqual(2,doc.docevent_set.count())
22482249

2250+
def test_get_related_meeting(self):
2251+
"""Should be able to retrieve related meeting"""
2252+
meeting = MeetingFactory(type_id='ietf')
2253+
session = SessionFactory(meeting=meeting)
2254+
procmat = ProceedingsMaterialFactory(meeting=meeting)
2255+
for doctype in DocTypeName.objects.filter(used=True):
2256+
doc = DocumentFactory(type=doctype)
2257+
self.assertIsNone(doc.get_related_meeting(), 'Doc does not yet have a connection to the meeting')
2258+
# test through a session
2259+
doc.session_set.add(session)
2260+
doc = Document.objects.get(pk=doc.pk)
2261+
if doc.meeting_related():
2262+
self.assertEqual(doc.get_related_meeting(), meeting, f'{doc.type.slug} should be related to meeting')
2263+
else:
2264+
self.assertIsNone(doc.get_related_meeting(), f'{doc.type.slug} should not be related to meeting')
2265+
# test with both session and procmat
2266+
doc.proceedingsmaterial_set.add(procmat)
2267+
doc = Document.objects.get(pk=doc.pk)
2268+
if doc.meeting_related():
2269+
self.assertEqual(doc.get_related_meeting(), meeting, f'{doc.type.slug} should be related to meeting')
2270+
else:
2271+
self.assertIsNone(doc.get_related_meeting(), f'{doc.type.slug} should not be related to meeting')
2272+
# and test with only procmat
2273+
doc.session_set.remove(session)
2274+
doc = Document.objects.get(pk=doc.pk)
2275+
if doc.meeting_related():
2276+
self.assertEqual(doc.get_related_meeting(), meeting, f'{doc.type.slug} should be related to meeting')
2277+
else:
2278+
self.assertIsNone(doc.get_related_meeting(), f'{doc.type.slug} should not be related to meeting')
22492279

22502280
class ChartTests(ResourceTestCaseMixin, TestCase):
22512281
def test_search_chart_conf(self):

0 commit comments

Comments
 (0)