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 05870adeeb

Note: SVN reference [19340] has been migrated to Git commit c0b076258b
This commit is contained in:
Robert Sparks 2021-09-05 14:57:32 +00:00
commit 74b14b6de5
3 changed files with 39 additions and 15 deletions

View file

@ -68,6 +68,10 @@ ietfdb (7.37.0) ietf; urgency=medium
Adjusted proceedings and materials templates to show fewer unnecessary Adjusted proceedings and materials templates to show fewer unnecessary
duplicates. Fixes #2981 and #3387. duplicates. Fixes #2981 and #3387.
* Merged in [19339] [19340] from jennifer@painless-security.com:
Refactor get_related_meeting to simplify / correctly handle
recording doctype.
-- Robert Sparks <rjsparks@nostrum.com> 04 Sep 2021 15:37:50 +0000 -- Robert Sparks <rjsparks@nostrum.com> 04 Sep 2021 15:37:50 +0000

View file

@ -447,19 +447,9 @@ class DocumentInfo(models.Model):
"""Get the meeting this document relates to""" """Get the meeting this document relates to"""
if not self.meeting_related(): if not self.meeting_related():
return None # no related meeting if not meeting_related! return None # no related meeting if not meeting_related!
elif self.type_id in ("agenda", "minutes", "slides", "bluesheets",): # get an item that links this doc to a meeting
# session-related item = self.get_related_session() or self.get_related_proceedings_material()
session = self.get_related_session() return getattr(item, 'meeting', None)
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
def relations_that(self, relationship): def relations_that(self, relationship):
"""Return the related-document objects that describe a given relationship targeting self.""" """Return the related-document objects that describe a given relationship targeting self."""

View file

@ -41,9 +41,10 @@ from ietf.group.models import Group
from ietf.group.factories import GroupFactory, RoleFactory from ietf.group.factories import GroupFactory, RoleFactory
from ietf.ipr.factories import HolderIprDisclosureFactory from ietf.ipr.factories import HolderIprDisclosureFactory
from ietf.meeting.models import Meeting, Session, SessionPresentation, SchedulingEvent 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.models import Person
from ietf.person.factories import PersonFactory, EmailFactory from ietf.person.factories import PersonFactory, EmailFactory
from ietf.utils.mail import outbox from ietf.utils.mail import outbox
@ -2246,6 +2247,35 @@ class DocumentMeetingTests(TestCase):
self.assertEqual(response.status_code,302) self.assertEqual(response.status_code,302)
self.assertEqual(2,doc.docevent_set.count()) 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): class ChartTests(ResourceTestCaseMixin, TestCase):
def test_search_chart_conf(self): def test_search_chart_conf(self):