import os import shutil import urllib from pyquery import PyQuery from django.conf import settings from django.core.urlresolvers import reverse as urlreverse from ietf.doc.models import DocAlias from ietf.ipr.models import IprDetail from ietf.utils.test_utils import TestCase from ietf.utils.test_data import make_test_data class IprTests(TestCase): def setUp(self): # for patent number search self.ipr_dir = os.path.abspath("tmp-ipr-dir") if not os.path.exists(self.ipr_dir): os.mkdir(self.ipr_dir) settings.IPR_DOCUMENT_PATH = self.ipr_dir def tearDown(self): shutil.rmtree(self.ipr_dir) def test_overview(self): make_test_data() ipr = IprDetail.objects.get(title="Statement regarding rights") r = self.client.get(urlreverse("ipr_showlist")) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) def test_ipr_details(self): make_test_data() ipr = IprDetail.objects.get(title="Statement regarding rights") r = self.client.get(urlreverse("ipr_show", kwargs=dict(ipr_id=ipr.pk))) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) def test_iprs_for_drafts(self): draft = make_test_data() ipr = IprDetail.objects.get(title="Statement regarding rights") r = self.client.get(urlreverse("ietf.ipr.views.iprs_for_drafts_txt")) self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in r.content) self.assertTrue(str(ipr.pk) in r.content) 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 r.content) def test_search(self): draft = make_test_data() ipr = IprDetail.objects.get(title="Statement regarding rights") url = urlreverse("ipr_search") r = self.client.get(url) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(q("form input[name=document_search]")) # find by id r = self.client.get(url + "?option=document_search&id=%s" % draft.name) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # find draft r = self.client.get(url + "?option=document_search&document_search=%s" % draft.name) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # search + select document r = self.client.get(url + "?option=document_search&document_search=draft") self.assertEqual(r.status_code, 200) self.assertTrue(draft.name in r.content) self.assertTrue(ipr.title not in r.content) DocAlias.objects.create(name="rfc321", document=draft) # find RFC r = self.client.get(url + "?option=rfc_search&rfc_search=321") self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # find by patent owner r = self.client.get(url + "?option=patent_search&patent_search=%s" % ipr.legal_name) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # find by patent info r = self.client.get(url + "?option=patent_info_search&patent_info_search=%s" % ipr.patents) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # find by patent info in file filename = "ipr1.txt" with open(os.path.join(self.ipr_dir, filename), "w") as f: f.write("Hello world\nPTO9876") ipr.legacy_url_0 = "/hello/world/%s" % filename ipr.save() r = self.client.get(url + "?option=patent_info_search&patent_info_search=PTO9876") self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # must search for at least 3 characters with digit r = self.client.get(url + "?option=patent_info_search&patent_info_search=a") self.assertTrue("ipr search result error" in r.content.lower()) r = self.client.get(url + "?option=patent_info_search&patent_info_search=aaa") self.assertTrue("ipr search result error" in r.content.lower()) # find by group acronym r = self.client.get(url + "?option=wg_search&wg_search=%s" % draft.group.acronym) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # find by doc title r = self.client.get(url + "?option=title_search&title_search=%s" % urllib.quote(draft.title)) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) # find by ipr title r = self.client.get(url + "?option=ipr_title_search&ipr_title_search=%s" % urllib.quote(ipr.title)) self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) def test_feed(self): make_test_data() ipr = IprDetail.objects.get(title="Statement regarding rights") r = self.client.get("/feed/ipr/") self.assertEqual(r.status_code, 200) self.assertTrue(ipr.title in r.content) def test_sitemap(self): make_test_data() ipr = IprDetail.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 r.content) def test_new_generic(self): make_test_data() url = urlreverse("ietf.ipr.new.new", kwargs={ "type": "generic" }) # faulty post r = self.client.post(url, { "legal_name": "Test Legal", }) self.assertEqual(r.status_code, 200) q = PyQuery(r.content) self.assertTrue(len(q("ul.errorlist")) > 0) # successful post r = self.client.post(url, { "legal_name": "Test Legal", "hold_name": "Test Holder", "hold_telephone": "555-555-0100", "hold_email": "test.holder@example.com", "ietf_name": "Test Participant", "ietf_telephone": "555-555-0101", "ietf_email": "test.participant@example.com", "patents": "none", "date_applied": "never", "country": "nowhere", "licensing_option": "5", "subm_name": "Test Submitter", "subm_telephone": "555-555-0102", "subm_email": "test.submitter@example.com" }) self.assertEqual(r.status_code, 200) self.assertTrue("Your IPR disclosure has been submitted" in r.content) iprs = IprDetail.objects.filter(title__icontains="General License Statement") self.assertEqual(len(iprs), 1) ipr = iprs[0] self.assertEqual(ipr.legal_name, "Test Legal") self.assertEqual(ipr.status, 0) def test_new_specific(self): draft = make_test_data() url = urlreverse("ietf.ipr.new.new", kwargs={ "type": "specific" }) # successful post r = self.client.post(url, { "legal_name": "Test Legal", "hold_name": "Test Holder", "hold_telephone": "555-555-0100", "hold_email": "test.holder@example.com", "ietf_name": "Test Participant", "ietf_telephone": "555-555-0101", "ietf_email": "test.participant@example.com", "rfclist": DocAlias.objects.filter(name__startswith="rfc")[0].name[3:], "draftlist": "%s-%s" % (draft.name, draft.rev), "patents": "none", "date_applied": "never", "country": "nowhere", "licensing_option": "5", "subm_name": "Test Submitter", "subm_telephone": "555-555-0102", "subm_email": "test.submitter@example.com" }) self.assertEqual(r.status_code, 200) self.assertTrue("Your IPR disclosure has been submitted" in r.content) iprs = IprDetail.objects.filter(title__icontains=draft.name) self.assertEqual(len(iprs), 1) ipr = iprs[0] self.assertEqual(ipr.legal_name, "Test Legal") self.assertEqual(ipr.status, 0) def test_new_thirdparty(self): draft = make_test_data() url = urlreverse("ietf.ipr.new.new", kwargs={ "type": "third-party" }) # successful post r = self.client.post(url, { "legal_name": "Test Legal", "hold_name": "Test Holder", "hold_telephone": "555-555-0100", "hold_email": "test.holder@example.com", "ietf_name": "Test Participant", "ietf_telephone": "555-555-0101", "ietf_email": "test.participant@example.com", "rfclist": "", "draftlist": "%s-%s" % (draft.name, draft.rev), "patents": "none", "date_applied": "never", "country": "nowhere", "licensing_option": "5", "subm_name": "Test Submitter", "subm_telephone": "555-555-0102", "subm_email": "test.submitter@example.com" }) self.assertEqual(r.status_code, 200) self.assertTrue("Your IPR disclosure has been submitted" in r.content) iprs = IprDetail.objects.filter(title__icontains="belonging to Test Legal") self.assertEqual(len(iprs), 1) ipr = iprs[0] self.assertEqual(ipr.legal_name, "Test Legal") self.assertEqual(ipr.status, 0) def test_update(self): draft = make_test_data() original_ipr = IprDetail.objects.get(title="Statement regarding rights") url = urlreverse("ietf.ipr.new.update", kwargs={ "ipr_id": original_ipr.pk }) # successful post r = self.client.post(url, { "legal_name": "Test Legal", "hold_name": "Test Holder", "hold_telephone": "555-555-0100", "hold_email": "test.holder@example.com", "ietf_name": "Test Participant", "ietf_telephone": "555-555-0101", "ietf_email": "test.participant@example.com", "rfclist": "", "draftlist": "%s-%s" % (draft.name, draft.rev), "patents": "none", "date_applied": "never", "country": "nowhere", "licensing_option": "5", "subm_name": "Test Submitter", "subm_telephone": "555-555-0102", "subm_email": "test.submitter@example.com" }) self.assertEqual(r.status_code, 200) self.assertTrue("Your IPR disclosure has been submitted" in r.content) iprs = IprDetail.objects.filter(title__icontains=draft.name) self.assertEqual(len(iprs), 1) ipr = iprs[0] self.assertEqual(ipr.legal_name, "Test Legal") self.assertEqual(ipr.status, 0) self.assertTrue(ipr.updates.filter(updated=original_ipr))