|
32 | 32 | from ietf.utils.test_utils import TestCase, login_testing_unauthorized |
33 | 33 | from ietf.utils.mail import outbox, empty_outbox, get_payload_text |
34 | 34 | from ietf.utils.text import unwrap |
35 | | -from ietf.utils.timezone import date_today |
| 35 | +from ietf.utils.timezone import date_today, datetime_today |
36 | 36 |
|
37 | 37 |
|
38 | 38 | class EditPositionTests(TestCase): |
@@ -529,13 +529,46 @@ def test_issue_ballot_warn_if_early(self): |
529 | 529 | login_testing_unauthorized(self, "secretary", url) |
530 | 530 |
|
531 | 531 | # expect warning about issuing a ballot before IETF Last Call is done |
| 532 | + # No last call has yet been issued |
532 | 533 | r = self.client.get(url) |
533 | 534 | self.assertEqual(r.status_code, 200) |
534 | 535 | q = PyQuery(r.content) |
535 | 536 | self.assertEqual(len(q('textarea[name=ballot_writeup]')), 1) |
536 | 537 | self.assertTrue(q('[class=text-danger]:contains("not completed IETF Last Call")')) |
537 | 538 | self.assertTrue(q('[type=submit]:contains("Save")')) |
538 | 539 |
|
| 540 | + # Last call exists but hasn't expired |
| 541 | + LastCallDocEvent.objects.create( |
| 542 | + doc=draft, |
| 543 | + expires=datetime_today()+datetime.timedelta(days=14), |
| 544 | + by=Person.objects.get(name="(System)") |
| 545 | + ) |
| 546 | + r = self.client.get(url) |
| 547 | + self.assertEqual(r.status_code, 200) |
| 548 | + q = PyQuery(r.content) |
| 549 | + self.assertTrue(q('[class=text-danger]:contains("not completed IETF Last Call")')) |
| 550 | + |
| 551 | + # Last call exists and has expired |
| 552 | + LastCallDocEvent.objects.filter(doc=draft).update(expires=datetime_today()-datetime.timedelta(days=2)) |
| 553 | + r = self.client.get(url) |
| 554 | + self.assertEqual(r.status_code, 200) |
| 555 | + q = PyQuery(r.content) |
| 556 | + self.assertFalse(q('[class=text-danger]:contains("not completed IETF Last Call")')) |
| 557 | + |
| 558 | + for state_slug in ["lc", "watching", "ad-eval"]: |
| 559 | + draft.set_state(State.objects.get(type="draft-iesg",slug=state_slug)) |
| 560 | + r = self.client.get(url) |
| 561 | + self.assertEqual(r.status_code, 200) |
| 562 | + q = PyQuery(r.content) |
| 563 | + self.assertTrue(q('[class=text-danger]:contains("It would be unexpected to issue a ballot while in this state.")')) |
| 564 | + |
| 565 | + draft.set_state(State.objects.get(type="draft-iesg",slug="writeupw")) |
| 566 | + r = self.client.get(url) |
| 567 | + self.assertEqual(r.status_code, 200) |
| 568 | + q = PyQuery(r.content) |
| 569 | + self.assertFalse(q('[class=text-danger]:contains("It would be unexpected to issue a ballot while in this state.")')) |
| 570 | + |
| 571 | + |
539 | 572 | def test_edit_approval_text(self): |
540 | 573 | ad = Person.objects.get(user__username="ad") |
541 | 574 | draft = WgDraftFactory(ad=ad,states=[('draft','active'),('draft-iesg','iesg-eva')],intended_std_level_id='ps',group__parent=Group.objects.get(acronym='farfut')) |
|
0 commit comments