|
6 | 6 | from django.core.urlresolvers import reverse as urlreverse |
7 | 7 |
|
8 | 8 | from ietf.doc.models import ( Document, State, DocEvent, BallotDocEvent, |
9 | | - BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent ) |
| 9 | + BallotPositionDocEvent, LastCallDocEvent, WriteupDocEvent, TelechatDocEvent ) |
10 | 10 | from ietf.group.models import Group, Role |
11 | 11 | from ietf.name.models import BallotPositionName |
| 12 | +from ietf.iesg.models import TelechatDate |
12 | 13 | from ietf.person.models import Person |
13 | 14 | from ietf.utils.test_utils import TestCase |
14 | 15 | from ietf.utils.mail import outbox |
@@ -162,52 +163,6 @@ def test_send_ballot_comment(self): |
162 | 163 | self.assertTrue("clearer title" in str(m)) |
163 | 164 | self.assertTrue("Test!" in str(m)) |
164 | 165 |
|
165 | | - |
166 | | -class DeferBallotTests(TestCase): |
167 | | - def test_defer_ballot(self): |
168 | | - draft = make_test_data() |
169 | | - draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="iesg-eva")) |
170 | | - |
171 | | - url = urlreverse('doc_defer_ballot', kwargs=dict(name=draft.name)) |
172 | | - login_testing_unauthorized(self, "ad", url) |
173 | | - |
174 | | - # normal get |
175 | | - r = self.client.get(url) |
176 | | - self.assertEqual(r.status_code, 200) |
177 | | - |
178 | | - # defer |
179 | | - mailbox_before = len(outbox) |
180 | | - |
181 | | - r = self.client.post(url, dict()) |
182 | | - self.assertEqual(r.status_code, 302) |
183 | | - |
184 | | - draft = Document.objects.get(name=draft.name) |
185 | | - self.assertEqual(draft.get_state_slug("draft-iesg"), "defer") |
186 | | - |
187 | | - self.assertEqual(len(outbox), mailbox_before + 2) |
188 | | - self.assertTrue("State Update" in outbox[-2]['Subject']) |
189 | | - self.assertTrue("Deferred" in outbox[-1]['Subject']) |
190 | | - self.assertTrue(draft.file_tag() in outbox[-1]['Subject']) |
191 | | - |
192 | | - def test_undefer_ballot(self): |
193 | | - draft = make_test_data() |
194 | | - draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="defer")) |
195 | | - |
196 | | - url = urlreverse('doc_undefer_ballot', kwargs=dict(name=draft.name)) |
197 | | - login_testing_unauthorized(self, "ad", url) |
198 | | - |
199 | | - # normal get |
200 | | - r = self.client.get(url) |
201 | | - self.assertEqual(r.status_code, 200) |
202 | | - |
203 | | - # undefer |
204 | | - r = self.client.post(url, dict()) |
205 | | - self.assertEqual(r.status_code, 302) |
206 | | - |
207 | | - draft = Document.objects.get(name=draft.name) |
208 | | - self.assertEqual(draft.get_state_slug("draft-iesg"), "iesg-eva") |
209 | | - |
210 | | - |
211 | 166 | class BallotWriteupsTests(TestCase): |
212 | 167 | def test_edit_last_call_text(self): |
213 | 168 | draft = make_test_data() |
@@ -482,3 +437,127 @@ def test_make_last_call(self): |
482 | 437 | self.assertTrue("Last Call" in outbox[-3]['Subject']) |
483 | 438 | self.assertTrue("Last Call" in draft.message_set.order_by("-time")[0].subject) |
484 | 439 |
|
| 440 | +class DeferUndeferTestCase(TestCase): |
| 441 | + def helper_test_defer(self,name): |
| 442 | + |
| 443 | + doc = Document.objects.get(name=name) |
| 444 | + url = urlreverse('doc_defer_ballot',kwargs=dict(name=doc.name)) |
| 445 | + |
| 446 | + login_testing_unauthorized(self, "ad", url) |
| 447 | + |
| 448 | + # Verify that you can't defer a document that's not on a telechat |
| 449 | + r = self.client.post(url,dict()) |
| 450 | + self.assertEqual(r.status_code, 404) |
| 451 | + |
| 452 | + # Put the document on a telechat |
| 453 | + dates = TelechatDate.objects.active().order_by("date") |
| 454 | + first_date = dates[0].date |
| 455 | + second_date = dates[1].date |
| 456 | + |
| 457 | + e = TelechatDocEvent(type="scheduled_for_telechat", |
| 458 | + doc = doc, |
| 459 | + by = Person.objects.get(name="Aread Irector"), |
| 460 | + telechat_date = first_date, |
| 461 | + returning_item = False, |
| 462 | + ) |
| 463 | + e.save() |
| 464 | + |
| 465 | + # get |
| 466 | + r = self.client.get(url) |
| 467 | + self.assertEqual(r.status_code, 200) |
| 468 | + q = PyQuery(r.content) |
| 469 | + self.assertEqual(len(q('form.defer')),1) |
| 470 | + |
| 471 | + # defer |
| 472 | + mailbox_before = len(outbox) |
| 473 | + self.assertEqual(doc.telechat_date(), first_date) |
| 474 | + r = self.client.post(url,dict()) |
| 475 | + self.assertEqual(r.status_code, 302) |
| 476 | + doc = Document.objects.get(name=name) |
| 477 | + self.assertEqual(doc.telechat_date(), second_date) |
| 478 | + self.assertTrue(doc.returning_item()) |
| 479 | + defer_states = dict(draft=['draft-iesg','defer'],conflrev=['conflrev','defer']) |
| 480 | + if doc.type_id in defer_states: |
| 481 | + self.assertEqual(doc.get_state(defer_states[doc.type_id][0]).slug,defer_states[doc.type_id][1]) |
| 482 | + self.assertTrue(doc.active_defer_event()) |
| 483 | + self.assertEqual(len(outbox), mailbox_before + 2) |
| 484 | + self.assertTrue("State Update" in outbox[-2]['Subject']) |
| 485 | + self.assertTrue("Deferred" in outbox[-1]['Subject']) |
| 486 | + self.assertTrue(doc.file_tag() in outbox[-1]['Subject']) |
| 487 | + |
| 488 | + # Ensure it's not possible to defer again |
| 489 | + r = self.client.get(url) |
| 490 | + self.assertEqual(r.status_code, 404) |
| 491 | + r = self.client.post(url,dict()) |
| 492 | + self.assertEqual(r.status_code, 404) |
| 493 | + |
| 494 | + |
| 495 | + def helper_test_undefer(self,name): |
| 496 | + |
| 497 | + doc = Document.objects.get(name=name) |
| 498 | + url = urlreverse('doc_undefer_ballot',kwargs=dict(name=doc.name)) |
| 499 | + |
| 500 | + login_testing_unauthorized(self, "ad", url) |
| 501 | + |
| 502 | + # some additional setup |
| 503 | + dates = TelechatDate.objects.active().order_by("date") |
| 504 | + first_date = dates[0].date |
| 505 | + second_date = dates[1].date |
| 506 | + |
| 507 | + e = TelechatDocEvent(type="scheduled_for_telechat", |
| 508 | + doc = doc, |
| 509 | + by = Person.objects.get(name="Aread Irector"), |
| 510 | + telechat_date = second_date, |
| 511 | + returning_item = True, |
| 512 | + ) |
| 513 | + e.save() |
| 514 | + defer_states = dict(draft=['draft-iesg','defer'],conflrev=['conflrev','defer']) |
| 515 | + if doc.type_id in defer_states: |
| 516 | + doc.set_state(State.objects.get(used=True, type=defer_states[doc.type_id][0],slug=defer_states[doc.type_id][1])) |
| 517 | + doc.save() |
| 518 | + |
| 519 | + # get |
| 520 | + r = self.client.get(url) |
| 521 | + self.assertEqual(r.status_code, 200) |
| 522 | + q = PyQuery(r.content) |
| 523 | + self.assertEqual(len(q('form.undefer')),1) |
| 524 | + |
| 525 | + # undefer |
| 526 | + mailbox_before = len(outbox) |
| 527 | + self.assertEqual(doc.telechat_date(), second_date) |
| 528 | + r = self.client.post(url,dict()) |
| 529 | + self.assertEqual(r.status_code, 302) |
| 530 | + doc = Document.objects.get(name=name) |
| 531 | + self.assertEqual(doc.telechat_date(), first_date) |
| 532 | + self.assertTrue(doc.returning_item()) |
| 533 | + undefer_states = dict(draft=['draft-iesg','iesg-eva'],conflrev=['conflrev','iesgeval']) |
| 534 | + if doc.type_id in undefer_states: |
| 535 | + self.assertEqual(doc.get_state(undefer_states[doc.type_id][0]).slug,undefer_states[doc.type_id][1]) |
| 536 | + self.assertFalse(doc.active_defer_event()) |
| 537 | + self.assertEqual(len(outbox), mailbox_before + 2) |
| 538 | + self.assertTrue("State Update" in outbox[-2]['Subject']) |
| 539 | + self.assertTrue("Undeferred" in outbox[-1]['Subject']) |
| 540 | + self.assertTrue(doc.file_tag() in outbox[-1]['Subject']) |
| 541 | + |
| 542 | + # Ensure it's not possible to undefer again |
| 543 | + r = self.client.get(url) |
| 544 | + self.assertEqual(r.status_code, 404) |
| 545 | + r = self.client.post(url,dict()) |
| 546 | + self.assertEqual(r.status_code, 404) |
| 547 | + |
| 548 | + def test_defer_draft(self): |
| 549 | + self.helper_test_defer('draft-ietf-mars-test') |
| 550 | + |
| 551 | + def test_defer_conflict_review(self): |
| 552 | + self.helper_test_defer('conflict-review-imaginary-irtf-submission') |
| 553 | + |
| 554 | + def test_undefer_draft(self): |
| 555 | + self.helper_test_undefer('draft-ietf-mars-test') |
| 556 | + |
| 557 | + def test_undefer_conflict_review(self): |
| 558 | + self.helper_test_undefer('conflict-review-imaginary-irtf-submission') |
| 559 | + |
| 560 | + # when charters support being deferred, be sure to test them here |
| 561 | + |
| 562 | + def setUp(self): |
| 563 | + make_test_data() |
0 commit comments