Move idrfc/views_doc.py to doc/ with associated templates, replace the
somewhat fragile simple URL tests for views_doc.py with ordinary unit tests. The new tests are still fairly basic but at least test more than the URL tests did. - Legacy-Id: 5295
This commit is contained in:
parent
1a3aa3b443
commit
accf6d4470
|
@ -1,3 +1,144 @@
|
|||
import os, shutil, datetime
|
||||
|
||||
import django.test
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
from django.conf import settings
|
||||
|
||||
from pyquery import PyQuery
|
||||
|
||||
from ietf.utils.mail import outbox
|
||||
from ietf.utils.test_utils import login_testing_unauthorized
|
||||
from ietf.utils.test_data import make_test_data
|
||||
|
||||
from ietf.doc.models import *
|
||||
from ietf.name.models import *
|
||||
from ietf.group.models import *
|
||||
from ietf.person.models import *
|
||||
from ietf.meeting.models import Meeting, MeetingTypeName
|
||||
from ietf.iesg.models import TelechatDate
|
||||
|
||||
# extra tests
|
||||
from ietf.doc.tests_conflict_review import *
|
||||
|
||||
|
||||
class DocTestCase(django.test.TestCase):
|
||||
fixtures = ['names']
|
||||
|
||||
def test_document_draft(self):
|
||||
draft = make_test_data()
|
||||
|
||||
# these tests aren't testing all attributes yet, feel free to
|
||||
# expand them
|
||||
|
||||
|
||||
# active draft
|
||||
draft.set_state(State.objects.get(type="draft", slug="active"))
|
||||
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name=draft.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("Active Internet-Draft" in r.content)
|
||||
|
||||
# expired draft
|
||||
draft.set_state(State.objects.get(type="draft", slug="expired"))
|
||||
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name=draft.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("Expired Internet-Draft" in r.content)
|
||||
|
||||
# replaced draft
|
||||
draft.set_state(State.objects.get(type="draft", slug="repl"))
|
||||
|
||||
replacement = Document.objects.create(
|
||||
name="draft-ietf-replacement",
|
||||
time=datetime.datetime.now(),
|
||||
type_id="draft",
|
||||
title="Replacement Draft",
|
||||
stream_id=draft.stream_id, group_id=draft.group_id, abstract=draft.stream, rev=draft.rev,
|
||||
pages=draft.pages, intended_std_level_id=draft.intended_std_level_id,
|
||||
shepherd_id=draft.shepherd_id, ad_id=draft.ad_id, expires=draft.expires,
|
||||
notify=draft.notify, note=draft.note)
|
||||
DocAlias.objects.create(name=replacement.name, document=replacement)
|
||||
rel = RelatedDocument.objects.create(source=replacement,
|
||||
target=draft.docalias_set.get(name__startswith="draft"),
|
||||
relationship_id="replaces")
|
||||
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name=draft.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("Replaced Internet-Draft" in r.content)
|
||||
self.assertTrue(replacement.name in r.content)
|
||||
rel.delete()
|
||||
|
||||
# draft published as RFC
|
||||
draft.set_state(State.objects.get(type="draft", slug="rfc"))
|
||||
draft.std_level_id = "bcp"
|
||||
draft.save()
|
||||
|
||||
DocEvent.objects.create(doc=draft, type="published_rfc", by=Person.objects.get(name="(System)"))
|
||||
|
||||
rfc_alias = DocAlias.objects.create(name="rfc123456", document=draft)
|
||||
bcp_alias = DocAlias.objects.create(name="bcp123456", document=draft)
|
||||
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name=draft.name)))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name=bcp_alias.name)))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name=rfc_alias.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("RFC 123456" in r.content)
|
||||
self.assertTrue(draft.name in r.content)
|
||||
|
||||
# naked RFC
|
||||
rfc = Document.objects.create(
|
||||
name="rfc1234567",
|
||||
type_id="draft",
|
||||
title="RFC without a Draft",
|
||||
stream_id="ise",
|
||||
group=Group.objects.get(type="individ"),
|
||||
std_level_id="ps")
|
||||
DocAlias.objects.create(name=rfc.name, document=rfc)
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name=rfc.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("RFC 1234567" in r.content)
|
||||
|
||||
# unknown draft
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name="draft-xyz123")))
|
||||
self.assertEqual(r.status_code, 404)
|
||||
|
||||
def test_document_charter(self):
|
||||
make_test_data()
|
||||
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name="charter-ietf-mars")))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
def test_document_conflict_review(self):
|
||||
make_test_data()
|
||||
|
||||
r = self.client.get(urlreverse("doc_view", kwargs=dict(name='conflict-review-imaginary-irtf-submission')))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
def test_document_ballot(self):
|
||||
doc = make_test_data()
|
||||
ballot = doc.active_ballot()
|
||||
|
||||
BallotPositionDocEvent.objects.create(
|
||||
doc=doc,
|
||||
type="changed_ballot_position",
|
||||
pos_id="yes",
|
||||
comment="Looks fine to me",
|
||||
comment_time=datetime.datetime.now(),
|
||||
ad=Person.objects.get(user__username="ad"),
|
||||
by=Person.objects.get(name="(System)"))
|
||||
|
||||
r = self.client.get(urlreverse("ietf.doc.views_doc.document_ballot", kwargs=dict(name=doc.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
# test popup too while we're at it
|
||||
r = self.client.get(urlreverse("ietf.doc.views_doc.ballot_for_popup", kwargs=dict(name=doc.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
def test_document_json(self):
|
||||
doc = make_test_data()
|
||||
|
||||
r = self.client.get(urlreverse("ietf.doc.views_doc.document_json", kwargs=dict(name=doc.name)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
|
|
@ -50,27 +50,27 @@ from ietf.ietfauth.utils import *
|
|||
|
||||
def render_document_top(request, doc, tab, name):
|
||||
tabs = []
|
||||
tabs.append(("Document", "document", urlreverse("ietf.idrfc.views_doc.document_main", kwargs=dict(name=name)), True))
|
||||
tabs.append(("Document", "document", urlreverse("doc_view", kwargs=dict(name=name)), True))
|
||||
|
||||
ballot = doc.latest_event(BallotDocEvent, type="created_ballot")
|
||||
if doc.type_id in ("draft","conflrev"):
|
||||
# if doc.in_ietf_process and doc.ietf_process.has_iesg_ballot:
|
||||
tabs.append(("IESG Evaluation Record", "ballot", urlreverse("ietf.idrfc.views_doc.document_ballot", kwargs=dict(name=name)), ballot))
|
||||
tabs.append(("IESG Evaluation Record", "ballot", urlreverse("doc_ballot", kwargs=dict(name=name)), ballot))
|
||||
elif doc.type_id == "charter":
|
||||
tabs.append(("IESG Review", "ballot", urlreverse("ietf.idrfc.views_doc.document_ballot", kwargs=dict(name=name)), ballot))
|
||||
tabs.append(("IESG Review", "ballot", urlreverse("doc_ballot", kwargs=dict(name=name)), ballot))
|
||||
|
||||
# FIXME: if doc.in_ietf_process and doc.ietf_process.has_iesg_ballot:
|
||||
if doc.type_id != "conflrev":
|
||||
tabs.append(("IESG Writeups", "writeup", urlreverse("ietf.idrfc.views_doc.document_writeup", kwargs=dict(name=name)), True))
|
||||
tabs.append(("IESG Writeups", "writeup", urlreverse("doc_writeup", kwargs=dict(name=name)), True))
|
||||
|
||||
tabs.append(("History", "history", urlreverse("ietf.idrfc.views_doc.document_history", kwargs=dict(name=name)), True))
|
||||
tabs.append(("History", "history", urlreverse("doc_history", kwargs=dict(name=name)), True))
|
||||
|
||||
if name.startswith("rfc"):
|
||||
name = "RFC %s" % name[3:]
|
||||
else:
|
||||
name += "-" + doc.rev
|
||||
|
||||
return render_to_string("idrfc/document_top.html",
|
||||
return render_to_string("doc/document_top.html",
|
||||
dict(doc=doc,
|
||||
tabs=tabs,
|
||||
selected=tab,
|
||||
|
@ -298,7 +298,7 @@ def document_main(request, name, rev=None):
|
|||
if doc.get_state_slug() != "expired" and doc.stream_id in ("ietf",) and can_edit and not iesg_state:
|
||||
actions.append(("Begin IESG Processing", urlreverse('doc_edit_info', kwargs=dict(name=doc.name)) + "?new=1"))
|
||||
|
||||
return render_to_response("idrfc/document_draft.html",
|
||||
return render_to_response("doc/document_draft.html",
|
||||
dict(doc=doc,
|
||||
group=group,
|
||||
top=top,
|
||||
|
@ -368,7 +368,7 @@ def document_main(request, name, rev=None):
|
|||
if chartering and not snapshot:
|
||||
milestones = doc.group.groupmilestone_set.filter(state="charter")
|
||||
|
||||
return render_to_response("idrfc/document_charter.html",
|
||||
return render_to_response("doc/document_charter.html",
|
||||
dict(doc=doc,
|
||||
top=top,
|
||||
chartering=chartering,
|
||||
|
@ -397,7 +397,7 @@ def document_main(request, name, rev=None):
|
|||
if doc.get_state_slug() in ("iesgeval"):
|
||||
ballot_summary = needed_ballot_positions(doc, doc.active_ballot().active_ad_positions().values())
|
||||
|
||||
return render_to_response("idrfc/document_conflict_review.html",
|
||||
return render_to_response("doc/document_conflict_review.html",
|
||||
dict(doc=doc,
|
||||
top=top,
|
||||
content=content,
|
||||
|
@ -450,7 +450,7 @@ def document_history(request, name):
|
|||
augment_events_with_revision(doc, events)
|
||||
add_links_in_new_revision_events(doc, events, diff_revisions)
|
||||
|
||||
return render_to_response("idrfc/document_history.html",
|
||||
return render_to_response("doc/document_history.html",
|
||||
dict(doc=doc,
|
||||
top=top,
|
||||
diff_revisions=diff_revisions,
|
||||
|
@ -510,7 +510,7 @@ def document_writeup(request, name):
|
|||
if not sections:
|
||||
raise Http404()
|
||||
|
||||
return render_to_response("idrfc/document_writeup.html",
|
||||
return render_to_response("doc/document_writeup.html",
|
||||
dict(doc=doc,
|
||||
top=top,
|
||||
sections=sections,
|
||||
|
@ -562,7 +562,7 @@ def document_ballot_content(request, doc, ballot_id, editable=True):
|
|||
if not ballot_open:
|
||||
editable = False
|
||||
|
||||
return render_to_string("idrfc/document_ballot_content.html",
|
||||
return render_to_string("doc/document_ballot_content.html",
|
||||
dict(doc=doc,
|
||||
ballot=ballot,
|
||||
position_groups=position_groups,
|
||||
|
@ -581,7 +581,7 @@ def document_ballot(request, name, ballot_id=None):
|
|||
|
||||
c = document_ballot_content(request, doc, ballot_id, editable=True)
|
||||
|
||||
return render_to_response("idrfc/document_ballot.html",
|
||||
return render_to_response("doc/document_ballot.html",
|
||||
dict(doc=doc,
|
||||
top=top,
|
||||
ballot_content=c,
|
|
@ -395,7 +395,7 @@ class RfcWrapper:
|
|||
|
||||
@models.permalink
|
||||
def get_absolute_url(self):
|
||||
return ('ietf.idrfc.views_doc.document_main', ['rfc%s' % (str(self.rfc_number))])
|
||||
return ('ietf.doc.views_doc.document_main', ['rfc%s' % (str(self.rfc_number))])
|
||||
def displayname_with_link(self):
|
||||
return '<a href="%s">RFC %d</a>' % (self.get_absolute_url(), self.rfc_number)
|
||||
|
||||
|
|
|
@ -3,71 +3,12 @@
|
|||
200,heavy /doc/all/
|
||||
200,heavy /doc/active/
|
||||
|
||||
# draft that's now RFC
|
||||
200 /doc/draft-ietf-avt-rtp-atrac-family/
|
||||
200 /doc/draft-ietf-avt-rtp-atrac-family/doc.json
|
||||
200 /doc/draft-ietf-avt-rtp-atrac-family/ballot.json
|
||||
200 /doc/draft-ietf-avt-rtp-atrac-family/ballotpopup/
|
||||
|
||||
# replaced draft, never went to IESG
|
||||
200 /doc/draft-eronen-mobike-mopo/
|
||||
404 /doc/draft-eronen-mobike-mopo/ballot.json
|
||||
404 /doc/draft-eronen-mobike-mopo/ballotpopup/
|
||||
|
||||
# expired draft
|
||||
200 /doc/draft-eronen-eap-sim-aka-80211/
|
||||
|
||||
# Normal RFC
|
||||
200 /doc/rfc4739/
|
||||
200 /doc/rfc4739/doc.json
|
||||
200 /doc/rfc4739/ballot.json # has ballot from I-D
|
||||
200 /doc/rfc4739/ballotpopup/
|
||||
|
||||
# RFC that's evaluated in IESG
|
||||
200 /doc/rfc3852/
|
||||
200 /doc/rfc3852/doc.json
|
||||
200 /doc/rfc3852/ballot.json
|
||||
200 /doc/rfc3852/ballotpopup/
|
||||
|
||||
# old RFC
|
||||
200 /doc/rfc822/
|
||||
200 /doc/rfc822/doc.json
|
||||
|
||||
# ballot sets
|
||||
200 /doc/rfc3550/ballot.json
|
||||
200 /doc/rfc3550/ballotpopup/
|
||||
200 /doc/rfc3551/ballot.json
|
||||
200 /doc/rfc3551/ballotpopup/
|
||||
200 /doc/draft-irtf-dtnrg-ltp/ballot.json
|
||||
200 /doc/draft-irtf-dtnrg-ltp/ballotpopup/
|
||||
|
||||
# file formats
|
||||
200 /doc/rfc9/ # PDF only
|
||||
200 /doc/rfc2490/ # TXT+PDF+PS
|
||||
200 /doc/rfc500/ # not online
|
||||
|
||||
404 /doc/draft-no-such-draft/
|
||||
404 /doc/rfc4637/
|
||||
|
||||
200 /doc/rfc2444/doc.json # foreignkey problem with Django 1.x
|
||||
|
||||
# current AD -- needs to be updated at some point
|
||||
200 /doc/ad/robert.sparks/
|
||||
# former AD
|
||||
200 /doc/ad/sam.hartman/
|
||||
404 /doc/ad/no.body/
|
||||
|
||||
# ballot exists, but it's not issued
|
||||
404 /doc/draft-ietf-aaa-diameter-api/ballot.json
|
||||
404 /doc/draft-ietf-aaa-diameter-api/ballotpopup/
|
||||
# ballot does not exist
|
||||
404 /doc/draft-zeilenga-cldap/ballot.json
|
||||
404 /doc/draft-zeilenga-cldap/ballotpopup/
|
||||
# comment with created_by=999
|
||||
200 /doc/draft-ietf-l3vpn-2547bis-mcast-bgp/
|
||||
# comment with created_by=0 (and no idinternal entry)
|
||||
200 /doc/draft-ietf-proto-wgdocument-states/
|
||||
|
||||
200 /doc/search/
|
||||
200 /doc/search/?rfcs=on&name=snmp
|
||||
200 /doc/search/?rfcs=on&name=nfs&by=ad&ad=112773
|
||||
|
|
|
@ -31,8 +31,9 @@
|
|||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
from django.conf.urls.defaults import patterns, url, include
|
||||
from ietf.idrfc import views_doc, views_search, views_edit, views_ballot, views
|
||||
from ietf.idrfc import views_search, views_edit, views_ballot, views
|
||||
from ietf.doc.models import State
|
||||
from ietf.doc import views_doc
|
||||
|
||||
urlpatterns = patterns('',
|
||||
(r'^/?$', views_search.search_main),
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
{% if snapshot %}Snapshot of{% endif %}
|
||||
{% if doc.get_state_slug != "approved" %}Proposed{% endif %}
|
||||
Charter for "{{ group.name }}"
|
||||
(<a href="{% url wginfo.views.wg_charter acronym=group.acronym %}">{{ group.acronym }}</a>) {{ group.type.name }}
|
||||
(<a href="{% url ietf.wginfo.views.wg_charter acronym=group.acronym %}">{{ group.acronym }}</a>) {{ group.type.name }}
|
||||
</div>
|
||||
|
||||
<table id="metatable" width="100%">
|
|
@ -77,7 +77,7 @@ is occasionally incorrect.</span>
|
|||
{% else %}
|
||||
none
|
||||
{% if user|has_role:"Area Director,Secretariat" %}
|
||||
- <a href="{% url wginfo.edit.submit_initial_charter acronym=wg.acronym %}">Submit Charter</a>
|
||||
- <a href="{% url ietf.wginfo.edit.submit_initial_charter acronym=wg.acronym %}">Submit Charter</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
|
|
|
@ -391,18 +391,17 @@ def make_test_data():
|
|||
)
|
||||
|
||||
# an independent submission before review
|
||||
doc = Document.objects.create(name='draft-imaginary-independent-submission',type_id='draft')
|
||||
DocAlias.objects.create( name='draft-imaginary-independent-submission',document=doc)
|
||||
doc = Document.objects.create(name='draft-imaginary-independent-submission', type_id='draft')
|
||||
DocAlias.objects.create(name=doc.name, document=doc)
|
||||
|
||||
# an irtf submission mid review
|
||||
doc = Document.objects.create( name='draft-imaginary-irtf-submission',type_id='draft')
|
||||
docalias = DocAlias.objects.create(name='draft-imaginary-irtf-submission',document=doc)
|
||||
doc = Document.objects.create(name='draft-imaginary-irtf-submission', type_id='draft')
|
||||
docalias = DocAlias.objects.create(name=doc.name, document=doc)
|
||||
doc.stream = StreamName.objects.get(slug='irtf')
|
||||
doc.save()
|
||||
crdoc = Document.objects.create(name='conflict-review-imaginary-irtf-submission',type_id='conflrev',rev='00',notify="fsm@ietf.org")
|
||||
DocAlias.objects.create( name='conflict-review-imaginary-irtf-submission',document=crdoc)
|
||||
crdoc.set_state(State.objects.get(name='Needs Shepherd',type__slug='conflrev'))
|
||||
crdoc.save()
|
||||
crdoc = Document.objects.create(name='conflict-review-imaginary-irtf-submission', type_id='conflrev', rev='00', notify="fsm@ietf.org")
|
||||
DocAlias.objects.create(name=crdoc.name, document=crdoc)
|
||||
crdoc.set_state(State.objects.get(name='Needs Shepherd', type__slug='conflrev'))
|
||||
crdoc.relateddocument_set.create(target=docalias,relationship_id='conflrev')
|
||||
|
||||
return draft
|
||||
|
|
Loading…
Reference in a new issue