|
1 | | -# Copyright The IETF Trust 2012-2020, All Rights Reserved |
| 1 | +# Copyright The IETF Trust 2012-2023, All Rights Reserved |
2 | 2 | # -*- coding: utf-8 -*- |
3 | 3 |
|
4 | 4 |
|
|
13 | 13 |
|
14 | 14 | import debug # pyflakes:ignore |
15 | 15 |
|
16 | | -from ietf.doc.factories import IndividualDraftFactory, ConflictReviewFactory |
17 | | -from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, BallotPositionDocEvent, TelechatDocEvent, State |
| 16 | +from ietf.doc.factories import IndividualDraftFactory, ConflictReviewFactory, RgDraftFactory |
| 17 | +from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, BallotPositionDocEvent, TelechatDocEvent, State, DocTagName |
18 | 18 | from ietf.doc.utils import create_ballot_if_not_open |
19 | 19 | from ietf.doc.views_conflict_review import default_approval_text |
20 | 20 | from ietf.group.models import Person |
@@ -168,6 +168,21 @@ def test_change_state(self): |
168 | 168 | self.assertTrue(review_doc.active_ballot()) |
169 | 169 | self.assertEqual(review_doc.latest_event(BallotPositionDocEvent, type="changed_ballot_position").pos_id,'yes') |
170 | 170 |
|
| 171 | + # try to change to an AD-forbidden state |
| 172 | + appr_noprob_sent_pk = str(State.objects.get(used=True, slug='appr-noprob-sent',type__slug='conflrev').pk) |
| 173 | + r = self.client.post(url,dict(review_state=appr_noprob_sent_pk,comment='xyzzy')) |
| 174 | + self.assertEqual(r.status_code, 200) |
| 175 | + q = PyQuery(r.content) |
| 176 | + self.assertTrue(q('form .invalid-feedback')) |
| 177 | + |
| 178 | + # try again as secretariat |
| 179 | + self.client.logout() |
| 180 | + login_testing_unauthorized(self, 'secretary', url) |
| 181 | + r = self.client.post(url,dict(review_state=appr_noprob_sent_pk,comment='xyzzy')) |
| 182 | + self.assertEqual(r.status_code, 302) |
| 183 | + review_doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') |
| 184 | + self.assertEqual(review_doc.get_state('conflrev').slug, 'appr-noprob-sent') |
| 185 | + |
171 | 186 |
|
172 | 187 | def test_edit_notices(self): |
173 | 188 | doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission') |
@@ -450,3 +465,65 @@ def test_subsequent_submission(self): |
450 | 465 | def setUp(self): |
451 | 466 | super().setUp() |
452 | 467 | ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net') |
| 468 | + |
| 469 | +class ConflictReviewIrtfStateTests(TestCase): |
| 470 | + |
| 471 | + def start_review(self, role, kwargs=None): |
| 472 | + doc = RgDraftFactory() |
| 473 | + url = urlreverse('ietf.doc.views_conflict_review.start_review', kwargs=dict(name=doc.name)) |
| 474 | + login_testing_unauthorized(self, role, url) |
| 475 | + |
| 476 | + r = self.client.post(url, kwargs) |
| 477 | + self.assertEqual(r.status_code, 302) |
| 478 | + self.assertEqual(doc.get_state('draft-stream-irtf').slug, 'iesg-rev') |
| 479 | + |
| 480 | + def test_start_review_as_secretary(self): |
| 481 | + ad_strpk = str(Person.objects.get(name='Areað Irector').pk) |
| 482 | + state_strpk = str(State.objects.get(used=True, slug='needshep', type__slug='conflrev').pk) |
| 483 | + self.start_review('secretary', kwargs=dict(ad=ad_strpk, create_in_state=state_strpk)) |
| 484 | + |
| 485 | + def test_start_review_as_stream_owner(self): |
| 486 | + self.start_review('irtf-chair') |
| 487 | + |
| 488 | + def close_review(self, close_type, role): |
| 489 | + doc = RgDraftFactory() |
| 490 | + review = ConflictReviewFactory(review_of=doc) |
| 491 | + url = urlreverse('ietf.doc.views_conflict_review.change_state', kwargs=dict(name=review.name)) |
| 492 | + login_testing_unauthorized(self, role, url) |
| 493 | + |
| 494 | + strpk = str(State.objects.get(used=True, slug=close_type, type__slug='conflrev').pk) |
| 495 | + r = self.client.post(url, dict(review_state=strpk)) |
| 496 | + self.assertEqual(r.status_code, 302) |
| 497 | + self.assertEqual(doc.get_state('draft-stream-irtf').slug, 'chair-w') |
| 498 | + self.assertIn(DocTagName.objects.get(pk='iesg-com'), doc.tags.all()) |
| 499 | + |
| 500 | + def test_close_review_reqnopub_as_secretary(self): |
| 501 | + self.close_review('appr-reqnopub-sent', 'secretary') |
| 502 | + |
| 503 | + def test_close_review_noprob_as_secretary(self): |
| 504 | + self.close_review('appr-noprob-sent', 'secretary') |
| 505 | + |
| 506 | + def test_close_review_withdraw_as_secretary(self): |
| 507 | + self.close_review('withdraw', 'secretary') |
| 508 | + |
| 509 | + def test_close_review_dead_as_secretary(self): |
| 510 | + self.close_review('dead', 'secretary') |
| 511 | + |
| 512 | + def test_close_review_withdraw_as_ad(self): |
| 513 | + self.close_review('withdraw', 'ad') |
| 514 | + |
| 515 | + def test_close_review_dead_as_ad(self): |
| 516 | + self.close_review('dead', 'ad') |
| 517 | + |
| 518 | + def test_approve_review(self): |
| 519 | + doc = RgDraftFactory() |
| 520 | + review = ConflictReviewFactory(review_of=doc) |
| 521 | + review.set_state(State.objects.get(used=True, slug='appr-noprob-pend', type='conflrev')) |
| 522 | + |
| 523 | + url = urlreverse('ietf.doc.views_conflict_review.approve_conflict_review', kwargs=dict(name=review.name)) |
| 524 | + login_testing_unauthorized(self, 'secretary', url) |
| 525 | + |
| 526 | + r = self.client.post(url, dict(announcement_text=default_approval_text(review))) |
| 527 | + self.assertEqual(r.status_code, 302) |
| 528 | + self.assertEqual(doc.get_state('draft-stream-irtf').slug, 'chair-w') |
| 529 | + self.assertIn(DocTagName.objects.get(pk='iesg-com'), doc.tags.all()) |
0 commit comments