diff --git a/ietf/doc/proxy.py b/ietf/doc/proxy.py index f9f0e4a07..9fbfc8b5b 100644 --- a/ietf/doc/proxy.py +++ b/ietf/doc/proxy.py @@ -433,7 +433,7 @@ class InternetDraft(Document): #via_rfc_editor = models.IntegerField(null=True, blank=True) @property def via_rfc_editor(self): - return bool(self.tags.filter(slug='via-rfc')) + return self.stream_id in ('ise','irtf') #state_change_notice_to = models.CharField(blank=True, max_length=255) @property diff --git a/ietf/idrfc/idrfc_wrapper.py b/ietf/idrfc/idrfc_wrapper.py index cf730c8ce..1a49a66a4 100644 --- a/ietf/idrfc/idrfc_wrapper.py +++ b/ietf/idrfc/idrfc_wrapper.py @@ -153,19 +153,19 @@ class IdWrapper: return self.ietf_process != None def submission(self): - if self._idinternal and self._idinternal.via_rfc_editor: - return "Via IRTF or RFC Editor" + + if self._draft.stream_id != u'ietf': + return self._draft.stream if self._draft.group_id == Acronym.INDIVIDUAL_SUBMITTER: return "Individual" - if settings.USE_DB_REDESIGN_PROXY_CLASSES: - if self._draft.group and self._draft.group.type_id == "area": - return u"Individual in %s area" % self._draft.group.acronym + if self._draft.group and self._draft.group.type_id == "area": + return u"Individual in %s area" % self._draft.group.acronym a = self.group_acronym() if a: - if settings.USE_DB_REDESIGN_PROXY_CLASSES and self._draft.stream_id == "ietf" and self._draft.get_state_slug("draft-stream-ietf") == "c-adopt": + if self._draft.stream_id == "ietf" and self._draft.get_state_slug("draft-stream-ietf") == "c-adopt": return "candidate for %s WG" % (a, a) return "%s WG" % (a, a) @@ -175,7 +175,7 @@ class IdWrapper: def search_archive(self): - if self._idinternal and self._idinternal.via_rfc_editor: + if self._idinternal and self._idinternal.stream in ("IRTF","ISE"): return "www.ietf.org/mail-archive/web/" if self._draft.group_id == Acronym.INDIVIDUAL_SUBMITTER or (settings.USE_DB_REDESIGN_PROXY_CLASSES and self._draft.group.type_id == "area"): @@ -206,7 +206,7 @@ class IdWrapper: elif self.draft_name.startswith("draft-irtf-"): return 3 elif self._idinternal: - if self._idinternal.via_rfc_editor > 0: + if self._idinternal.stream == "ISE": return 4 else: return 1 diff --git a/ietf/idrfc/mails.py b/ietf/idrfc/mails.py index d3f38736e..1f1e39dd2 100644 --- a/ietf/idrfc/mails.py +++ b/ietf/idrfc/mails.py @@ -142,7 +142,7 @@ def generate_approval_mail_rfc_editor(request, doc): DO_NOT_PUBLISH_IESG_STATES = ("nopubadw", "nopubanw") def generate_approval_mailREDESIGN(request, doc): - if doc.get_state_slug("draft-iesg") in DO_NOT_PUBLISH_IESG_STATES or doc.tags.filter(slug='via-rfc'): + if doc.get_state_slug("draft-iesg") in DO_NOT_PUBLISH_IESG_STATES or doc.stream_id in ('ise','irtf'): mail = generate_approval_mail_rfc_editor(request, doc) else: mail = generate_approval_mail_approved(request, doc) diff --git a/ietf/idrfc/tests.py b/ietf/idrfc/tests.py index 1491eebfa..a2d5d94f0 100644 --- a/ietf/idrfc/tests.py +++ b/ietf/idrfc/tests.py @@ -49,927 +49,10 @@ from ietf.utils.mail import outbox from ietf.ietfworkflows.models import Stream from django.contrib.auth.models import User -class IdRfcUrlTestCase(SimpleUrlTestCase): - def testUrls(self): - self.doTestUrls(__file__) - -class ChangeStateTestCase(django.test.TestCase): - fixtures = ['base', 'draft'] - - def test_change_state(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_change_state', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - state = draft.idinternal.cur_state - substate = draft.idinternal.cur_sub_state - next_states = IDNextState.objects.filter(cur_state=draft.idinternal.cur_state) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('form select[name=state]')), 1) - self.assertEquals(len(q('form select[name=substate]')), 1) - - if next_states: - self.assertTrue(len(q('.next-states form input[type=hidden]')) > 0) - - - # faulty post - r = self.client.post(url, - dict(state="123456789", substate="987654531")) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertTrue(len(q('form ul.errorlist')) > 0) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.cur_state, state) - - - # change state - comments_before = draft.idinternal.comments().count() - mailbox_before = len(outbox) - - r = self.client.post(url, - dict(state="12", substate="")) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.prev_state, state) - self.assertEquals(draft.idinternal.prev_sub_state, substate) - self.assertEquals(draft.idinternal.cur_state.document_state_id, 12) - self.assertEquals(draft.idinternal.cur_sub_state, None) - self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) - self.assertTrue("State changed" in draft.idinternal.comments()[0].comment_text) - self.assertEquals(len(outbox), mailbox_before + 2) - self.assertTrue("State Update Notice" in outbox[-2]['Subject']) - self.assertTrue(draft.filename in outbox[-1]['Subject']) - - - def test_request_last_call(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - - self.client.login(remote_user="klm") - url = urlreverse('doc_change_state', kwargs=dict(name=draft.filename)) - - mailbox_before = len(outbox) - - self.assertRaises(BallotInfo.DoesNotExist, lambda: draft.idinternal.ballot) - r = self.client.post(url, - dict(state=str(IDState.LAST_CALL_REQUESTED), - substate="")) - self.assertContains(r, "Your request to issue the Last Call") - - # last call text - self.assertTrue("The IESG has received" in draft.idinternal.ballot.last_call_text) - self.assertTrue(draft.title in draft.idinternal.ballot.last_call_text) - self.assertTrue(draft.idinternal.get_absolute_url() in draft.idinternal.ballot.last_call_text) - - # approval text - self.assertTrue("The IESG has approved" in draft.idinternal.ballot.approval_text) - self.assertTrue(draft.title in draft.idinternal.ballot.approval_text) - self.assertTrue(draft.idinternal.get_absolute_url() in draft.idinternal.ballot.approval_text) - - # ballot writeup - self.assertTrue("Technical Summary" in draft.idinternal.ballot.ballot_writeup) - - # mail notice - self.assertTrue(len(outbox) > mailbox_before) - self.assertTrue("Last Call:" in outbox[-1]['Subject']) - - # comment - self.assertTrue("Last Call was requested" in draft.idinternal.comments()[0].comment_text) - - -class EditInfoTestCase(django.test.TestCase): - fixtures = ['base', 'draft'] - - def test_edit_info(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_edit_info', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('form select[name=intended_status]')), 1) - self.assertEquals(len(q('form input[name=via_rfc_editor]')), 1) - - prev_job_owner = draft.idinternal.job_owner - # faulty post - r = self.client.post(url, dict(job_owner="123456789")) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertTrue(len(q('form ul.errorlist')) > 0) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.job_owner, prev_job_owner) - - # edit info - comments_before = draft.idinternal.comments().count() - mailbox_before = len(outbox) - draft.group = Acronym.objects.get(acronym_id=Acronym.INDIVIDUAL_SUBMITTER) - draft.save() - new_job_owner = IESGLogin.objects.exclude(id__in=[IESGLogin.objects.get(login_name="klm").id, draft.idinternal.job_owner_id])[0] - new_area = Area.active_areas()[0] - - r = self.client.post(url, - dict(intended_status=str(draft.intended_status_id), - status_date=str(date.today() + timedelta(2)), - area_acronym=str(new_area.area_acronym_id), - via_rfc_editor="1", - job_owner=new_job_owner.id, - state_change_notice_to="test@example.com", - note="", - telechat_date="", - stream=Stream.objects.get(name=u'IETF').id, - )) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.area_acronym, new_area) - self.assertTrue(draft.idinternal.via_rfc_editor) - self.assertEquals(draft.idinternal.job_owner, new_job_owner) - self.assertEquals(draft.idinternal.note, "") - self.assertTrue(not draft.idinternal.agenda) - self.assertEquals(draft.idinternal.comments().count(), comments_before + 3) - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue(draft.filename in outbox[-1]['Subject']) - - def test_edit_telechat_date(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.idinternal.agenda = False - draft.idinternal.save() - url = urlreverse('doc_edit_info', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - data = dict(intended_status=str(draft.intended_status_id), - status_date=str(date.today() + timedelta(2)), - area_acronym=str(draft.idinternal.area_acronym_id), - via_rfc_editor="1", - job_owner=str(draft.idinternal.job_owner_id), - state_change_notice_to="test@example.com", - note="", - stream=Stream.objects.get(name=u'IETF').id, - ) - - from ietf.iesg.models import TelechatDates - - # add to telechat - data["telechat_date"] = TelechatDates.objects.all()[0].date1.isoformat() - r = self.client.post(url, data) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue(draft.idinternal.agenda) - self.assertEquals(draft.idinternal.telechat_date, TelechatDates.objects.all()[0].date1) - - # change telechat - data["telechat_date"] = TelechatDates.objects.all()[0].date2.isoformat() - r = self.client.post(url, data) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue(draft.idinternal.agenda) - self.assertEquals(draft.idinternal.telechat_date, TelechatDates.objects.all()[0].date2) - - # remove from agenda - data["telechat_date"] = "" - r = self.client.post(url, data) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue(not draft.idinternal.agenda) - - - def test_add_draft(self): - draft = InternetDraft.objects.get(filename="draft-ah-rfc2141bis-urn") - url = urlreverse('doc_edit_info', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('form select[name=intended_status]')), 1) - self.assertEquals(len(q('form input[name=via_rfc_editor]')), 1) - self.assertTrue('@' in q('form input[name=state_change_notice_to]')[0].get('value')) - - # add - mailbox_before = len(outbox) - - job_owner = IESGLogin.objects.filter(user_level=1)[0] - area = Area.active_areas()[0] - - r = self.client.post(url, - dict(intended_status=str(draft.intended_status_id), - area_acronym=str(area.area_acronym_id), - via_rfc_editor="1", - job_owner=job_owner.id, - create_in_state=IDState.PUBLICATION_REQUESTED, - state_change_notice_to="test@example.com", - note="This is a note", - telechat_date="", - stream=Stream.objects.get(name=u'IETF').id, - )) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ah-rfc2141bis-urn") - self.assertEquals(draft.idinternal.area_acronym, area) - self.assertTrue(draft.idinternal.via_rfc_editor) - self.assertEquals(draft.idinternal.job_owner, job_owner) - self.assertEquals(draft.idinternal.note, "This is a note") - self.assertTrue(not draft.idinternal.agenda) - self.assertEquals(draft.idinternal.comments().count(), 2) - self.assertTrue("Draft added" in draft.idinternal.comments()[0].comment_text) - self.assertTrue("This is a note" in draft.idinternal.comments()[1].comment_text) - self.assertEquals(len(outbox), mailbox_before) - - -class ResurrectTestCase(django.test.TestCase): - fixtures = ['base', 'draft'] - - def test_request_resurrect(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mip6-cn-ipsec") - self.assertEquals(draft.status.status, "Expired") - self.assertTrue(not draft.idinternal.resurrect_requested_by) - - url = urlreverse('doc_request_resurrect', kwargs=dict(name=draft.filename)) - login_as = "rhousley" - - login_testing_unauthorized(self, login_as, url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('form input[type=submit]')), 1) - - - # request resurrect - comments_before = draft.idinternal.comments().count() - mailbox_before = len(outbox) - - r = self.client.post(url, dict()) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mip6-cn-ipsec") - self.assertEquals(draft.idinternal.resurrect_requested_by, IESGLogin.objects.get(login_name=login_as)) - self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) - self.assertTrue("Resurrection" in draft.idinternal.comments()[0].comment_text) - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue("Resurrection" in outbox[-1]['Subject']) - - def test_resurrect(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mip6-cn-ipsec") - self.assertEquals(draft.status.status, "Expired") - draft.idinternal.resurrect_requested_by = IESGLogin.objects.get(login_name="rhousley") - draft.idinternal.save() - - url = urlreverse('doc_resurrect', kwargs=dict(name=draft.filename)) - - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('form input[type=submit]')), 1) - - # request resurrect - comments_before = draft.idinternal.comments().count() - mailbox_before = len(outbox) - - r = self.client.post(url, dict()) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mip6-cn-ipsec") - self.assertEquals(draft.idinternal.resurrect_requested_by, None) - self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) - self.assertTrue("completed" in draft.idinternal.comments()[0].comment_text) - self.assertEquals(draft.status.status, "Active") - self.assertEquals(len(outbox), mailbox_before + 1) - -class AddCommentTestCase(django.test.TestCase): - fixtures = ['base', 'draft'] - - def test_add_comment(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_add_comment', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('form textarea[name=comment]')), 1) - - # request resurrect - comments_before = draft.idinternal.comments().count() - mailbox_before = len(outbox) - - r = self.client.post(url, dict(comment="This is a test.")) - self.assertEquals(r.status_code, 302) - - self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) - self.assertTrue("This is a test." in draft.idinternal.comments()[0].comment_text) - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue("updated" in outbox[-1]['Subject']) - self.assertTrue(draft.filename in outbox[-1]['Subject']) - -class EditPositionTestCase(django.test.TestCase): - fixtures = ['base', 'draft', 'ballot'] - - def test_edit_position(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_edit_position', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "rhousley", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertTrue(len(q('form input[name=position]')) > 0) - self.assertEquals(len(q('form textarea[name=comment_text]')), 1) - - # vote - comments_before = draft.idinternal.comments().count() - self.assertTrue(not Position.objects.filter(ballot=draft.idinternal.ballot, ad__login_name="rhousley")) - - r = self.client.post(url, dict(position="discuss", - discuss_text="This is a discussion test.", - comment_text="This is a test.")) - self.assertEquals(r.status_code, 302) - - pos = Position.objects.get(ballot=draft.idinternal.ballot, ad__login_name="rhousley") - self.assertTrue("This is a discussion test." in IESGDiscuss.objects.get(ballot=draft.idinternal.ballot, ad__login_name="rhousley").text) - self.assertTrue("This is a test." in IESGComment.objects.get(ballot=draft.idinternal.ballot, ad__login_name="rhousley").text) - self.assertTrue(pos.discuss) - self.assertTrue(not (pos.yes or pos.noobj or pos.abstain or pos.recuse)) - - self.assertEquals(draft.idinternal.comments().count(), comments_before + 3) - self.assertTrue("New position" in draft.idinternal.comments()[2].comment_text) - - # recast vote - comments_before = draft.idinternal.comments().count() - r = self.client.post(url, dict(position="noobj")) - self.assertEquals(r.status_code, 302) - - pos = Position.objects.filter(ballot=draft.idinternal.ballot, ad__login_name="rhousley")[0] - self.assertTrue(pos.noobj) - self.assertTrue(not (pos.yes or pos.abstain or pos.recuse)) - self.assertTrue(pos.discuss == -1) - self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) - self.assertTrue("Position" in draft.idinternal.comments()[0].comment_text) - - # clear vote - comments_before = draft.idinternal.comments().count() - r = self.client.post(url, dict(position="")) - self.assertEquals(r.status_code, 302) - - pos = Position.objects.filter(ballot=draft.idinternal.ballot, ad__login_name="rhousley") - self.assertEquals(len(pos), 0) - self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) - self.assertTrue("Position" in draft.idinternal.comments()[0].comment_text) - def test_edit_position_as_secretary(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_edit_position', kwargs=dict(name=draft.filename)) - url += "?ad=rhousley" - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertTrue(len(q('form input[name=position]')) > 0) - - # vote for rhousley - comments_before = draft.idinternal.comments().count() - self.assertTrue(not Position.objects.filter(ballot=draft.idinternal.ballot, ad__login_name="rhousley")) - - r = self.client.post(url, dict(position="discuss",discuss_text="A non-empty discuss")) - self.assertEquals(r.status_code, 302) - - pos = Position.objects.get(ballot=draft.idinternal.ballot, ad__login_name="rhousley") - self.assertTrue(pos.discuss) - self.assertTrue(not (pos.yes or pos.noobj or pos.abstain or pos.recuse)) - - - def test_send_ballot_comment(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_send_ballot_comment', kwargs=dict(name=draft.filename)) - login_as = "rhousley" - login_testing_unauthorized(self, login_as, url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertTrue(len(q('form input[name="cc"]')) > 0) - - # send - mailbox_before = len(outbox) - IESGComment.objects.create(ballot=draft.idinternal.ballot, - ad=IESGLogin.objects.get(login_name=login_as), - text="Test!", date=date.today(), - revision=draft.revision_display(), active=1) - - r = self.client.post(url, dict(cc="test@example.com", cc_state_change="1")) - self.assertEquals(r.status_code, 302) - - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue("COMMENT" in outbox[-1]['Subject']) - - -class DeferBallotTestCase(django.test.TestCase): - fixtures = ['base', 'draft', 'ballot'] - - def test_defer_ballot(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_defer_ballot', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "rhousley", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - - # defer - self.assertTrue(not draft.idinternal.ballot.defer) - mailbox_before = len(outbox) - - r = self.client.post(url, dict()) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue(draft.idinternal.ballot.defer) - self.assertTrue(draft.idinternal.cur_state_id == IDState.IESG_EVALUATION_DEFER) - - self.assertEquals(len(outbox), mailbox_before + 2) - self.assertTrue("Deferred" in outbox[-2]['Subject']) - self.assertTrue(draft.file_tag() in outbox[-2]['Subject']) - - def test_undefer_ballot(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_undefer_ballot', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "rhousley", url) - - draft.idinternal.ballot.defer = True - draft.idinternal.ballot.save() - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - - # undefer - self.assertTrue(draft.idinternal.ballot.defer) - - r = self.client.post(url, dict()) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue(not draft.idinternal.ballot.defer) - self.assertEquals(draft.idinternal.cur_state_id, IDState.IESG_EVALUATION) - -class BallotWriteupsTestCase(django.test.TestCase): - fixtures = ['base', 'draft', 'ballot'] - - def test_edit_last_call_text(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_ballot_lastcall', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('textarea[name=last_call_text]')), 1) - self.assertEquals(len(q('input[type=submit][value*="Save Last Call"]')), 1) - - # subject error - r = self.client.post(url, dict( - last_call_text="Subject: test\r\nhello\r\n\r\n", - save_last_call_text="1")) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertTrue(len(q('ul.errorlist')) > 0) - - # save - r = self.client.post(url, dict( - last_call_text="This is a simple test.", - save_last_call_text="1")) - self.assertEquals(r.status_code, 200) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue("This is a simple test" in draft.idinternal.ballot.last_call_text) - - # test regenerate - r = self.client.post(url, dict( - last_call_text="This is a simple test.", - regenerate_last_call_text="1")) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue("Subject: Last Call" in draft.idinternal.ballot.last_call_text) - - def test_request_last_call(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_ballot_lastcall', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - mailbox_before = len(outbox) - - r = self.client.post(url, dict( - last_call_text=draft.idinternal.ballot.last_call_text, - send_last_call_request="1")) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.cur_state_id, IDState.LAST_CALL_REQUESTED) - - self.assertEquals(len(outbox), mailbox_before + 3) - - self.assertTrue("Last Call" in outbox[-1]['Subject']) - - def test_edit_ballot_writeup(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_ballot_writeupnotes', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('textarea[name=ballot_writeup]')), 1) - self.assertEquals(len(q('input[type=submit][value*="Save Ballot Writeup"]')), 1) - - # save - r = self.client.post(url, dict( - ballot_writeup="This is a simple test.", - save_ballot_writeup="1")) - self.assertEquals(r.status_code, 200) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue("This is a simple test" in draft.idinternal.ballot.ballot_writeup) - - def test_issue_ballot(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_ballot_writeupnotes', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "rhousley", url) - - draft.idinternal.ballot.ballot_issued = False - draft.idinternal.ballot.save() - active = IESGLogin.objects.filter(user_level=1) - Position.objects.create(ad=active[0], yes=1, noobj=0, discuss=0, abstain=0, recuse=0, ballot=draft.idinternal.ballot) - Position.objects.create(ad=active[1], yes=0, noobj=1, discuss=0, abstain=0, recuse=0, ballot=draft.idinternal.ballot) - Position.objects.create(ad=active[2], yes=0, noobj=1, discuss=-1, abstain=0, recuse=0, ballot=draft.idinternal.ballot) - Position.objects.create(ad=active[3], yes=0, noobj=0, discuss=1, abstain=0, recuse=0, ballot=draft.idinternal.ballot) - Position.objects.create(ad=active[4], yes=0, noobj=0, discuss=0, abstain=1, recuse=0, ballot=draft.idinternal.ballot) - Position.objects.create(ad=active[5], yes=0, noobj=0, discuss=0, abstain=0, recuse=1, ballot=draft.idinternal.ballot) - inactive = IESGLogin.objects.filter(user_level=2) - Position.objects.create(ad=inactive[0], yes=1, noobj=0, discuss=0, abstain=0, recuse=0, ballot=draft.idinternal.ballot) - IESGDiscuss.objects.create(ad=active[1], active=True, date=datetime.date.today(), text="test " * 20, ballot=draft.idinternal.ballot) - IESGComment.objects.create(ad=active[2], active=True, date=datetime.date.today(), text="test " * 20, ballot=draft.idinternal.ballot) - IESGDiscuss.objects.create(ad=active[3], active=True, date=datetime.date.today(), text="test " * 20, ballot=draft.idinternal.ballot) - IESGComment.objects.create(ad=active[3], active=True, date=datetime.date.today(), text="test " * 20, ballot=draft.idinternal.ballot) - - mailbox_before = len(outbox) - - r = self.client.post(url, dict( - ballot_writeup=draft.idinternal.ballot.ballot_writeup, - approval_text=draft.idinternal.ballot.approval_text, - issue_ballot="1")) - self.assertEquals(r.status_code, 200) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - - self.assertTrue(draft.idinternal.ballot.ballot_issued) - self.assertEquals(len(outbox), mailbox_before + 2) - self.assertTrue("Evaluation:" in outbox[-2]['Subject']) - - - def test_edit_approval_text(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_ballot_approvaltext', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('textarea[name=approval_text]')), 1) - self.assertEquals(len(q('input[type=submit][value*="Save Approval"]')), 1) - - # save - r = self.client.post(url, dict( - approval_text="This is a simple test.", - save_approval_text="1")) - self.assertEquals(r.status_code, 200) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue("This is a simple test" in draft.idinternal.ballot.approval_text) - - # test regenerate - r = self.client.post(url, dict( - approval_text="This is a simple test.", - regenerate_approval_text="1")) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertTrue("Subject: Protocol Action" in draft.idinternal.ballot.approval_text) - -class ApproveBallotTestCase(django.test.TestCase): - fixtures = ['base', 'draft', 'ballot'] - - def test_approve_ballot(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - url = urlreverse('doc_approve_ballot', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertTrue("Send out the announcement" in q('input[type=submit]')[0].get('value')) - self.assertEquals(len(q('pre')), 1) - - # approve - mailbox_before = len(outbox) - - r = self.client.post(url, dict()) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.cur_state_id, IDState.APPROVED_ANNOUNCEMENT_SENT) - - self.assertEquals(len(outbox), mailbox_before + 4) - - self.assertTrue("Protocol Action" in outbox[-2]['Subject']) - # the IANA copy - self.assertTrue("Protocol Action" in outbox[-1]['Subject']) - -class MakeLastCallTestCase(django.test.TestCase): - fixtures = ['base', 'draft', 'ballot'] - - def test_make_last_call(self): - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.idinternal.cur_state = IDState.objects.get(document_state_id=IDState.LAST_CALL_REQUESTED) - draft.idinternal.save() - draft.lc_expiration_date = None - draft.save() - - url = urlreverse('doc_make_last_call', kwargs=dict(name=draft.filename)) - login_testing_unauthorized(self, "klm", url) - - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('input[name=last_call_sent_date]')), 1) - - # make last call - mailbox_before = len(outbox) - - expire_date = q('input[name=last_call_expiration_date]')[0].get("value") - - r = self.client.post(url, - dict(last_call_sent_date=q('input[name=last_call_sent_date]')[0].get("value"), - last_call_expiration_date=expire_date - )) - self.assertEquals(r.status_code, 302) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.cur_state_id, IDState.IN_LAST_CALL) - self.assertEquals(draft.lc_expiration_date.strftime("%Y-%m-%d"), expire_date) - self.assertEquals(len(outbox), mailbox_before + 4) - - self.assertTrue("Last Call" in outbox[-4]['Subject']) - # the IANA copy - self.assertTrue("Last Call" in outbox[-3]['Subject']) - -class ExpireIDsTestCase(django.test.TestCase): - fixtures = ['base', 'draft'] - - def setUp(self): - self.id_dir = os.path.abspath("tmp-id-dir") - self.archive_dir = os.path.abspath("tmp-id-archive") - os.mkdir(self.id_dir) - os.mkdir(self.archive_dir) - os.mkdir(os.path.join(self.archive_dir, "unknown_ids")) - os.mkdir(os.path.join(self.archive_dir, "deleted_tombstones")) - os.mkdir(os.path.join(self.archive_dir, "expired_without_tombstone")) - - settings.IDSUBMIT_REPOSITORY_PATH = self.id_dir - settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir - - def tearDown(self): - shutil.rmtree(self.id_dir) - shutil.rmtree(self.archive_dir) - - def write_id_file(self, name, size): - f = open(os.path.join(self.id_dir, name), 'w') - f.write("a" * size) - f.close() - - def test_in_id_expire_freeze(self): - from ietf.idrfc.expire import in_id_expire_freeze - - self.assertTrue(not in_id_expire_freeze(datetime.datetime(2010, 7, 11, 0, 0))) - self.assertTrue(not in_id_expire_freeze(datetime.datetime(2010, 7, 12, 8, 0))) - self.assertTrue(in_id_expire_freeze(datetime.datetime(2010, 7, 12, 10, 0))) - self.assertTrue(in_id_expire_freeze(datetime.datetime(2010, 7, 25, 0, 0))) - self.assertTrue(not in_id_expire_freeze(datetime.datetime(2010, 7, 26, 0, 0))) - - def test_warn_expirable_ids(self): - from ietf.idrfc.expire import get_soon_to_expire_ids, send_expire_warning_for_id - - # hack into almost expirable state - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.status = IDStatus.objects.get(status="Active") - draft.review_by_rfc_editor = 0 - draft.revision_date = datetime.date.today() - datetime.timedelta(days=InternetDraft.DAYS_TO_EXPIRE - 7) - draft.idinternal.cur_state_id = IDState.AD_WATCHING - draft.idinternal.save() - draft.save() - - author = PersonOrOrgInfo.objects.all()[0] - IDAuthor.objects.create(document=draft, person=author, author_order=1) - EmailAddress.objects.create(person_or_org=author, type="I-D", priority=draft.pk, address="author@example.com") - - # test query - documents = list(get_soon_to_expire_ids(14)) - self.assertEquals(len(documents), 1) - - # test send warning - mailbox_before = len(outbox) - - send_expire_warning_for_id(documents[0]) - - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue("author@example.com" in str(outbox[-1])) - - def test_expire_ids(self): - from ietf.idrfc.expire import get_expired_ids, send_expire_notice_for_id, expire_id - - # hack into expirable state - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.status = IDStatus.objects.get(status="Active") - draft.review_by_rfc_editor = 0 - draft.revision_date = datetime.date.today() - datetime.timedelta(days=InternetDraft.DAYS_TO_EXPIRE + 1) - draft.idinternal.cur_state_id = IDState.AD_WATCHING - draft.idinternal.save() - draft.save() - - draft = InternetDraft.objects.get(filename="draft-ah-rfc2141bis-urn") - self.assertTrue(draft.idinternal == None) - draft.status = IDStatus.objects.get(status="Active") - draft.review_by_rfc_editor = 0 - draft.revision_date = datetime.date.today() - datetime.timedelta(days=InternetDraft.DAYS_TO_EXPIRE + 1) - draft.save() - - # test query - documents = get_expired_ids() - self.assertEquals(len(documents), 2) - - for d in documents: - # test notice - mailbox_before = len(outbox) - - send_expire_notice_for_id(d) - - self.assertEquals(InternetDraft.objects.get(filename=d.filename).dunn_sent_date, datetime.date.today()) - if d.idinternal: - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue("expired" in outbox[-1]["Subject"]) - - # test expiry - txt = "%s-%s.txt" % (d.filename, d.revision_display()) - self.write_id_file(txt, 5000) - - revision_before = d.revision - - expire_id(d) - - draft = InternetDraft.objects.get(filename=d.filename) - self.assertEquals(draft.status.status, "Expired") - self.assertEquals(int(draft.revision), int(revision_before) + 1) - self.assertTrue(not os.path.exists(os.path.join(self.id_dir, txt))) - self.assertTrue(os.path.exists(os.path.join(self.archive_dir, txt))) - new_txt = "%s-%s.txt" % (draft.filename, draft.revision) - self.assertTrue(os.path.exists(os.path.join(self.id_dir, new_txt))) - - def test_clean_up_id_files(self): - from ietf.idrfc.expire import clean_up_id_files - - # put unknown file - unknown = "draft-i-am-unknown-01.txt" - self.write_id_file(unknown, 5000) - - clean_up_id_files() - - self.assertTrue(not os.path.exists(os.path.join(self.id_dir, unknown))) - self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "unknown_ids", unknown))) - - - # put file with malformed name (no revision) - malformed = "draft-ietf-mipshop-pfmipv6.txt" - self.write_id_file(malformed, 5000) - - clean_up_id_files() - - self.assertTrue(not os.path.exists(os.path.join(self.id_dir, malformed))) - self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "unknown_ids", malformed))) - - - # RFC draft - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.status_id = 3 - draft.save() - - txt = "%s-%s.txt" % (draft.filename, draft.revision) - self.write_id_file(txt, 5000) - pdf = "%s-%s.pdf" % (draft.filename, draft.revision) - self.write_id_file(pdf, 5000) - - clean_up_id_files() - - # txt files shouldn't be moved (for some reason) - self.assertTrue(os.path.exists(os.path.join(self.id_dir, txt))) - - self.assertTrue(not os.path.exists(os.path.join(self.id_dir, pdf))) - self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "unknown_ids", pdf))) - - - # expired without tombstone - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.status_id = 2 - draft.expiration_date = datetime.date.today() - datetime.timedelta(days=InternetDraft.DAYS_TO_EXPIRE + 1) - draft.save() - - txt = "%s-%s.txt" % (draft.filename, draft.revision) - self.write_id_file(txt, 5000) - - clean_up_id_files() - - self.assertTrue(not os.path.exists(os.path.join(self.id_dir, txt))) - self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "expired_without_tombstone", txt))) - - - # expired with tombstone - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.status_id = 2 - draft.expiration_date = datetime.date.today() - datetime.timedelta(days=InternetDraft.DAYS_TO_EXPIRE + 1) - draft.expired_tombstone = False - draft.save() - - revision_before = draft.revision - - txt = "%s-%s.txt" % (draft.filename, draft.revision) - self.write_id_file(txt, 1000) - - clean_up_id_files() - - self.assertTrue(not os.path.exists(os.path.join(self.id_dir, txt))) - self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "deleted_tombstones", txt))) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(int(draft.revision), int(revision_before) - 1) - self.assertTrue(draft.expired_tombstone) - -class ExpireLastCallTestCase(django.test.TestCase): - fixtures = ['base', 'draft'] - - def test_expire_last_call(self): - from ietf.idrfc.lastcall import get_expired_last_calls, expire_last_call - - # check that not expired drafts aren't expired - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - draft.idinternal.cur_state = IDState.objects.get(document_state_id=IDState.IN_LAST_CALL) - draft.idinternal.cur_substate = None - draft.idinternal.save() - draft.lc_expiration_date = datetime.date.today() + datetime.timedelta(days=2) - draft.save() - - self.assertEquals(len(get_expired_last_calls()), 0) - - draft.lc_expiration_date = None - draft.save() - - self.assertEquals(len(get_expired_last_calls()), 0) - - # test expired - draft.lc_expiration_date = datetime.date.today() - draft.save() - - drafts = get_expired_last_calls() - self.assertEquals(len(drafts), 1) - - mailbox_before = len(outbox) - comments_before = draft.idinternal.comments().count() - - expire_last_call(drafts[0]) - - draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6") - self.assertEquals(draft.idinternal.cur_state.document_state_id, IDState.WAITING_FOR_WRITEUP) - self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue("Last Call Expired" in outbox[-1]["Subject"]) - - +# REMOVED ALL THE CLASS DEFINITIONS FROM THIS FILE +# AS A FIRST STEP TOWARDS TRANSITION CLEANUP. ALL +# OF WHAT WAS HERE IS REDEFINED BY THE INCLUDE +# BELOW TEST_RFC_INDEX = ''' ''' -class MirrorScriptTestCases(unittest.TestCase,RealDatabaseTest): - - def setUp(self): - self.setUpRealDatabase() - def tearDown(self): - self.tearDownRealDatabase() - - def testRfcIndex(self): - print " Testing rfc-index.xml parsing" - from ietf.idrfc.mirror_rfc_index import parse - data = parse(StringIO.StringIO(TEST_RFC_INDEX)) - self.assertEquals(len(data), 6) - print "OK" - - def testRfcEditorQueue(self): - print " Testing queue2.xml parsing" - from ietf.idrfc.mirror_rfc_editor_queue import parse_all - (drafts,refs) = parse_all(StringIO.StringIO(TEST_QUEUE)) - self.assertEquals(len(drafts), 3) - self.assertEquals(len(refs), 3) - print "OK" if settings.USE_DB_REDESIGN_PROXY_CLASSES: from testsREDESIGN import * diff --git a/ietf/idrfc/testsREDESIGN.py b/ietf/idrfc/testsREDESIGN.py index 35ba65532..e80b03de4 100644 --- a/ietf/idrfc/testsREDESIGN.py +++ b/ietf/idrfc/testsREDESIGN.py @@ -172,7 +172,6 @@ class EditInfoTestCase(django.test.TestCase): self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form select[name=intended_std_level]')), 1) - self.assertEquals(len(q('form input[name=via_rfc_editor]')), 1) prev_ad = draft.ad # faulty post @@ -192,7 +191,6 @@ class EditInfoTestCase(django.test.TestCase): r = self.client.post(url, dict(intended_std_level=str(draft.intended_std_level.pk), stream=draft.stream_id, - via_rfc_editor="1", ad=str(new_ad.pk), notify="test@example.com", note="New note", @@ -201,7 +199,6 @@ class EditInfoTestCase(django.test.TestCase): self.assertEquals(r.status_code, 302) draft = Document.objects.get(name=draft.name) - self.assertTrue(draft.tags.filter(slug="via-rfc")) self.assertEquals(draft.ad, new_ad) self.assertEquals(draft.note, "New note") self.assertTrue(not draft.latest_event(TelechatDocEvent, type="telechat_date")) @@ -217,7 +214,6 @@ class EditInfoTestCase(django.test.TestCase): data = dict(intended_std_level=str(draft.intended_std_level_id), stream=draft.stream_id, - via_rfc_editor="1", ad=str(draft.ad_id), notify="test@example.com", note="", @@ -286,7 +282,6 @@ class EditInfoTestCase(django.test.TestCase): self.assertEquals(r.status_code, 200) q = PyQuery(r.content) self.assertEquals(len(q('form select[name=intended_std_level]')), 1) - self.assertEquals(len(q('form input[name=via_rfc_editor]')), 1) self.assertTrue('@' in q('form input[name=notify]')[0].get('value')) # add @@ -298,7 +293,6 @@ class EditInfoTestCase(django.test.TestCase): r = self.client.post(url, dict(intended_std_level=str(draft.intended_std_level_id), stream="ietf", - via_rfc_editor="1", ad=ad.pk, create_in_state=State.objects.get(type="draft-iesg", slug="watching").pk, notify="test@example.com", @@ -308,7 +302,6 @@ class EditInfoTestCase(django.test.TestCase): self.assertEquals(r.status_code, 302) draft = Document.objects.get(name=draft.name) - self.assertTrue(draft.tags.filter(slug="via-rfc")) self.assertEquals(draft.get_state_slug("draft-iesg"), "watching") self.assertEquals(draft.ad, ad) self.assertEquals(draft.note, "This is a note") @@ -770,12 +763,11 @@ class BallotWriteupsTestCase(django.test.TestCase): draft = Document.objects.get(name=draft.name) self.assertTrue("NOT be published" in draft.latest_event(WriteupDocEvent, type="changed_ballot_approval_text").text) - # test regenerate when it's via RFC Editor + # test regenerate when it's a conflict review draft.group = Group.objects.get(type="individ") draft.stream_id = "irtf" draft.save() draft.set_state(State.objects.get(type="draft-iesg", slug="iesg-eva")) - draft.tags.add("via-rfc") r = self.client.post(url, dict(regenerate_approval_text="1")) self.assertEquals(r.status_code, 200) diff --git a/ietf/idrfc/views_edit.py b/ietf/idrfc/views_edit.py index d3495355a..1ae99fae5 100644 --- a/ietf/idrfc/views_edit.py +++ b/ietf/idrfc/views_edit.py @@ -208,63 +208,7 @@ def dehtmlify_textarea_text(s): return s.replace("
", "\n").replace("", "").replace("", "").replace(" ", " ") class EditInfoForm(forms.Form): - intended_status = forms.ModelChoiceField(IDIntendedStatus.objects.all(), empty_label=None, required=True) - area_acronym = forms.ModelChoiceField(Area.active_areas(), required=True, empty_label='None Selected') - via_rfc_editor = forms.BooleanField(required=False, label="Via IRTF or RFC Editor") - stream = forms.ModelChoiceField(Stream.objects.all(), empty_label=None, required=True) - job_owner = forms.ModelChoiceField(IESGLogin.objects.filter(user_level__in=(IESGLogin.AD_LEVEL, IESGLogin.INACTIVE_AD_LEVEL)).order_by('user_level', 'last_name'), label="Responsible AD", empty_label=None, required=True) - create_in_state = forms.ModelChoiceField(IDState.objects.filter(document_state_id__in=(IDState.PUBLICATION_REQUESTED, IDState.AD_WATCHING)), empty_label=None, required=False) - state_change_notice_to = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas", required=False) - note = forms.CharField(widget=forms.Textarea, label="IESG note", required=False) - telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False, widget=forms.Select(attrs={'onchange':'make_bold()'})) - returning_item = forms.BooleanField(required=False) - - def __init__(self, *args, **kwargs): - old_ads = kwargs.pop('old_ads') - - super(self.__class__, self).__init__(*args, **kwargs) - - job_owners = IESGLogin.objects.in_bulk([t[0] for t in self.fields['job_owner'].choices]) - choices = [("","None Selected"), ] - if old_ads: - # separate active ADs from inactive - separated = False - for t in self.fields['job_owner'].choices: - if job_owners[t[0]].user_level != IESGLogin.AD_LEVEL and not separated: - choices.append(("", "----------------")) - separated = True - choices.append(t) - self.fields['job_owner'].choices = choices - else: - # remove old ones - for t in self.fields['job_owner'].choices: - if job_owners[t[0]].user_level==IESGLogin.AD_LEVEL: - choices.append(t) - self.fields['job_owner'].choices = choices - - # telechat choices - dates = TelechatDates.objects.all()[0].dates() - init = kwargs['initial']['telechat_date'] - if init and init not in dates: - dates.insert(0, init) - - choices = [("", "(not on agenda)")] - for d in dates: - choices.append((d, d.strftime("%Y-%m-%d"))) - - self.fields['telechat_date'].choices = choices - -# if kwargs['initial']['area_acronym'] == Acronym.INDIVIDUAL_SUBMITTER: -# # default to "gen" -# kwargs['initial']['area_acronym'] = 1008 - - # returning item is rendered non-standard - self.standard_fields = [x for x in self.visible_fields() if x.name not in ('returning_item',)] - - def clean_note(self): - # note is stored munged in the database - return self.cleaned_data['note'].replace('\n', '
').replace('\r', '').replace(' ', '  ') - + pass def get_initial_state_change_notice(doc): # set change state notice to something sensible @@ -311,7 +255,6 @@ def edit_info(request, name): # would be better to use NULL to # signify an empty ballot ballot_id=get_new_ballot_id(), - via_rfc_editor = False, ) if doc.idinternal.agenda: @@ -321,7 +264,11 @@ def edit_info(request, name): if request.method == 'POST': form = EditInfoForm(request.POST, - old_ads=False, + #old_ads needs to be True here - sometimes the user needs to touch + #the information on an older document and the AD associated with it + #should remain the same - if th old ADs aren't offered, the form + #won't let the user proceed without doing the wrong thing + old_ads=True, initial=dict(telechat_date=initial_telechat_date, area_acronym=doc.idinternal.area_acronym_id)) @@ -380,8 +327,6 @@ def edit_info(request, name): update_telechat(request, doc.idinternal, r['telechat_date'], r['returning_item']) - if in_group(request.user, 'Secretariat'): - doc.idinternal.via_rfc_editor = bool(r['via_rfc_editor']) doc.idinternal.email_display = str(doc.idinternal.job_owner) doc.idinternal.token_name = str(doc.idinternal.job_owner) @@ -420,8 +365,6 @@ def edit_info(request, name): form = EditInfoForm(old_ads=False, initial=init) - if not in_group(request.user, 'Secretariat'): - form.standard_fields = [x for x in form.standard_fields if x.name != "via_rfc_editor"] if not new_document: form.standard_fields = [x for x in form.standard_fields if x.name != "create_in_state"] @@ -441,7 +384,6 @@ def edit_info(request, name): class EditInfoFormREDESIGN(forms.Form): intended_std_level = forms.ModelChoiceField(IntendedStdLevelName.objects.filter(used=True), empty_label="(None)", required=True, label="Intended RFC status") - via_rfc_editor = forms.BooleanField(required=False, label="Via IRTF or RFC Editor") stream = forms.ModelChoiceField(StreamName.objects.all(), empty_label="(None)", required=True) area = forms.ModelChoiceField(Group.objects.filter(type="area", state="active"), empty_label="(None - individual submission)", required=False, label="Assigned to area") ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'), label="Responsible AD", empty_label="(None)", required=True) @@ -597,13 +539,6 @@ def edit_infoREDESIGN(request, name): update_telechat(request, doc, login, r['telechat_date'], r['returning_item']) - if has_role(request.user, 'Secretariat'): - via_rfc = DocTagName.objects.get(slug="via-rfc") - if r['via_rfc_editor']: - doc.tags.add(via_rfc) - else: - doc.tags.remove(via_rfc) - doc.time = datetime.datetime.now() if changes and not new_document: @@ -627,8 +562,6 @@ def edit_infoREDESIGN(request, name): # optionally filter out some fields if not new_document: form.standard_fields = [x for x in form.standard_fields if x.name != "create_in_state"] - if not has_role(request.user, 'Secretariat'): - form.standard_fields = [x for x in form.standard_fields if x.name != "via_rfc_editor"] if doc.group.type_id not in ("individ", "area"): form.standard_fields = [x for x in form.standard_fields if x.name != "area"] diff --git a/ietf/iesg/views.py b/ietf/iesg/views.py index 69e8463aa..7c2beafc7 100644 --- a/ietf/iesg/views.py +++ b/ietf/iesg/views.py @@ -60,52 +60,20 @@ def date_threshold(): return ret def inddocs(request): - if settings.USE_DB_REDESIGN_PROXY_CLASSES: - queryset_list_ind = [d for d in InternetDraft.objects.filter(tags__slug="via-rfc", docevent__type="iesg_approved").distinct() if d.latest_event(type__in=("iesg_disapproved", "iesg_approved")).type == "iesg_approved"] - queryset_list_ind.sort(key=lambda d: d.b_approve_date, reverse=True) + queryset_list_ind = [d for d in InternetDraft.objects.filter(stream__in=("IRTF","ISE"), docevent__type="iesg_approved").distinct() if d.latest_event(type__in=("iesg_disapproved", "iesg_approved")).type == "iesg_approved"] + queryset_list_ind.sort(key=lambda d: d.b_approve_date, reverse=True) - queryset_list_ind_dnp = [d for d in IDInternal.objects.filter(tags__slug="via-rfc", docevent__type="iesg_disapproved").distinct() if d.latest_event(type__in=("iesg_disapproved", "iesg_approved")).type == "iesg_disapproved"] - queryset_list_ind_dnp.sort(key=lambda d: d.dnp_date, reverse=True) + queryset_list_ind_dnp = [d for d in IDInternal.objects.filter(stream__in=("IRTF","ISE"), docevent__type="iesg_disapproved").distinct() if d.latest_event(type__in=("iesg_disapproved", "iesg_approved")).type == "iesg_disapproved"] + queryset_list_ind_dnp.sort(key=lambda d: d.dnp_date, reverse=True) - return render_to_response('iesg/independent_doc.html', - dict(object_list=queryset_list_ind, - object_list_dnp=queryset_list_ind_dnp), - context_instance=RequestContext(request)) + return render_to_response('iesg/independent_doc.html', + dict(object_list=queryset_list_ind, + object_list_dnp=queryset_list_ind_dnp), + context_instance=RequestContext(request)) - queryset_list_ind = InternetDraft.objects.filter(idinternal__via_rfc_editor=1, idinternal__rfc_flag=0, idinternal__noproblem=1, idinternal__dnp=0).order_by('-b_approve_date') - queryset_list_ind_dnp = IDInternal.objects.filter(via_rfc_editor = 1,rfc_flag=0,dnp=1).order_by('-dnp_date') - return object_list(request, queryset=queryset_list_ind, template_name='iesg/independent_doc.html', allow_empty=True, extra_context={'object_list_dnp':queryset_list_ind_dnp }) def wgdocs(request,cat): - is_recent = 0 - queryset_list=[] - queryset_list_doc=[] - if cat == 'new': - is_recent = 1 - queryset = InternetDraft.objects.filter(b_approve_date__gte = date_threshold(), intended_status__in=[1,2,6,7],idinternal__via_rfc_editor=0,idinternal__primary_flag=1).order_by("-b_approve_date") - queryset_doc = InternetDraft.objects.filter(b_approve_date__gte = date_threshold(), intended_status__in=[3,5],idinternal__via_rfc_editor=0, idinternal__primary_flag=1).order_by("-b_approve_date") - elif cat == 'prev': - queryset = InternetDraft.objects.filter(b_approve_date__lt = date_threshold(), b_approve_date__gte = '1997-12-1', intended_status__in=[1,2,6,7],idinternal__via_rfc_editor=0,idinternal__primary_flag=1).order_by("-b_approve_date") - queryset_doc = InternetDraft.objects.filter(b_approve_date__lt = date_threshold(), b_approve_date__gte = '1998-10-15', intended_status__in=[3,5],idinternal__via_rfc_editor=0,idinternal__primary_flag=1).order_by("-b_approve_date") - else: - raise Http404 - for item in list(queryset): - queryset_list.append(item) - try: - ballot_id=item.idinternal.ballot_id - except AttributeError: - ballot_id=0 - for sub_item in list(InternetDraft.objects.filter(idinternal__ballot=ballot_id,idinternal__primary_flag=0)): - queryset_list.append(sub_item) - for item2 in list(queryset_doc): - queryset_list_doc.append(item2) - try: - ballot_id=item2.idinternal.ballot_id - except AttributeError: - ballot_id=0 - for sub_item2 in list(InternetDraft.objects.filter(idinternal__ballot=ballot_id,idinternal__primary_flag=0)): - queryset_list_doc.append(sub_item2) - return render_to_response( 'iesg/ietf_doc.html', {'object_list': queryset_list, 'object_list_doc':queryset_list_doc, 'is_recent':is_recent}, context_instance=RequestContext(request) ) + pass def wgdocsREDESIGN(request,cat): is_recent = 0 @@ -119,7 +87,7 @@ def wgdocsREDESIGN(request,cat): if cat == 'new': is_recent = 1 - drafts = InternetDraft.objects.filter(docevent__type="iesg_approved", docevent__time__gte=threshold, intended_std_level__in=proto_levels + doc_levels).exclude(tags__slug="via-rfc").distinct() + drafts = InternetDraft.objects.filter(docevent__type="iesg_approved", docevent__time__gte=threshold, intended_std_level__in=proto_levels + doc_levels).exclude(stream__in=("ISE","IRTF")).distinct() for d in drafts: if d.b_approve_date and d.b_approve_date >= threshold: if d.intended_std_level_id in proto_levels: @@ -131,7 +99,7 @@ def wgdocsREDESIGN(request,cat): # proto start_date = datetime.date(1997, 12, 1) - drafts = InternetDraft.objects.filter(docevent__type="iesg_approved", docevent__time__lt=threshold, docevent__time__gte=start_date, intended_std_level__in=proto_levels).exclude(tags__slug="via-rfc").distinct() + drafts = InternetDraft.objects.filter(docevent__type="iesg_approved", docevent__time__lt=threshold, docevent__time__gte=start_date, intended_std_level__in=proto_levels).exclude(stream__in=("ISE","IRTF")).distinct() for d in drafts: if d.b_approve_date and start_date <= d.b_approve_date < threshold: @@ -140,7 +108,7 @@ def wgdocsREDESIGN(request,cat): # doc start_date = datetime.date(1998, 10, 15) - drafts = InternetDraft.objects.filter(docevent__type="iesg_approved", docevent__time__lt=threshold, docevent__time__gte=start_date, intended_std_level__in=doc_levels).exclude(tags__slug="via-rfc").distinct() + drafts = InternetDraft.objects.filter(docevent__type="iesg_approved", docevent__time__lt=threshold, docevent__time__gte=start_date, intended_std_level__in=doc_levels).exclude(stream__in=("ISE","IRTF")).distinct() for d in drafts: if d.b_approve_date and start_date <= d.b_approve_date < threshold: @@ -163,28 +131,7 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES: def get_doc_section(id): - states = [16,17,18,19,20,21] - if id.document().intended_status.intended_status_id in [1,2,6,7]: - s = "2" - else: - s = "3" - if id.rfc_flag == 0: - g = id.document().group_acronym() - else: - g = id.document().group_acronym - if g and str(g) != 'none': - s = s + "1" - elif (s == "3") and id.via_rfc_editor > 0: - s = s + "3" - else: - s = s + "2" - if not id.rfc_flag and id.cur_state.document_state_id not in states: - s = s + "3" - elif id.returning_item > 0: - s = s + "2" - else: - s = s + "1" - return s + pass def get_doc_sectionREDESIGN(id): states = [16,17,18,19,20,21] @@ -196,7 +143,7 @@ def get_doc_sectionREDESIGN(id): g = id.document().group_acronym() if g and str(g) != 'none': s = s + "1" - elif (s == "3") and id.via_rfc_editor: + elif (s == "3") and id.stream in ("ISE","IRTF"): s = s + "3" else: s = s + "2" @@ -349,7 +296,7 @@ def agenda_documents_txt(request): else: docs.extend(IDInternal.objects.filter(telechat_date=date, primary_flag=1, agenda=1)) t = loader.get_template('iesg/agenda_documents.txt') - c = Context({'docs':docs}) + c = Context({'docs':docs,'special_stream_list':['ISE','IRTF']}) return HttpResponse(t.render(c), mimetype='text/plain') class RescheduleForm(forms.Form): diff --git a/ietf/ietfworkflows/forms.py b/ietf/ietfworkflows/forms.py index 53c5c1a85..9c1a0c26c 100644 --- a/ietf/ietfworkflows/forms.py +++ b/ietf/ietfworkflows/forms.py @@ -301,40 +301,6 @@ class DraftTagsStateForm(StreamDraftForm): e.save() -class DraftStreamForm(StreamDraftForm): - - comment = forms.CharField(widget=forms.Textarea) - if settings.USE_DB_REDESIGN_PROXY_CLASSES: - stream = forms.ModelChoiceField(StreamName.objects.exclude(slug="legacy")) - else: - stream = forms.ModelChoiceField(Stream.objects.all()) - - template = 'ietfworkflows/stream_form.html' - - def __init__(self, *args, **kwargs): - super(DraftStreamForm, self).__init__(*args, **kwargs) - self.stream = get_stream_from_draft(self.draft) - self.tags = [i.annotation_tag for i in get_annotation_tags_for_draft(self.draft)] - if self.stream: - self.fields['stream'].initial = self.stream.pk - - def save(self): - comment = self.cleaned_data.get('comment').strip() - to_stream = self.cleaned_data.get('stream') - - update_stream(self.request, self.draft, - comment=comment, - person=self.person, - to_stream=to_stream) - - if comment: - e = DocEvent(type="added_comment") - e.time = self.draft.time - e.by = self.person - e.doc_id = self.draft.pk - e.desc = comment - e.save() - class StreamDelegatesForm(forms.Form): email = forms.EmailField() diff --git a/ietf/ietfworkflows/templatetags/ietf_streams.py b/ietf/ietfworkflows/templatetags/ietf_streams.py index 0a8f7dcef..13a040554 100644 --- a/ietf/ietfworkflows/templatetags/ietf_streams.py +++ b/ietf/ietfworkflows/templatetags/ietf_streams.py @@ -75,9 +75,6 @@ def edit_actions(context, wrapper): if can_edit_state(user, draft): actions.append(("Change stream state", urlreverse('edit_state', kwargs=dict(name=doc.draft_name)))) - if can_edit_stream(user, draft): - actions.append(("Change stream", urlreverse('edit_stream', kwargs=dict(name=doc.draft_name)))) - if can_manage_shepherd_of_a_document(user, draft): actions.append(("Change shepherd", urlreverse('doc_managing_shepherd', kwargs=dict(acronym=draft.group.acronym, name=draft.filename)))) diff --git a/ietf/ietfworkflows/tests.py b/ietf/ietfworkflows/tests.py index ef3576a3f..5bfe16fbd 100644 --- a/ietf/ietfworkflows/tests.py +++ b/ietf/ietfworkflows/tests.py @@ -139,37 +139,6 @@ class EditStreamInfoTestCase(django.test.TestCase): self.assertTrue("wgchairman@ietf.org" in unicode(outbox[-1])) self.assertTrue("wgdelegate@ietf.org" in unicode(outbox[-1])) - def test_set_stream(self): - draft = make_test_data() - draft.stream = None - draft.save() - - url = urlreverse('edit_stream', kwargs=dict(name=draft.name)) - login_testing_unauthorized(self, "secretary", url) - - # get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('select[name=stream]')), 1) - - # set state - mailbox_before = len(outbox) - events_before = draft.docevent_set.count() - r = self.client.post(url, - dict(comment="some comment", - stream="irtf", - )) - self.assertEquals(r.status_code, 302) - - draft = Document.objects.get(pk=draft.pk) - self.assertEquals(draft.stream_id, "irtf") - self.assertEquals(draft.docevent_set.count() - events_before, 2) - self.assertEquals(len(outbox), mailbox_before + 1) - self.assertTrue("stream changed" in outbox[-1]["Subject"].lower()) - self.assertTrue("wgchairman@ietf.org" in unicode(outbox[-1])) - self.assertTrue("wgdelegate@ietf.org" in unicode(outbox[-1])) - def test_manage_stream_delegates(self): make_test_data() diff --git a/ietf/ietfworkflows/urls.py b/ietf/ietfworkflows/urls.py index 43fee62cc..ae339e45c 100644 --- a/ietf/ietfworkflows/urls.py +++ b/ietf/ietfworkflows/urls.py @@ -1,11 +1,12 @@ # Copyright The IETF Trust 2008, All Rights Reserved from django.conf.urls.defaults import patterns, url +from django.views.generic.simple import redirect_to urlpatterns = patterns('ietf.ietfworkflows.views', url(r'^(?P[^/]+)/history/$', 'stream_history', name='stream_history'), url(r'^(?P[^/]+)/edit/adopt/$', 'edit_adopt', name='edit_adopt'), url(r'^(?P[^/]+)/edit/state/$', 'edit_state', name='edit_state'), - url(r'^(?P[^/]+)/edit/stream/$', 'edit_stream', name='edit_stream'), + url(r'^(?P[^/]+)/edit/stream/$', redirect_to, { 'url': '/doc/%(name)s/edit/info/'}) , url(r'^delegates/(?P[^/]+)/$', 'stream_delegates', name='stream_delegates'), ) diff --git a/ietf/ietfworkflows/views.py b/ietf/ietfworkflows/views.py index fbbcc5b67..62bc5ecd3 100644 --- a/ietf/ietfworkflows/views.py +++ b/ietf/ietfworkflows/views.py @@ -7,7 +7,6 @@ from django.core.urlresolvers import reverse as urlreverse from ietf.idtracker.models import InternetDraft from ietf.ietfworkflows.models import Stream, StreamDelegate from ietf.ietfworkflows.forms import (DraftTagsStateForm, - DraftStreamForm, NoWorkflowStateForm, StreamDelegatesForm) from ietf.ietfworkflows.streams import (get_stream_from_draft, @@ -114,12 +113,6 @@ def edit_state(request, name): return _edit_draft_stream(request, draft, DraftTagsStateForm) -def edit_stream(request, name): - draft = get_object_or_404(InternetDraft, filename=name) - if not can_edit_stream(request.user, draft): - return HttpResponseForbidden("You don't have permission to access this view") - return _edit_draft_stream(request, draft, DraftStreamForm) - def stream_delegates(request, stream_name): stream = get_object_or_404(Stream, name=stream_name) diff --git a/ietf/templates/iesg/agenda_documents.txt b/ietf/templates/iesg/agenda_documents.txt index a36772a20..015dbf509 100644 --- a/ietf/templates/iesg/agenda_documents.txt +++ b/ietf/templates/iesg/agenda_documents.txt @@ -31,4 +31,4 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. {% endcomment %}# Fields: telechat date, filename (draft-foo-bar or rfc1234), intended status, rfc editor submission flag (0=no, 1=yes), area acronym, AD name, version{% for doc in docs %} -{{ doc.telechat_date }} {{ doc.document.filename }} {{ doc.document.intended_status }} {{doc.via_rfc_editor|yesno:"1,0,0"}} {{doc.area_acronym|lower}} {{doc.token_name }} {{doc.document.revision}}{% endfor %} \ No newline at end of file +{{ doc.telechat_date }} {{ doc.document.filename }} {{ doc.document.intended_status }} {% if doc.stream in special_stream_list %}1{% else %}0{% endif %} {{doc.document.revision}}{% endfor %} diff --git a/ietf/templates/iesg/independent_doc.html b/ietf/templates/iesg/independent_doc.html index d480a9385..fd63d45ca 100644 --- a/ietf/templates/iesg/independent_doc.html +++ b/ietf/templates/iesg/independent_doc.html @@ -15,7 +15,7 @@ The RFC Editor receives requests to publish non-IETF Working Group documents as {% regroup date.list by idinternal.ballot_id as ballots %} {% for each_ballot in ballots %} {% if each_ballot.grouper %} -
  • +
  • {% for item in each_ballot.list %} {{ item.title|escape }} ({{ item.intended_status }})
    {% endfor %} @@ -33,7 +33,7 @@ The RFC Editor receives requests to publish non-IETF Working Group documents as Date Sent: {{ date.grouper }}
    {% endfor %}