page in views_search to share code with the text index file, get rid of some special-case idindex filters from ietf_filters, move "/drafts/" redirects to a file in /doc/ - Legacy-Id: 5634
246 lines
9.6 KiB
Python
246 lines
9.6 KiB
Python
import os, shutil, datetime
|
|
|
|
import django.test
|
|
from django.core.urlresolvers import reverse as urlreverse
|
|
|
|
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 SearchTestCase(django.test.TestCase):
|
|
fixtures = ['names']
|
|
|
|
def test_search(self):
|
|
draft = make_test_data()
|
|
|
|
base_url = urlreverse("doc_search")
|
|
|
|
# only show form, no search yet
|
|
r = self.client.get(base_url)
|
|
self.assertEqual(r.status_code, 200)
|
|
|
|
# no match
|
|
r = self.client.get(base_url + "?activedrafts=on&name=thisisnotadocumentname")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("no documents match" in r.content.lower())
|
|
|
|
r = self.client.get(base_url + "?rfcs=on&name=")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("no documents match" in r.content.lower())
|
|
|
|
r = self.client.get(base_url + "?olddrafts=on&name=")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("no documents match" in r.content.lower())
|
|
|
|
# find by rfc/active/inactive
|
|
draft.set_state(State.objects.get(type="draft", slug="rfc"))
|
|
r = self.client.get(base_url + "?rfcs=on&name=%s" % draft.name)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
draft.set_state(State.objects.get(type="draft", slug="active"))
|
|
r = self.client.get(base_url + "?activedrafts=on&name=%s" % draft.name)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
draft.set_state(State.objects.get(type="draft", slug="expired"))
|
|
r = self.client.get(base_url + "?olddrafts=on&name=%s" % draft.name)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
draft.set_state(State.objects.get(type="draft", slug="active"))
|
|
|
|
# find by title
|
|
r = self.client.get(base_url + "?activedrafts=on&name=%s" % draft.title.split()[0])
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
# find by author
|
|
r = self.client.get(base_url + "?activedrafts=on&by=author&author=%s" % draft.authors.all()[0].person.name_parts()[1])
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
# find by group
|
|
r = self.client.get(base_url + "?activedrafts=on&by=group&group=%s" % draft.group.acronym)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
# find by area
|
|
r = self.client.get(base_url + "?activedrafts=on&by=area&area=%s" % draft.group.parent_id)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
# find by area
|
|
r = self.client.get(base_url + "?activedrafts=on&by=area&area=%s" % draft.group.parent_id)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
# find by AD
|
|
r = self.client.get(base_url + "?activedrafts=on&by=ad&ad=%s" % draft.ad_id)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
# find by IESG state
|
|
r = self.client.get(base_url + "?activedrafts=on&by=state&state=%s&substate=" % draft.get_state("draft-iesg").pk)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
def test_drafts_pages(self):
|
|
draft = make_test_data()
|
|
|
|
r = self.client.get(urlreverse("drafts_for_ad", kwargs=dict(name=draft.ad.full_name_as_key())))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
draft.set_state(State.objects.get(type="draft-iesg", slug="lc"))
|
|
r = self.client.get(urlreverse("drafts_in_last_call"))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
def test_indexes(self):
|
|
draft = make_test_data()
|
|
|
|
r = self.client.get(urlreverse("index_all_drafts"))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.name in r.content)
|
|
|
|
r = self.client.get(urlreverse("index_active_drafts"))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.title in r.content)
|
|
|
|
|
|
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_popup", kwargs=dict(name=doc.name, ballot_id=ballot.pk)))
|
|
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)
|