From ce8f73fd9cf06cf7f42f2c858d6e0b89380767a6 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Thu, 29 Mar 2018 15:29:55 +0000 Subject: [PATCH] Factories for the ipr app. Coverage of ietf.ipr.views.ajax_search, and a factory-driven test of ietf.ipr.views.edit. Commit ready for merge. - Legacy-Id: 14970 --- ietf/ipr/factories.py | 73 +++++++++++++++++++++++++++++++++++++++++++ ietf/ipr/tests.py | 33 +++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 ietf/ipr/factories.py diff --git a/ietf/ipr/factories.py b/ietf/ipr/factories.py new file mode 100644 index 000000000..ef6dbc89f --- /dev/null +++ b/ietf/ipr/factories.py @@ -0,0 +1,73 @@ +import datetime +import factory + + +from ietf.ipr.models import ( + IprDisclosureBase, HolderIprDisclosure, ThirdPartyIprDisclosure, NonDocSpecificIprDisclosure, + GenericIprDisclosure, IprDocRel +) + +def _fake_patent_info(): + return "Date: %s\nNotes: %s\nTitle: %s\nNumber: %s\nInventor: %s\n" % ( + (datetime.datetime.today()-datetime.timedelta(days=365)).strftime("%Y-%m-%d"), + factory.Faker('sentence').generate({}), + factory.Faker('sentence').generate({}), + 'US9999999', + factory.Faker('name').generate({}), + ) + +class IprDisclosureBaseFactory(factory.DjangoModelFactory): + class Meta: + model = IprDisclosureBase + + by = factory.SubFactory('ietf.person.factories.PersonFactory') + compliant = True + holder_legal_name = factory.Faker('name') + state_id='posted' + submitter_name = factory.Faker('name') + submitter_email = factory.Faker('email') + title = factory.Faker('sentence') + + @factory.post_generation + def docs(self, create, extracted, **kwargs): + if not create: + return + if extracted: + for doc in extracted: + IprDocRel.objects.create(disclosure=self,document=doc.docalias_set.first()) + + +class HolderIprDisclosureFactory(IprDisclosureBaseFactory): + class Meta: + model = HolderIprDisclosure + + holder_contact_email = factory.Faker('email') + holder_contact_name = factory.Faker('name') + licensing_id = 'reasonable' + patent_info = _fake_patent_info() + + +class ThirdPartyIprDisclosureFactory(IprDisclosureBaseFactory): + class Meta: + model = ThirdPartyIprDisclosure + + ietfer_name = factory.Faker('name') + ietfer_contact_email = factory.Faker('email') + patent_info = _fake_patent_info() + + +class NonDocSpecificIprDisclosureFactory(IprDisclosureBaseFactory): + class Meta: + model = NonDocSpecificIprDisclosure + + holder_contact_email = factory.Faker('email') + holder_contact_name = factory.Faker('name') + patent_info = _fake_patent_info() + +class GenericIprDisclosureFactory(IprDisclosureBaseFactory): + class Meta: + model = GenericIprDisclosure + + holder_contact_email = factory.Faker('email') + holder_contact_name = factory.Faker('name') + diff --git a/ietf/ipr/tests.py b/ietf/ipr/tests.py index 7eedc3f7f..443219d4a 100644 --- a/ietf/ipr/tests.py +++ b/ietf/ipr/tests.py @@ -8,6 +8,8 @@ from django.urls import reverse as urlreverse import debug # pyflakes:ignore from ietf.doc.models import DocAlias +from ietf.doc.factories import DocumentFactory +from ietf.ipr.factories import HolderIprDisclosureFactory 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, @@ -668,3 +670,34 @@ Subject: test result = process_response_email(message_string) self.assertIsInstance(result,Message) self.assertFalse(event.response_past_due()) + + def test_ajax_search(self): + url = urlreverse('ietf.ipr.views.ajax_search') + response=self.client.get(url+'?q=disclosure') + self.assertEqual(response.status_code,200) + self.assertEqual(response.get('Content-Type'),'application/json') + + def test_edit_using_factory(self): + disclosure = HolderIprDisclosureFactory(docs=[DocumentFactory(type_id='draft')]) + patent_dict = text_to_dict(disclosure.patent_info) + url = urlreverse('ietf.ipr.views.edit',kwargs={'id':disclosure.pk}) + login_testing_unauthorized(self, "secretary", url) + response = self.client.get(url) + self.assertEqual(response.status_code,200) + post_data = { + 'iprdocrel_set-TOTAL_FORMS' : 1, + 'iprdocrel_set-INITIAL_FORMS' : 1, + 'iprdocrel_set-0-id': disclosure.pk, + "iprdocrel_set-0-document": disclosure.docs.first().pk, + "iprdocrel_set-0-revisions": disclosure.docs.first().document.rev, + 'holder_legal_name': disclosure.holder_legal_name, + 'patent_number': patent_dict['Number'], + 'patent_title': patent_dict['Title'], + 'patent_date' : patent_dict['Date'], + 'patent_inventor' : patent_dict['Inventor'], + 'licensing' : disclosure.licensing.slug, + } + response = self.client.post(url,post_data) + self.assertEqual(response.status_code,302) + disclosure = HolderIprDisclosure.objects.get(pk=disclosure.pk) + self.assertEqual(disclosure.compliant,False)