From 2451165b5d56dd6d599681b3b6559c972ddf20e9 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 21 Jun 2024 12:03:15 -0500 Subject: [PATCH 1/4] chore: remove whitespace change --- ietf/iesg/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index 481b10f817..4298c7a7b3 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -166,7 +166,7 @@ def setUp(self): "conflrev": Document.objects.get(name="conflict-review-imaginary-irtf-submission"), "statchg": Document.objects.get(name="status-change-imaginary-mid-review"), "charter": Document.objects.filter(type="charter")[0], - } + } by = Person.objects.get(name="Areað Irector") date = get_agenda_date() From d5aff6fc416a0317aef7ef8ce220ab29205f1bd3 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 21 Jun 2024 12:04:49 -0500 Subject: [PATCH 2/4] fix: look into the BallotPositionDocEventObject --- ietf/iesg/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ietf/iesg/utils.py b/ietf/iesg/utils.py index 62fe9f9fe3..a56fa72cee 100644 --- a/ietf/iesg/utils.py +++ b/ietf/iesg/utils.py @@ -34,7 +34,7 @@ def telechat_page_count(date=None, docs=None, ad=None): if ballot: positions = ballot.active_balloter_positions() ad_position = positions[ad] - if ad_position is None or ad_position == "norecord": + if ad_position is None or ad_position.pos_id == "norecord": ad_pages_left_to_ballot_on += draft.pages or 0 pages_for_action = 0 From 8446ad311c48957ac480e2202d4eaafaf1209b62 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 21 Jun 2024 12:13:38 -0500 Subject: [PATCH 3/4] chore: remove prints --- ietf/iesg/tests.py | 98 +++------------------------------------------- ietf/iesg/views.py | 3 -- 2 files changed, 5 insertions(+), 96 deletions(-) diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index 4298c7a7b3..b76fcefaee 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -581,107 +581,19 @@ def test_admin_change(self): self.assertEqual(draft.telechat_date(),today) class IESGAgendaTelechatPagesTests(TestCase): - def setUp(self): - super().setUp() - - # ad = Person.objects.get(user__username="ad") - - by = Person.objects.get(name="Areað Irector") - - mars = GroupFactory(acronym='mars',parent=Group.objects.get(acronym='farfut')) - - agenda_date = get_agenda_date() - - mars = GroupFactory(acronym='mars',parent=Group.objects.get(acronym='farfut')) - wgdraft = WgDraftFactory(name='draft-ietf-mars-test', group=mars, intended_std_level_id='ps') - rfc = IndividualRfcFactory.create(stream_id='irtf', rfc_number=6666, std_level_id='inf', ) - wgdraft.relateddocument_set.create(target=rfc, relationship_id='refnorm') - ise_draft = IndividualDraftFactory(name='draft-imaginary-independent-submission') - ise_draft.stream = StreamName.objects.get(slug="ise") - ise_draft.save_with_history([DocEvent(doc=ise_draft, rev=ise_draft.rev, type="changed_stream", by=Person.objects.get(user__username="secretary"), desc="Test")]) - - date = date_today(settings.TIME_ZONE) + datetime.timedelta(days=50) - TelechatDate.objects.create(date=date) - - telechat_event = TelechatDocEvent.objects.create( - type="scheduled_for_telechat", - doc=wgdraft, - rev=wgdraft.rev, - by=by, - telechat_date=date, - returning_item=True) - telechat_event.save() - - ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission', review_of=ise_draft) - BaseDocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review') - WgRfcFactory(std_level_id='inf') - WgRfcFactory(std_level_id='ps') - CharterFactory(states=[('charter','iesgrev')]) - - self.telechat_docs = { - "ietf_draft": Document.objects.get(name="draft-ietf-mars-test"), - "ise_draft": ise_draft, - "conflrev": Document.objects.get(name="conflict-review-imaginary-irtf-submission"), - "statchg": Document.objects.get(name="status-change-imaginary-mid-review"), - "charter": Document.objects.filter(type="charter")[0], - } - - by = Person.objects.get(name="Areað Irector") - date = get_agenda_date() - - for d in list(self.telechat_docs.values()): - TelechatDocEvent.objects.create(type="scheduled_for_telechat", - doc=d, - rev=d.rev, - by=by, - telechat_date=date, - returning_item=True) - - # mars = GroupFactory(acronym='mars',parent=Group.objects.get(acronym='farfut')) - dates = list(TelechatDate.objects.order_by('date').values_list("date", flat=True)[:4]) - for index, date in enumerate(dates): - for n in range(10): - # candidates = Document.objects.filter( - # docevent__telechatdocevent__telechat_date=date - # ).distinct() - draft = WgDraftFactory( - name='draft-ietf-test-%s-%i' % (date, n), - # time=date, - group=mars, - intended_std_level_id='ps', - pages=20 * (index + 1) - ) - TelechatDocEvent.objects.create(type="scheduled_for_telechat", - doc=draft, - rev=draft.rev, - by=by, - telechat_date=agenda_date, - returning_item=True) - # update_telechat(None, draft, ad, date) - # ballot = create_ballot_if_not_open(None, draft, ad, 'approve') - # pos = BallotPositionDocEvent() - # pos.ballot = ballot - # pos.pos_id = "discuss" - # pos.type = "changed_ballot_position" - # pos.doc = draft - # pos.rev = draft.rev - # pos.balloter = pos.by = ad - # pos.save() - def test_ad_pages_left_to_ballot_on(self): url = urlreverse("ietf.iesg.views.agenda_documents") - r = self.client.get(url) - self.assertEqual(r.status_code, 200) - - logged_in_request = self.client.get(url) - username = "ad" can_login = self.client.login(username=username, password="%s+password" % username) self.assertTrue(can_login) - telechats = logged_in_request.context["telechats"] + response = self.client.get(url) + + + telechats = response.context["telechats"] + return 0 for telechat in telechats: print("actual", telechat["pages"], telechat["ad_pages_left_to_ballot_on"]) self.assertGreater(len(telechats), 0, "Expected multiple telechats but received %d" % (len(telechats))) diff --git a/ietf/iesg/views.py b/ietf/iesg/views.py index c1830bfa91..8edf9bfcdd 100644 --- a/ietf/iesg/views.py +++ b/ietf/iesg/views.py @@ -361,7 +361,6 @@ def handle_reschedule_form(request, doc, dates, status): return form def agenda_documents(request): - print("route agenda_documents") ad = request.user.person if has_role(request.user, "Area Director") else None dates = list(TelechatDate.objects.active().order_by('date').values_list("date", flat=True)[:4]) @@ -396,8 +395,6 @@ def agenda_documents(request): page_count = telechat_page_count(docs=docs_by_date[date], ad=ad) pages = page_count.for_approval - print("date", date) - telechats.append({ "date": date, "pages": pages, From 191ac983a347b3a185736fd56bb9e4c05eb9121d Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 21 Jun 2024 13:41:34 -0500 Subject: [PATCH 4/4] fix: restructure test --- ietf/iesg/tests.py | 68 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index b76fcefaee..a7170084fa 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -18,7 +18,7 @@ from ietf.doc.models import DocEvent, BallotPositionDocEvent, TelechatDocEvent from ietf.doc.models import Document, State, RelatedDocument -from ietf.doc.factories import WgDraftFactory, IndividualDraftFactory, ConflictReviewFactory, BaseDocumentFactory, CharterFactory, WgRfcFactory, IndividualRfcFactory +from ietf.doc.factories import BallotDocEventFactory, BallotPositionDocEventFactory, TelechatDocEventFactory, WgDraftFactory, IndividualDraftFactory, ConflictReviewFactory, BaseDocumentFactory, CharterFactory, WgRfcFactory, IndividualRfcFactory from ietf.doc.utils import create_ballot_if_not_open from ietf.group.factories import RoleFactory, GroupFactory, DatedGroupMilestoneFactory, DatelessGroupMilestoneFactory from ietf.group.models import Group, GroupMilestone, Role @@ -581,35 +581,63 @@ def test_admin_change(self): self.assertEqual(draft.telechat_date(),today) class IESGAgendaTelechatPagesTests(TestCase): + def setUp(self): + super().setUp() + # make_immutable_test_data made a set of future telechats - only need one + # We'll take the "next" one + self.telechat_date = get_agenda_date() + # make_immutable_test_data made and area with only one ad - give it another + ad = Person.objects.get(user__username="ad") + adrole = Role.objects.get(person=ad, name="ad") + ad2 = RoleFactory(group=adrole.group, name_id="ad").person + self.ads=[ad,ad2] + # Make some drafts + docs = [ + WgDraftFactory(pages=2, states=[('draft-iesg','iesg-eva'),]), + IndividualDraftFactory(pages=20, states=[('draft-iesg','iesg-eva'),]), + WgDraftFactory(pages=200, states=[('draft-iesg','iesg-eva'),]), + ] + # Put them on the telechat + for doc in docs: + TelechatDocEventFactory(doc=doc, telechat_date=self.telechat_date) + # Give them ballots + ballots = [BallotDocEventFactory(doc=doc) for doc in docs] + + # Give the "ad" Area-Director a discuss on one + BallotPositionDocEventFactory(balloter=ad, doc=docs[0], pos_id="discuss", ballot=ballots[0]) + # and a "norecord" position on another + BallotPositionDocEventFactory(balloter=ad, doc=docs[1], pos_id="norecord", ballot=ballots[1]) + # Now "ad" should have 220 pages left to ballot on. + # Every other ad should have 222 pages left to ballot on. + def test_ad_pages_left_to_ballot_on(self): url = urlreverse("ietf.iesg.views.agenda_documents") - username = "ad" - can_login = self.client.login(username=username, password="%s+password" % username) - self.assertTrue(can_login) + # A non-AD user won't get "pages left" + response = self.client.get(url) + telechat = response.context["telechats"][0] + self.assertEqual(telechat["date"], self.telechat_date) + self.assertEqual(telechat["ad_pages_left_to_ballot_on"],0) + self.assertNotContains(response,"pages left to ballot on") + + username=self.ads[0].user.username + self.assertTrue(self.client.login(username=username, password=f"{username}+password")) response = self.client.get(url) + telechat = response.context["telechats"][0] + self.assertEqual(telechat["ad_pages_left_to_ballot_on"],220) + self.assertContains(response,"220 pages left to ballot on") + self.client.logout() + username=self.ads[1].user.username + self.assertTrue(self.client.login(username=username, password=f"{username}+password")) - telechats = response.context["telechats"] - return 0 - for telechat in telechats: - print("actual", telechat["pages"], telechat["ad_pages_left_to_ballot_on"]) - self.assertGreater(len(telechats), 0, "Expected multiple telechats but received %d" % (len(telechats))) - self.assertEqual(telechats[0]["ad_pages_left_to_ballot_on"], 383, "Expected a specific number of pages left to ballot on for this AD '%s'" % (username)) + response = self.client.get(url) + telechat = response.context["telechats"][0] + self.assertEqual(telechat["ad_pages_left_to_ballot_on"],222) - for index, telechat in enumerate(telechats): - pages = telechat["pages"] - ad_pages_left_to_ballot_on = telechat["ad_pages_left_to_ballot_on"] - previous_pages = r.context["telechats"][index]["pages"] - self.assertEqual(previous_pages, pages, "Expected same page count as previous request but was %s vs %s" % (previous_pages, pages)) - self.assertGreaterEqual(pages, 0, "%s pages not in response" % (pages)) - self.assertGreaterEqual(ad_pages_left_to_ballot_on, 0, "%s ad_pages_left_to_ballot_on not in response" % (ad_pages_left_to_ballot_on)) - # `ad_pages_left_to_ballot_on` should never exceed `pages` - self.assertGreaterEqual(pages, ad_pages_left_to_ballot_on, "pages < ad_pages_left_to_ballot_on") - self.client.logout() class RescheduleOnAgendaTests(TestCase):