|
20 | 20 | from ietf.doc.models import Document, DocAlias, State, RelatedDocument |
21 | 21 | from ietf.doc.factories import WgDraftFactory, IndividualDraftFactory, ConflictReviewFactory, BaseDocumentFactory, CharterFactory, WgRfcFactory, IndividualRfcFactory |
22 | 22 | from ietf.doc.utils import create_ballot_if_not_open |
23 | | -from ietf.group.factories import RoleFactory, GroupFactory |
| 23 | +from ietf.group.factories import RoleFactory, GroupFactory, DatedGroupMilestoneFactory, DatelessGroupMilestoneFactory |
24 | 24 | from ietf.group.models import Group, GroupMilestone, Role |
25 | 25 | from ietf.iesg.agenda import get_agenda_date, agenda_data, fill_in_agenda_administrivia, agenda_sections |
26 | 26 | from ietf.iesg.models import TelechatDate, TelechatAgendaContent |
@@ -71,7 +71,50 @@ def test_milestones_needing_review(self): |
71 | 71 | r = self.client.get(url) |
72 | 72 | self.assertEqual(r.status_code, 200) |
73 | 73 | self.assertNotContains(r, m.desc) |
| 74 | + |
| 75 | + def test_milestones_needing_review_ordering(self): |
| 76 | + dated_group = GroupFactory(uses_milestone_dates=True) |
| 77 | + RoleFactory( |
| 78 | + name_id='ad', |
| 79 | + group=dated_group, |
| 80 | + person=Person.objects.get(user__username='ad'), |
| 81 | + ) |
| 82 | + dated_milestones = DatedGroupMilestoneFactory.create_batch( |
| 83 | + 2, group=dated_group, state_id="review" |
| 84 | + ) |
| 85 | + dated_milestones[0].due -= datetime.timedelta(days=1) # make this one earlier |
| 86 | + dated_milestones[0].save() |
| 87 | + |
| 88 | + dateless_group = GroupFactory(uses_milestone_dates=False) |
| 89 | + RoleFactory( |
| 90 | + name_id='ad', |
| 91 | + group=dateless_group, |
| 92 | + person=Person.objects.get(user__username='ad'), |
| 93 | + ) |
| 94 | + dateless_milestones = DatelessGroupMilestoneFactory.create_batch( |
| 95 | + 2, group=dateless_group, state_id="review" |
| 96 | + ) |
| 97 | + |
| 98 | + url = urlreverse("ietf.iesg.views.milestones_needing_review") |
| 99 | + self.client.login(username="ad", password="ad+password") |
| 100 | + r = self.client.get(url) |
| 101 | + self.assertEqual(r.status_code, 200) |
| 102 | + pq = PyQuery(r.content) |
74 | 103 |
|
| 104 | + # check order-by-date |
| 105 | + dated_tbody = pq(f'td:contains("{dated_milestones[0].desc}")').closest("tbody") |
| 106 | + next_td = dated_tbody.find('td:contains("Next")') |
| 107 | + self.assertEqual(next_td.siblings()[0].text.strip(), dated_milestones[0].desc) |
| 108 | + last_td = dated_tbody.find('td:contains("Last")') |
| 109 | + self.assertEqual(last_td.siblings()[0].text.strip(), dated_milestones[1].desc) |
| 110 | + |
| 111 | + # check order-by-order |
| 112 | + dateless_tbody = pq(f'td:contains("{dateless_milestones[0].desc}")').closest("tbody") |
| 113 | + next_td = dateless_tbody.find('td:contains("Next")') |
| 114 | + self.assertEqual(next_td.siblings()[0].text.strip(), dateless_milestones[0].desc) |
| 115 | + last_td = dateless_tbody.find('td:contains("Last")') |
| 116 | + self.assertEqual(last_td.siblings()[0].text.strip(), dateless_milestones[1].desc) |
| 117 | + |
75 | 118 |
|
76 | 119 | def test_review_decisions(self): |
77 | 120 | draft = WgDraftFactory() |
|
0 commit comments