in order to autogenerate dotted path url pattern names. Updated a number of url reverses to use dotted path, and removed explicit url pattern names as needed. Changed some imports to prevent import of ietf.urls before django initialization was complete. Changed 3 cases of form classes being curried to functions; django 1.10 didn't accept that. Started converting old-style middleware classes to new-style middleware functions (incomplete). Tweaked a nomcom decorator to preserve function names and attributes, like a good decorator should. Replaced the removed django templatetag 'removetags' with our own version which uses bleach, and does sanitizing in addition to removing explicitly mentionied html tags. Rewrote the filename argument handling in a management command which had broken with the upgrade. - Legacy-Id: 12818
597 lines
25 KiB
Python
597 lines
25 KiB
Python
import datetime
|
|
import urllib
|
|
|
|
from pyquery import PyQuery
|
|
|
|
from django.core.urlresolvers import reverse as urlreverse
|
|
|
|
import debug # pyflakes:ignore
|
|
|
|
from ietf.doc.models import DocAlias
|
|
from ietf.ipr.mail import (process_response_email, get_reply_to, get_update_submitter_emails,
|
|
get_pseudo_submitter, get_holders, get_update_cc_addrs)
|
|
from ietf.ipr.models import (IprDisclosureBase,GenericIprDisclosure,HolderIprDisclosure,
|
|
ThirdPartyIprDisclosure,RelatedIpr)
|
|
from ietf.ipr.utils import get_genitive, get_ipr_summary
|
|
from ietf.message.models import Message
|
|
from ietf.utils.test_utils import TestCase, login_testing_unauthorized, unicontent
|
|
from ietf.utils.test_data import make_test_data
|
|
from ietf.utils.mail import outbox, empty_outbox
|
|
from ietf.mailtrigger.utils import gather_address_lists
|
|
|
|
|
|
class IprTests(TestCase):
|
|
def setUp(self):
|
|
pass
|
|
|
|
def tearDown(self):
|
|
pass
|
|
|
|
def test_get_genitive(self):
|
|
self.assertEqual(get_genitive("Cisco"),"Cisco's")
|
|
self.assertEqual(get_genitive("Ross"),"Ross'")
|
|
|
|
def test_get_holders(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
update = HolderIprDisclosure.objects.create(
|
|
by_id=1,
|
|
title="Statement regarding rights Update",
|
|
holder_legal_name="Native Martians United",
|
|
state_id='pending',
|
|
patent_info='US12345',
|
|
holder_contact_name='Update Holder',
|
|
holder_contact_email='update_holder@acme.com',
|
|
licensing_id='royalty-free',
|
|
submitter_name='George',
|
|
submitter_email='george@acme.com',
|
|
)
|
|
RelatedIpr.objects.create(target=ipr,source=update,relationship_id='updates')
|
|
result = get_holders(update)
|
|
self.assertEqual(result,['update_holder@acme.com','george@acme.com'])
|
|
|
|
def test_get_ipr_summary(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
self.assertEqual(get_ipr_summary(ipr),'draft-ietf-mars-test')
|
|
|
|
def test_get_pseudo_submitter(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights').get_child()
|
|
self.assertEqual(get_pseudo_submitter(ipr),(ipr.submitter_name,ipr.submitter_email))
|
|
ipr.submitter_name=''
|
|
ipr.submitter_email=''
|
|
self.assertEqual(get_pseudo_submitter(ipr),(ipr.holder_contact_name,ipr.holder_contact_email))
|
|
ipr.holder_contact_name=''
|
|
ipr.holder_contact_email=''
|
|
self.assertEqual(get_pseudo_submitter(ipr),('UNKNOWN NAME - NEED ASSISTANCE HERE','UNKNOWN EMAIL - NEED ASSISTANCE HERE'))
|
|
|
|
def test_get_update_cc_addrs(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
update = HolderIprDisclosure.objects.create(
|
|
by_id=1,
|
|
title="Statement regarding rights Update",
|
|
holder_legal_name="Native Martians United",
|
|
state_id='pending',
|
|
patent_info='US12345',
|
|
holder_contact_name='Update Holder',
|
|
holder_contact_email='update_holder@acme.com',
|
|
licensing_id='royalty-free',
|
|
submitter_name='George',
|
|
submitter_email='george@acme.com',
|
|
)
|
|
RelatedIpr.objects.create(target=ipr,source=update,relationship_id='updates')
|
|
result = get_update_cc_addrs(update)
|
|
self.assertEqual(result,'update_holder@acme.com,george@acme.com')
|
|
|
|
def test_get_update_submitter_emails(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights').get_child()
|
|
update = HolderIprDisclosure.objects.create(
|
|
by_id=1,
|
|
title="Statement regarding rights Update",
|
|
holder_legal_name="Native Martians United",
|
|
state_id='pending',
|
|
patent_info='US12345',
|
|
holder_contact_name='George',
|
|
holder_contact_email='george@acme.com',
|
|
licensing_id='royalty-free',
|
|
submitter_name='George',
|
|
submitter_email='george@acme.com',
|
|
)
|
|
RelatedIpr.objects.create(target=ipr,source=update,relationship_id='updates')
|
|
messages = get_update_submitter_emails(update)
|
|
self.assertEqual(len(messages),1)
|
|
self.assertTrue(messages[0].startswith('To: george@acme.com'))
|
|
|
|
def test_showlist(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.showlist"))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
def test_show_posted(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
def test_show_parked(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
ipr.set_state('parked')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
|
self.assertEqual(r.status_code, 404)
|
|
|
|
def test_show_pending(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
ipr.set_state('pending')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
|
self.assertEqual(r.status_code, 404)
|
|
|
|
def test_show_rejected(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
ipr.set_state('rejected')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
|
self.assertEqual(r.status_code, 404)
|
|
|
|
def test_show_removed(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
ipr.set_state('removed')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.show", kwargs=dict(id=ipr.pk)))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue('This IPR disclosure was removed' in unicontent(r))
|
|
|
|
def test_iprs_for_drafts(self):
|
|
draft = make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_txt"))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.name in unicontent(r))
|
|
self.assertTrue(str(ipr.pk) in unicontent(r))
|
|
|
|
def test_iprs_for_drafts_recursive(self):
|
|
draft = make_test_data()
|
|
replaced = draft.all_related_that_doc(['replaces'])
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_recursive_txt"))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.name in unicontent(r))
|
|
for alias in replaced:
|
|
self.assertTrue(alias.name in unicontent(r))
|
|
self.assertTrue(str(ipr.pk) in unicontent(r))
|
|
|
|
def test_about(self):
|
|
r = self.client.get(urlreverse("ietf.ipr.views.about"))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("File a disclosure" in unicontent(r))
|
|
|
|
def test_search(self):
|
|
draft = make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title="Statement regarding rights").get_child()
|
|
|
|
url = urlreverse("ietf.ipr.views.search")
|
|
|
|
r = self.client.get(url)
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertTrue(q("form input[name=draft]"))
|
|
|
|
# find by id
|
|
r = self.client.get(url + "?submit=draft&id=%s" % draft.name)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
# find draft
|
|
r = self.client.get(url + "?submit=draft&draft=%s" % draft.name)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
# search + select document
|
|
r = self.client.get(url + "?submit=draft&draft=draft")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(draft.name in unicontent(r))
|
|
self.assertTrue(ipr.title not in unicontent(r))
|
|
|
|
DocAlias.objects.create(name="rfc321", document=draft)
|
|
|
|
# find RFC
|
|
r = self.client.get(url + "?submit=rfc&rfc=321")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
# find by patent owner
|
|
r = self.client.get(url + "?submit=holder&holder=%s" % ipr.holder_legal_name)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
# find by patent info
|
|
r = self.client.get(url + "?submit=patent&patent=%s" % ipr.patent_info)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
r = self.client.get(url + "?submit=patent&patent=US12345")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
# find by group acronym
|
|
r = self.client.get(url + "?submit=group&group=%s" % draft.group.pk)
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
# find by doc title
|
|
r = self.client.get(url + "?submit=doctitle&doctitle=%s" % urllib.quote(draft.title))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
# find by ipr title
|
|
r = self.client.get(url + "?submit=iprtitle&iprtitle=%s" % urllib.quote(ipr.title))
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
def test_feed(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
r = self.client.get("/feed/ipr/")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue(ipr.title in unicontent(r))
|
|
|
|
def test_sitemap(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
r = self.client.get("/sitemap-ipr.xml")
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("/ipr/%s/" % ipr.pk in unicontent(r))
|
|
|
|
def test_new_generic(self):
|
|
"""Add a new generic disclosure. Note: submitter does not need to be logged in.
|
|
"""
|
|
make_test_data()
|
|
url = urlreverse("ietf.ipr.views.new", kwargs={ "type": "generic" })
|
|
|
|
# invalid post
|
|
r = self.client.post(url, {
|
|
"holder_legal_name": "Test Legal",
|
|
})
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertTrue(len(q("form .has-error")) > 0)
|
|
|
|
# successful post
|
|
empty_outbox()
|
|
r = self.client.post(url, {
|
|
"holder_legal_name": "Test Legal",
|
|
"holder_contact_name": "Test Holder",
|
|
"holder_contact_email": "test@holder.com",
|
|
"holder_contact_info": "555-555-0100",
|
|
"submitter_name": "Test Holder",
|
|
"submitter_email": "test@holder.com",
|
|
"notes": "some notes"
|
|
})
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("Your IPR disclosure has been submitted" in unicontent(r))
|
|
self.assertEqual(len(outbox),1)
|
|
self.assertTrue('New IPR Submission' in outbox[0]['Subject'])
|
|
self.assertTrue('ietf-ipr@' in outbox[0]['To'])
|
|
|
|
iprs = IprDisclosureBase.objects.filter(title__icontains="General License Statement")
|
|
self.assertEqual(len(iprs), 1)
|
|
ipr = iprs[0]
|
|
self.assertEqual(ipr.holder_legal_name, "Test Legal")
|
|
self.assertEqual(ipr.state.slug, 'pending')
|
|
self.assertTrue(isinstance(ipr.get_child(),GenericIprDisclosure))
|
|
|
|
def test_new_specific(self):
|
|
"""Add a new specific disclosure. Note: submitter does not need to be logged in.
|
|
"""
|
|
draft = make_test_data()
|
|
url = urlreverse("ietf.ipr.views.new", kwargs={ "type": "specific" })
|
|
|
|
# successful post
|
|
empty_outbox()
|
|
r = self.client.post(url, {
|
|
"holder_legal_name": "Test Legal",
|
|
"holder_contact_name": "Test Holder",
|
|
"holder_contact_email": "test@holder.com",
|
|
"holder_contact_info": "555-555-0100",
|
|
"ietfer_name": "Test Participant",
|
|
"ietfer_contact_info": "555-555-0101",
|
|
"iprdocrel_set-TOTAL_FORMS": 2,
|
|
"iprdocrel_set-INITIAL_FORMS": 0,
|
|
"iprdocrel_set-0-document": "%s" % draft.docalias_set.first().pk,
|
|
"iprdocrel_set-0-revisions": '00',
|
|
"iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().pk,
|
|
"patent_info": "none",
|
|
"has_patent_pending": False,
|
|
"licensing": "royalty-free",
|
|
"submitter_name": "Test Holder",
|
|
"submitter_email": "test@holder.com",
|
|
})
|
|
self.assertEqual(r.status_code, 200)
|
|
# print r.content
|
|
self.assertTrue("Your IPR disclosure has been submitted" in unicontent(r))
|
|
|
|
iprs = IprDisclosureBase.objects.filter(title__icontains=draft.name)
|
|
self.assertEqual(len(iprs), 1)
|
|
ipr = iprs[0]
|
|
self.assertEqual(ipr.holder_legal_name, "Test Legal")
|
|
self.assertEqual(ipr.state.slug, 'pending')
|
|
self.assertTrue(isinstance(ipr.get_child(),HolderIprDisclosure))
|
|
self.assertEqual(len(outbox),1)
|
|
self.assertTrue('New IPR Submission' in outbox[0]['Subject'])
|
|
self.assertTrue('ietf-ipr@' in outbox[0]['To'])
|
|
|
|
def test_new_thirdparty(self):
|
|
"""Add a new third-party disclosure. Note: submitter does not need to be logged in.
|
|
"""
|
|
draft = make_test_data()
|
|
url = urlreverse("ietf.ipr.views.new", kwargs={ "type": "third-party" })
|
|
|
|
# successful post
|
|
empty_outbox()
|
|
r = self.client.post(url, {
|
|
"holder_legal_name": "Test Legal",
|
|
"ietfer_name": "Test Participant",
|
|
"ietfer_contact_email": "test@ietfer.com",
|
|
"ietfer_contact_info": "555-555-0101",
|
|
"iprdocrel_set-TOTAL_FORMS": 2,
|
|
"iprdocrel_set-INITIAL_FORMS": 0,
|
|
"iprdocrel_set-0-document": "%s" % draft.docalias_set.first().pk,
|
|
"iprdocrel_set-0-revisions": '00',
|
|
"iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().pk,
|
|
"patent_info": "none",
|
|
"has_patent_pending": False,
|
|
"licensing": "royalty-free",
|
|
"submitter_name": "Test Holder",
|
|
"submitter_email": "test@holder.com",
|
|
})
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("Your IPR disclosure has been submitted" in unicontent(r))
|
|
|
|
iprs = IprDisclosureBase.objects.filter(title__icontains="belonging to Test Legal")
|
|
self.assertEqual(len(iprs), 1)
|
|
ipr = iprs[0]
|
|
self.assertEqual(ipr.holder_legal_name, "Test Legal")
|
|
self.assertEqual(ipr.state.slug, "pending")
|
|
self.assertTrue(isinstance(ipr.get_child(),ThirdPartyIprDisclosure))
|
|
self.assertEqual(len(outbox),1)
|
|
self.assertTrue('New IPR Submission' in outbox[0]['Subject'])
|
|
self.assertTrue('ietf-ipr@' in outbox[0]['To'])
|
|
|
|
def test_update(self):
|
|
draft = make_test_data()
|
|
original_ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
url = urlreverse("ietf.ipr.views.new", kwargs={ "type": "specific" })
|
|
|
|
# successful post
|
|
empty_outbox()
|
|
r = self.client.post(url, {
|
|
"updates": str(original_ipr.pk),
|
|
"holder_legal_name": "Test Legal",
|
|
"holder_contact_name": "Test Holder",
|
|
"holder_contact_email": "test@holder.com",
|
|
"holder_contact_info": "555-555-0100",
|
|
"ietfer_name": "Test Participant",
|
|
"ietfer_contact_info": "555-555-0101",
|
|
"iprdocrel_set-TOTAL_FORMS": 2,
|
|
"iprdocrel_set-INITIAL_FORMS": 0,
|
|
"iprdocrel_set-0-document": "%s" % draft.docalias_set.first().pk,
|
|
"iprdocrel_set-0-revisions": '00',
|
|
"iprdocrel_set-1-document": DocAlias.objects.filter(name__startswith="rfc").first().pk,
|
|
"patent_info": "none",
|
|
"has_patent_pending": False,
|
|
"licensing": "royalty-free",
|
|
"submitter_name": "Test Holder",
|
|
"submitter_email": "test@holder.com",
|
|
})
|
|
self.assertEqual(r.status_code, 200)
|
|
self.assertTrue("Your IPR disclosure has been submitted" in unicontent(r))
|
|
|
|
iprs = IprDisclosureBase.objects.filter(title__icontains=draft.name)
|
|
self.assertEqual(len(iprs), 1)
|
|
ipr = iprs[0]
|
|
self.assertEqual(ipr.holder_legal_name, "Test Legal")
|
|
self.assertEqual(ipr.state.slug, 'pending')
|
|
|
|
self.assertTrue(ipr.relatedipr_source_set.filter(target=original_ipr))
|
|
self.assertEqual(len(outbox),1)
|
|
self.assertTrue('New IPR Submission' in outbox[0]['Subject'])
|
|
self.assertTrue('ietf-ipr@' in outbox[0]['To'])
|
|
|
|
def test_update_bad_post(self):
|
|
draft = make_test_data()
|
|
url = urlreverse("ietf.ipr.views.new", kwargs={ "type": "specific" })
|
|
|
|
# successful post
|
|
empty_outbox()
|
|
r = self.client.post(url, {
|
|
"updates": "this is supposed to be an integer",
|
|
"holder_legal_name": "Test Legal",
|
|
"holder_contact_name": "Test Holder",
|
|
"holder_contact_email": "test@holder.com",
|
|
"iprdocrel_set-TOTAL_FORMS": 1,
|
|
"iprdocrel_set-INITIAL_FORMS": 0,
|
|
"iprdocrel_set-0-document": "%s" % draft.docalias_set.first().pk,
|
|
"iprdocrel_set-0-revisions": '00',
|
|
"patent_info": "none",
|
|
"has_patent_pending": False,
|
|
"licensing": "royalty-free",
|
|
"submitter_name": "Test Holder",
|
|
"submitter_email": "test@holder.com",
|
|
})
|
|
self.assertEqual(r.status_code, 200)
|
|
q = PyQuery(r.content)
|
|
self.assertTrue(q("#id_updates").parents(".form-group").hasClass("has-error"))
|
|
|
|
def test_addcomment(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
url = urlreverse("ipr_add_comment", kwargs={ "id": ipr.id })
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.get(url)
|
|
self.assertEqual(r.status_code,200)
|
|
|
|
# public comment
|
|
comment = 'Test comment'
|
|
r = self.client.post(url, dict(comment=comment))
|
|
self.assertEqual(r.status_code,302)
|
|
qs = ipr.iprevent_set.filter(type='comment',desc=comment)
|
|
self.assertTrue(qs.count(),1)
|
|
|
|
# private comment
|
|
r = self.client.post(url, dict(comment='Private comment',private=True),follow=True)
|
|
self.assertEqual(r.status_code,200)
|
|
self.assertTrue('Private comment' in unicontent(r))
|
|
self.client.logout()
|
|
r = self.client.get(url)
|
|
self.assertFalse('Private comment' in unicontent(r))
|
|
|
|
def test_addemail(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
url = urlreverse("ipr_add_email", kwargs={ "id": ipr.id })
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.get(url)
|
|
self.assertEqual(r.status_code,200)
|
|
|
|
# post
|
|
r = self.client.post(url, {
|
|
"direction": 'incoming',
|
|
"message": """From: test@acme.com
|
|
To: ietf-ipr@ietf.org
|
|
Subject: RE: The Cisco Statement
|
|
Date: Wed, 24 Sep 2014 14:25:02 -0700
|
|
|
|
Hello,
|
|
|
|
I would like to revoke this declaration.
|
|
"""})
|
|
msg = Message.objects.get(frm='test@acme.com')
|
|
qs = ipr.iprevent_set.filter(type='msgin',message=msg)
|
|
self.assertTrue(qs.count(),1)
|
|
|
|
def test_admin_pending(self):
|
|
make_test_data()
|
|
url = urlreverse("ipr_admin",kwargs={'state':'pending'})
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
|
|
# test for presence of pending ipr
|
|
ipr = IprDisclosureBase.objects.first()
|
|
ipr.state_id = 'pending'
|
|
ipr.save()
|
|
num = IprDisclosureBase.objects.filter(state='pending').count()
|
|
|
|
r = self.client.get(url)
|
|
self.assertEqual(r.status_code,200)
|
|
q = PyQuery(r.content)
|
|
x = len(q('table.ipr-table tbody tr'))
|
|
self.assertEqual(num,x)
|
|
|
|
def test_admin_removed(self):
|
|
make_test_data()
|
|
url = urlreverse("ipr_admin",kwargs={'state':'removed'})
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
|
|
# test for presence of pending ipr
|
|
ipr = IprDisclosureBase.objects.first()
|
|
ipr.state_id = 'removed'
|
|
ipr.save()
|
|
num = IprDisclosureBase.objects.filter(state__in=('removed','rejected')).count()
|
|
|
|
r = self.client.get(url)
|
|
self.assertEqual(r.status_code,200)
|
|
q = PyQuery(r.content)
|
|
x = len(q('table.ipr-table tbody tr'))
|
|
self.assertEqual(num,x)
|
|
|
|
def test_admin_parked(self):
|
|
pass
|
|
|
|
def test_post(self):
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
url = urlreverse("ipr_post", kwargs={ "id": ipr.id })
|
|
login_testing_unauthorized(self, "secretary", url)
|
|
|
|
r = self.client.get(url,follow=True)
|
|
self.assertEqual(r.status_code,200)
|
|
len_before = len(outbox)
|
|
# successful post
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
r = self.client.get(url,follow=True)
|
|
self.assertEqual(r.status_code,200)
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
self.assertEqual(ipr.state.slug,'posted')
|
|
url = urlreverse('ipr_notify',kwargs={ 'id':ipr.id, 'type':'posted'})
|
|
r = self.client.get(url,follow=True)
|
|
q = PyQuery(r.content)
|
|
data = dict()
|
|
for name in ['form-TOTAL_FORMS','form-INITIAL_FORMS','form-MIN_NUM_FORMS','form-MAX_NUM_FORMS']:
|
|
data[name] = q('form input[name=%s]'%name).val()
|
|
for i in range(0,int(data['form-TOTAL_FORMS'])):
|
|
name = 'form-%d-type' % i
|
|
data[name] = q('form input[name=%s]'%name).val()
|
|
text_name = 'form-%d-text' % i
|
|
data[text_name] = q('form textarea[name=%s]'%text_name).html().strip()
|
|
# Do not try to use
|
|
#data[text_name] = q('form textarea[name=%s]'%text_name).text()
|
|
# .text does not work - the field will likely contain <> characters
|
|
r = self.client.post(url, data )
|
|
self.assertEqual(r.status_code,302)
|
|
self.assertEqual(len(outbox),len_before+2)
|
|
self.assertTrue('george@acme.com' in outbox[len_before]['To'])
|
|
self.assertTrue('draft-ietf-mars-test@ietf.org' in outbox[len_before+1]['To'])
|
|
self.assertTrue('mars-wg@ietf.org' in outbox[len_before+1]['Cc'])
|
|
|
|
def test_process_response_email(self):
|
|
# first send a mail
|
|
make_test_data()
|
|
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
|
|
url = urlreverse("ipr_email",kwargs={ "id": ipr.id })
|
|
self.client.login(username="secretary", password="secretary+password")
|
|
yesterday = datetime.date.today() - datetime.timedelta(1)
|
|
data = dict(
|
|
to='joe@test.com',
|
|
frm='ietf-ipr@ietf.org',
|
|
subject='test',
|
|
reply_to=get_reply_to(),
|
|
body='Testing.',
|
|
response_due=yesterday.isoformat())
|
|
empty_outbox()
|
|
r = self.client.post(url,data,follow=True)
|
|
#print r.content
|
|
self.assertEqual(r.status_code,200)
|
|
q = Message.objects.filter(reply_to=data['reply_to'])
|
|
self.assertEqual(q.count(),1)
|
|
event = q[0].msgevents.first()
|
|
self.assertTrue(event.response_past_due())
|
|
self.assertEqual(len(outbox), 1)
|
|
self.assertTrue('joe@test.com' in outbox[0]['To'])
|
|
|
|
# test process response uninteresting message
|
|
addrs = gather_address_lists('ipr_disclosure_submitted').as_strings()
|
|
message_string = """To: {}
|
|
Cc: {}
|
|
From: joe@test.com
|
|
Date: {}
|
|
Subject: test
|
|
""".format(addrs.to, addrs.cc, datetime.datetime.now().ctime())
|
|
result = process_response_email(message_string)
|
|
self.assertIsNone(result)
|
|
|
|
# test process response
|
|
message_string = """To: {}
|
|
From: joe@test.com
|
|
Date: {}
|
|
Subject: test
|
|
""".format(data['reply_to'],datetime.datetime.now().ctime())
|
|
result = process_response_email(message_string)
|
|
self.assertIsInstance(result,Message)
|
|
self.assertFalse(event.response_past_due())
|