Skip to content

Commit ce8f73f

Browse files
committed
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
1 parent 8187339 commit ce8f73f

2 files changed

Lines changed: 106 additions & 0 deletions

File tree

ietf/ipr/factories.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import datetime
2+
import factory
3+
4+
5+
from ietf.ipr.models import (
6+
IprDisclosureBase, HolderIprDisclosure, ThirdPartyIprDisclosure, NonDocSpecificIprDisclosure,
7+
GenericIprDisclosure, IprDocRel
8+
)
9+
10+
def _fake_patent_info():
11+
return "Date: %s\nNotes: %s\nTitle: %s\nNumber: %s\nInventor: %s\n" % (
12+
(datetime.datetime.today()-datetime.timedelta(days=365)).strftime("%Y-%m-%d"),
13+
factory.Faker('sentence').generate({}),
14+
factory.Faker('sentence').generate({}),
15+
'US9999999',
16+
factory.Faker('name').generate({}),
17+
)
18+
19+
class IprDisclosureBaseFactory(factory.DjangoModelFactory):
20+
class Meta:
21+
model = IprDisclosureBase
22+
23+
by = factory.SubFactory('ietf.person.factories.PersonFactory')
24+
compliant = True
25+
holder_legal_name = factory.Faker('name')
26+
state_id='posted'
27+
submitter_name = factory.Faker('name')
28+
submitter_email = factory.Faker('email')
29+
title = factory.Faker('sentence')
30+
31+
@factory.post_generation
32+
def docs(self, create, extracted, **kwargs):
33+
if not create:
34+
return
35+
if extracted:
36+
for doc in extracted:
37+
IprDocRel.objects.create(disclosure=self,document=doc.docalias_set.first())
38+
39+
40+
class HolderIprDisclosureFactory(IprDisclosureBaseFactory):
41+
class Meta:
42+
model = HolderIprDisclosure
43+
44+
holder_contact_email = factory.Faker('email')
45+
holder_contact_name = factory.Faker('name')
46+
licensing_id = 'reasonable'
47+
patent_info = _fake_patent_info()
48+
49+
50+
class ThirdPartyIprDisclosureFactory(IprDisclosureBaseFactory):
51+
class Meta:
52+
model = ThirdPartyIprDisclosure
53+
54+
ietfer_name = factory.Faker('name')
55+
ietfer_contact_email = factory.Faker('email')
56+
patent_info = _fake_patent_info()
57+
58+
59+
class NonDocSpecificIprDisclosureFactory(IprDisclosureBaseFactory):
60+
class Meta:
61+
model = NonDocSpecificIprDisclosure
62+
63+
holder_contact_email = factory.Faker('email')
64+
holder_contact_name = factory.Faker('name')
65+
patent_info = _fake_patent_info()
66+
67+
class GenericIprDisclosureFactory(IprDisclosureBaseFactory):
68+
class Meta:
69+
model = GenericIprDisclosure
70+
71+
holder_contact_email = factory.Faker('email')
72+
holder_contact_name = factory.Faker('name')
73+

ietf/ipr/tests.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import debug # pyflakes:ignore
99

1010
from ietf.doc.models import DocAlias
11+
from ietf.doc.factories import DocumentFactory
12+
from ietf.ipr.factories import HolderIprDisclosureFactory
1113
from ietf.ipr.mail import (process_response_email, get_reply_to, get_update_submitter_emails,
1214
get_pseudo_submitter, get_holders, get_update_cc_addrs)
1315
from ietf.ipr.models import (IprDisclosureBase,GenericIprDisclosure,HolderIprDisclosure,
@@ -668,3 +670,34 @@ def test_process_response_email(self):
668670
result = process_response_email(message_string)
669671
self.assertIsInstance(result,Message)
670672
self.assertFalse(event.response_past_due())
673+
674+
def test_ajax_search(self):
675+
url = urlreverse('ietf.ipr.views.ajax_search')
676+
response=self.client.get(url+'?q=disclosure')
677+
self.assertEqual(response.status_code,200)
678+
self.assertEqual(response.get('Content-Type'),'application/json')
679+
680+
def test_edit_using_factory(self):
681+
disclosure = HolderIprDisclosureFactory(docs=[DocumentFactory(type_id='draft')])
682+
patent_dict = text_to_dict(disclosure.patent_info)
683+
url = urlreverse('ietf.ipr.views.edit',kwargs={'id':disclosure.pk})
684+
login_testing_unauthorized(self, "secretary", url)
685+
response = self.client.get(url)
686+
self.assertEqual(response.status_code,200)
687+
post_data = {
688+
'iprdocrel_set-TOTAL_FORMS' : 1,
689+
'iprdocrel_set-INITIAL_FORMS' : 1,
690+
'iprdocrel_set-0-id': disclosure.pk,
691+
"iprdocrel_set-0-document": disclosure.docs.first().pk,
692+
"iprdocrel_set-0-revisions": disclosure.docs.first().document.rev,
693+
'holder_legal_name': disclosure.holder_legal_name,
694+
'patent_number': patent_dict['Number'],
695+
'patent_title': patent_dict['Title'],
696+
'patent_date' : patent_dict['Date'],
697+
'patent_inventor' : patent_dict['Inventor'],
698+
'licensing' : disclosure.licensing.slug,
699+
}
700+
response = self.client.post(url,post_data)
701+
self.assertEqual(response.status_code,302)
702+
disclosure = HolderIprDisclosure.objects.get(pk=disclosure.pk)
703+
self.assertEqual(disclosure.compliant,False)

0 commit comments

Comments
 (0)