Move fixture generation for names to name app, add liaison edit test,

fix some liaison bugs
 - Legacy-Id: 3347
This commit is contained in:
Ole Laursen 2011-08-22 12:37:56 +00:00
parent 91ced5c24a
commit 2bf8e0a45d
6 changed files with 348 additions and 41 deletions

View file

@ -80,6 +80,11 @@ class LiaisonForm(forms.Form):
x = getattr(self.instance, name)
if name == "purpose": # proxy has a name-clash on purpose so help it
x = x.order
try:
x = x.pk # foreign keys need the .pk, not the actual object
except AttributeError:
pass
self.initial[name] = x
except AttributeError:
# we have some fields on the form that aren't in the model

View file

@ -22,7 +22,7 @@ class LiaisonsUrlTestCase(SimpleUrlTestCase):
return content
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
from ietf.liaisons.models import LiaisonStatement
from ietf.liaisons.models import LiaisonStatement, LiaisonStatementPurposeName
from redesign.person.models import Person, Email
from redesign.group.models import Group, Role
@ -87,7 +87,7 @@ class LiaisonManagementTestCase(django.test.TestCase):
q = PyQuery(r.content)
self.assertEquals(len(q('form input[name=do_action_taken]')), 0)
# logged in and get
# log in and get
self.client.login(remote_user="secretary")
r = self.client.get(url)
@ -103,7 +103,51 @@ class LiaisonManagementTestCase(django.test.TestCase):
liaison = LiaisonStatement.objects.get(id=liaison.id)
self.assertTrue(liaison.action_taken)
def test_edit_liaison(self):
make_test_data()
liaison = make_liaison_models()
url = urlreverse('liaison_edit', kwargs=dict(object_id=liaison.pk))
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('form input[name=from_field]')), 1)
# edit
r = self.client.post(url,
dict(from_field="from",
replyto="replyto@example.com",
organization="org",
to_poc="to_poc@example.com",
response_contact="responce_contact@example.com",
technical_contact="technical_contact@example.com",
cc1="cc1@example.com",
purpose="4",
deadline_date=(liaison.deadline + datetime.timedelta(days=1)).strftime("%Y-%m-%d"),
title="title",
submitted_date=(liaison.submitted + datetime.timedelta(days=1)).strftime("%Y-%m-%d"),
body="body",
))
self.assertEquals(r.status_code, 302)
new_liaison = LiaisonStatement.objects.get(id=liaison.id)
self.assertEquals(new_liaison.from_name, "from")
self.assertEquals(new_liaison.reply_to, "replyto@example.com")
self.assertEquals(new_liaison.to_name, "org")
self.assertEquals(new_liaison.to_contact, "to_poc@example.com")
self.assertEquals(new_liaison.response_contact, "responce_contact@example.com")
self.assertEquals(new_liaison.technical_contact, "technical_contact@example.com")
self.assertEquals(new_liaison.cc, "cc1@example.com")
self.assertEquals(new_liaison.purpose, LiaisonStatementPurposeName.objects.get(order=4))
self.assertEquals(new_liaison.deadline, liaison.deadline + datetime.timedelta(days=1)),
self.assertEquals(new_liaison.title, "title")
self.assertEquals(new_liaison.submitted.date(), (liaison.submitted + datetime.timedelta(days=1)).date())
self.assertEquals(new_liaison.body, "body")
self.assertTrue(new_liaison.modified > liaison.modified)
# test links and edit button
if not settings.USE_DB_REDESIGN_PROXY_CLASSES:
# the above tests only work with the new schema

View file

@ -88,9 +88,8 @@ class RelatedLiaisonWidget(TextInput):
noliaison = 'inline'
deselect = 'none'
else:
from ietf.liaisons.models import LiaisonDetail
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
from ietf.liaisons.proxy import LiaisonDetail
from ietf.liaisons.proxy import LiaisonDetailProxy as LiaisonDetail
liaison = LiaisonDetail.objects.get(pk=value)
title = liaison.title
if not title:

View file

@ -213,8 +213,9 @@ def canonicalize_sitemap(s):
def login_testing_unauthorized(tc, remote_user, url):
r = tc.client.get(url)
tc.assertEquals(r.status_code, 302)
tc.assertTrue("/accounts/login" in r['Location'])
tc.assertTrue(r.status_code in (302, 403))
if r.status_code == 302:
tc.assertTrue("/accounts/login" in r['Location'])
tc.client.login(remote_user=remote_user)

View file

@ -36,45 +36,33 @@
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="extpty" model="name.docinfotagname">
<field type="CharField" name="name">External Party</field>
<field type="TextField" name="desc">The document is awaiting review or input from an external party (i.e, someone other than the shepherding AD, the authors, or the WG). See the "note" field for more details on who has the action.</field>
<object pk="conflict" model="name.constraintname">
<field type="CharField" name="name">Conflicts with</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="need-rev" model="name.docinfotagname">
<field type="CharField" name="name">Revised ID Needed</field>
<field type="TextField" name="desc">An updated ID is needed to address the issues that have been raised.</field>
<object pk="conflic2" model="name.constraintname">
<field type="CharField" name="name">Conflicts with (secondary)</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="conflic3" model="name.constraintname">
<field type="CharField" name="name">Conflicts with (tertiary)</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="iana-crd" model="name.docinfotagname">
<field type="CharField" name="name">IANA-coord</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="ad-f-up" model="name.docinfotagname">
<field type="CharField" name="name">AD Followup</field>
<field type="TextField" name="desc">A generic substate indicating that the shepherding AD has the action item to determine appropriate next steps. In particular, the appropriate steps (and the corresponding next state or substate) depend entirely on the nature of the issues that were raised and can only be decided with active involvement of the shepherding AD. Examples include:
- if another AD raises an issue, the shepherding AD may first iterate with the other AD to get a better understanding of the exact issue. Or, the shepherding AD may attempt to argue that the issue is not serious enough to bring to the attention of the authors/WG.
- if a documented issue is forwarded to a WG, some further iteration may be needed before it can be determined whether a new revision is needed or whether the WG response to an issue clarifies the issue sufficiently.
- when a new revision appears, the shepherding AD will first look at the changes to determine whether they believe all outstanding issues have been raised satisfactorily, prior to asking the ADs who raised the original issues to verify the changes.</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="point" model="name.docinfotagname">
<field type="CharField" name="name">Point Raised - writeup needed</field>
<field type="TextField" name="desc">IESG discussions on the document have raised some issues that need to be brought to the attention of the authors/WG, but those issues have not been written down yet. (It is common for discussions during a telechat to result in such situations. An AD may raise a possible issue during a telechat and only decide as a result of that discussion whether the issue is worth formally writing up and bringing to the attention of the authors/WG). A document stays in the "Point Raised - Writeup Needed" state until *ALL* IESG comments that have been raised have been documented.</field>
<field type="CharField" name="name">IANA coordination</field>
<field type="TextField" name="desc">RFC-Editor/IANA Registration Coordination</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="missref" model="name.docinfotagname">
<field type="CharField" name="name">MissingRef</field>
<field type="TextField" name="desc"></field>
<field type="CharField" name="name">Missing references</field>
<field type="TextField" name="desc">Awaiting missing normative reference</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
@ -114,6 +102,42 @@
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="ref" model="name.docinfotagname">
<field type="CharField" name="name">Holding for references</field>
<field type="TextField" name="desc">Holding for normative reference</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="point" model="name.docinfotagname">
<field type="CharField" name="name">Point Raised - writeup needed</field>
<field type="TextField" name="desc">IESG discussions on the document have raised some issues that need to be brought to the attention of the authors/WG, but those issues have not been written down yet. (It is common for discussions during a telechat to result in such situations. An AD may raise a possible issue during a telechat and only decide as a result of that discussion whether the issue is worth formally writing up and bringing to the attention of the authors/WG). A document stays in the "Point Raised - Writeup Needed" state until *ALL* IESG comments that have been raised have been documented.</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">1</field>
</object>
<object pk="ad-f-up" model="name.docinfotagname">
<field type="CharField" name="name">AD Followup</field>
<field type="TextField" name="desc">A generic substate indicating that the shepherding AD has the action item to determine appropriate next steps. In particular, the appropriate steps (and the corresponding next state or substate) depend entirely on the nature of the issues that were raised and can only be decided with active involvement of the shepherding AD. Examples include:
- if another AD raises an issue, the shepherding AD may first iterate with the other AD to get a better understanding of the exact issue. Or, the shepherding AD may attempt to argue that the issue is not serious enough to bring to the attention of the authors/WG.
- if a documented issue is forwarded to a WG, some further iteration may be needed before it can be determined whether a new revision is needed or whether the WG response to an issue clarifies the issue sufficiently.
- when a new revision appears, the shepherding AD will first look at the changes to determine whether they believe all outstanding issues have been raised satisfactorily, prior to asking the ADs who raised the original issues to verify the changes.</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">2</field>
</object>
<object pk="extpty" model="name.docinfotagname">
<field type="CharField" name="name">External Party</field>
<field type="TextField" name="desc">The document is awaiting review or input from an external party (i.e, someone other than the shepherding AD, the authors, or the WG). See the "note" field for more details on who has the action.</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">3</field>
</object>
<object pk="need-rev" model="name.docinfotagname">
<field type="CharField" name="name">Revised ID Needed</field>
<field type="TextField" name="desc">An updated ID is needed to address the issues that have been raised.</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">5</field>
</object>
<object pk="updates" model="name.docrelationshipname">
<field type="CharField" name="name">Updates</field>
<field type="TextField" name="desc"></field>
@ -222,6 +246,30 @@
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="agenda" model="name.doctypename">
<field type="CharField" name="name">Agenda</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="minutes" model="name.doctypename">
<field type="CharField" name="name">Minutes</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="slides" model="name.doctypename">
<field type="CharField" name="name">Slides</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="liai-att" model="name.doctypename">
<field type="CharField" name="name">Liaison Attachment</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="bof" model="name.groupstatename">
<field type="CharField" name="name">BOF</field>
<field type="TextField" name="desc"></field>
@ -294,6 +342,18 @@
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="ag" model="name.grouptypename">
<field type="CharField" name="name">AG</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="sdo" model="name.grouptypename">
<field type="CharField" name="name">Standards Organization</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="pub-req" model="name.iesgdocstatename">
<field type="CharField" name="name">Publication Requested</field>
<field type="TextField" name="desc">A formal request has been made to advance/publish the document, following the procedures in Section 7.5 of RFC 2418. The request could be from a WG chair, from an individual through the RFC Editor, etc. (The Secretariat (iesg-secretary@ietf.org) is copied on these requests to ensure that the request makes it into the ID tracker.) A document in this state has not (yet) been reviewed by an AD nor has any official action been taken on it yet (other than to note that its publication has been requested.</field>
@ -313,7 +373,7 @@
<field type="IntegerField" name="order">12</field>
</object>
<object pk="lc-req" model="name.iesgdocstatename">
<field type="CharField" name="name">Last Call requested</field>
<field type="CharField" name="name">Last Call Requested</field>
<field type="TextField" name="desc">The AD has requested that the Secretariat start an IETF Last Call, but the the actual Last Call message has not been sent yet.</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">15</field>
@ -438,6 +498,108 @@
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="action" model="name.liaisonstatementpurposename">
<field type="CharField" name="name">For action</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">1</field>
</object>
<object pk="comment" model="name.liaisonstatementpurposename">
<field type="CharField" name="name">For comment</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">2</field>
</object>
<object pk="info" model="name.liaisonstatementpurposename">
<field type="CharField" name="name">For information</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">3</field>
</object>
<object pk="response" model="name.liaisonstatementpurposename">
<field type="CharField" name="name">In response</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">4</field>
</object>
<object pk="ietf" model="name.meetingtypename">
<field type="CharField" name="name">IETF</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="interim" model="name.meetingtypename">
<field type="CharField" name="name">Interim</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="auth" model="name.rfcdocstatename">
<field type="CharField" name="name">AUTH</field>
<field type="TextField" name="desc">Awaiting author action</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="auth48" model="name.rfcdocstatename">
<field type="CharField" name="name">AUTH48</field>
<field type="TextField" name="desc">Awaiting final author approval</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="edit" model="name.rfcdocstatename">
<field type="CharField" name="name">EDIT</field>
<field type="TextField" name="desc">Approved by the stream manager (e.g., IESG, IAB, IRSG, ISE), awaiting processing and publishing</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="iana-crd" model="name.rfcdocstatename">
<field type="CharField" name="name">IANA</field>
<field type="TextField" name="desc">RFC-Editor/IANA Registration Coordination</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="iesg" model="name.rfcdocstatename">
<field type="CharField" name="name">IESG</field>
<field type="TextField" name="desc">Holding for IESG action</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="isr" model="name.rfcdocstatename">
<field type="CharField" name="name">ISR</field>
<field type="TextField" name="desc">Independent Submission Review by the ISE </field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="isr-auth" model="name.rfcdocstatename">
<field type="CharField" name="name">ISR-AUTH</field>
<field type="TextField" name="desc">Independent Submission awaiting author update, or in discussion between author and ISE</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="ref" model="name.rfcdocstatename">
<field type="CharField" name="name">REF</field>
<field type="TextField" name="desc">Holding for normative reference</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="rfc-edit" model="name.rfcdocstatename">
<field type="CharField" name="name">RFC-EDITOR</field>
<field type="TextField" name="desc">Awaiting final RFC Editor review before AUTH48</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="timeout" model="name.rfcdocstatename">
<field type="CharField" name="name">TO</field>
<field type="TextField" name="desc">Time-out period during which the IESG reviews document for conflict/concurrence with other IETF working group work</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="missref" model="name.rfcdocstatename">
<field type="CharField" name="name">MISSREF</field>
<field type="TextField" name="desc">Awaiting missing normative reference</field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="ad" model="name.rolename">
<field type="CharField" name="name">Area Director</field>
<field type="TextField" name="desc"></field>
@ -474,6 +636,72 @@
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="dir" model="name.rolename">
<field type="CharField" name="name">Executive Director</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="execdir" model="name.rolename">
<field type="CharField" name="name">Executive Director</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="admdir" model="name.rolename">
<field type="CharField" name="name">Administrative Director</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="liaiman" model="name.rolename">
<field type="CharField" name="name">Liaison Manager</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="auth" model="name.rolename">
<field type="CharField" name="name">Authorized Individual</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="schedw" model="name.sessionstatusname">
<field type="CharField" name="name">Waiting for Scheduling</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="apprw" model="name.sessionstatusname">
<field type="CharField" name="name">Waiting for Approval</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="appr" model="name.sessionstatusname">
<field type="CharField" name="name">Approved</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="sched" model="name.sessionstatusname">
<field type="CharField" name="name">Scheduled</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="canceled" model="name.sessionstatusname">
<field type="CharField" name="name">Canceled</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="disappr" model="name.sessionstatusname">
<field type="CharField" name="name">Disapproved</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="std" model="name.stdlevelname">
<field type="CharField" name="name">Standard</field>
<field type="TextField" name="desc"></field>
@ -522,4 +750,34 @@
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="session" model="name.timeslottypename">
<field type="CharField" name="name">Session</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="break" model="name.timeslottypename">
<field type="CharField" name="name">Break</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="reg" model="name.timeslottypename">
<field type="CharField" name="name">Registration</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="other" model="name.timeslottypename">
<field type="CharField" name="name">Other</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
<object pk="plenary" model="name.timeslottypename">
<field type="CharField" name="name">Plenary</field>
<field type="TextField" name="desc"></field>
<field type="BooleanField" name="used">1</field>
<field type="IntegerField" name="order">0</field>
</object>
</django-objects>

View file

@ -3,9 +3,9 @@
# boiler plate
import os, sys
one_dir_up = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../'))
ietf_path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../ietf'))
sys.path.insert(0, one_dir_up)
sys.path.insert(0, ietf_path)
from django.core.management import setup_environ
import settings
@ -17,7 +17,7 @@ from django.db.models import Q
def output(name, qs):
try:
f = open(os.path.join(settings.BASE_DIR, "idrfc/fixtures/%s.xml" % name), 'w')
f = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "fixtures/%s.xml" % name), 'w')
f.write(serialize("xml", qs, indent=4))
f.close()
except:
@ -29,10 +29,10 @@ def output(name, qs):
# pick all name models directly out of the module
names = []
import name.models
for n in dir(name.models):
import redesign.name.models
for n in dir(redesign.name.models):
if n[:1].upper() == n[:1] and n.endswith("Name"):
model = getattr(name.models, n)
model = getattr(redesign.name.models, n)
if not model._meta.abstract:
names.extend(model.objects.all())