Skip to content

Commit bb2d070

Browse files
committed
Redo tests for IPR to cover all views, fix some bugs and add some
finishing touches - Legacy-Id: 6779
1 parent 7852e09 commit bb2d070

18 files changed

Lines changed: 399 additions & 290 deletions

File tree

ietf/doc/tests_draft.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
import unittest
21
import StringIO
3-
import os, shutil
4-
from datetime import date, timedelta, time
2+
import os, shutil, datetime
53

64
from django.core.urlresolvers import reverse as urlreverse
75
from django.conf import settings
@@ -10,7 +8,7 @@
108
import debug
119

1210
from ietf.doc.models import *
13-
from ietf.doc .utils import *
11+
from ietf.doc.utils import *
1412
from ietf.name.models import *
1513
from ietf.group.models import *
1614
from ietf.person.models import *
@@ -452,11 +450,11 @@ def test_in_draft_expire_freeze(self):
452450
second_cut_off = Meeting.get_second_cut_off()
453451
ietf_monday = Meeting.get_ietf_monday()
454452

455-
self.assertTrue(not in_draft_expire_freeze(datetime.datetime.combine(second_cut_off - datetime.timedelta(days=7), time(0, 0, 0))))
456-
self.assertTrue(not in_draft_expire_freeze(datetime.datetime.combine(second_cut_off, time(0, 0, 0))))
457-
self.assertTrue(in_draft_expire_freeze(datetime.datetime.combine(second_cut_off + datetime.timedelta(days=7), time(0, 0, 0))))
458-
self.assertTrue(in_draft_expire_freeze(datetime.datetime.combine(ietf_monday - datetime.timedelta(days=1), time(0, 0, 0))))
459-
self.assertTrue(not in_draft_expire_freeze(datetime.datetime.combine(ietf_monday, time(0, 0, 0))))
453+
self.assertTrue(not in_draft_expire_freeze(datetime.datetime.combine(second_cut_off - datetime.timedelta(days=7), datetime.time(0, 0, 0))))
454+
self.assertTrue(not in_draft_expire_freeze(datetime.datetime.combine(second_cut_off, datetime.time(0, 0, 0))))
455+
self.assertTrue(in_draft_expire_freeze(datetime.datetime.combine(second_cut_off + datetime.timedelta(days=7), datetime.time(0, 0, 0))))
456+
self.assertTrue(in_draft_expire_freeze(datetime.datetime.combine(ietf_monday - datetime.timedelta(days=1), datetime.time(0, 0, 0))))
457+
self.assertTrue(not in_draft_expire_freeze(datetime.datetime.combine(ietf_monday, datetime.time(0, 0, 0))))
460458

461459
def test_warn_expirable_drafts(self):
462460
from ietf.doc.expire import get_soon_to_expire_drafts, send_expire_warning_for_draft

ietf/ipr/admin.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,8 @@ class IprDetailAdmin(admin.ModelAdmin):
1212
search_fields = ['title', 'legal_name']
1313

1414
def docs(self, ipr):
15-
res = []
16-
for iprdocalias in IprDocAlias.objects.filter(ipr=ipr).order_by("id").select_related("doc_alias"):
17-
if iprdocalias.doc_alias.name.startswith("rfc"):
18-
n = iprdocalias.doc_alias.name.upper()
19-
elif iprdocalias.rev:
20-
n = iprdocalias.doc_alias.name + iprdocalias.rev
21-
else:
22-
n = iprdocalias.doc_alias.name
23-
res.append(n)
24-
return u", ".join(res)
15+
return u", ".join(a.formatted_name() for a in IprDocAlias.objects.filter(ipr=ipr).order_by("id").select_related("doc_alias"))
16+
2517
admin.site.register(IprDetail, IprDetailAdmin)
2618

2719
class IprNotificationAdmin(admin.ModelAdmin):
@@ -32,4 +24,6 @@ class IprUpdateAdmin(admin.ModelAdmin):
3224
pass
3325
admin.site.register(IprUpdate, IprUpdateAdmin)
3426

35-
admin.site.register(IprDocAlias)
27+
class IprDocAliasAdmin(admin.ModelAdmin):
28+
raw_id_fields = ["ipr", "doc_alias"]
29+
admin.site.register(IprDocAlias, IprDocAliasAdmin)

ietf/ipr/models.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,11 @@ class IprDetail(models.Model):
9090

9191
def __unicode__(self):
9292
return self.title
93+
9394
@models.permalink
9495
def get_absolute_url(self):
9596
return ('ietf.ipr.views.show', [str(self.ipr_id)])
97+
9698
def get_submitter(self):
9799
try:
98100
return self.contact.get(contact_type=3)
@@ -101,6 +103,9 @@ def get_submitter(self):
101103
except IprContact.MultipleObjectsReturned:
102104
return self.contact.filter(contact_type=3)[0]
103105

106+
def docs(self):
107+
return self.iprdocalias_set.select_related("doc_alias", "doc_alias__document").order_by("id")
108+
104109
class IprContact(models.Model):
105110
TYPE_CHOICES = (
106111
(1, 'Patent Holder Contact'),
@@ -138,9 +143,19 @@ class IprUpdate(models.Model):
138143

139144

140145
class IprDocAlias(models.Model):
141-
ipr = models.ForeignKey(IprDetail, related_name='documents')
146+
ipr = models.ForeignKey(IprDetail)
142147
doc_alias = models.ForeignKey(DocAlias)
143148
rev = models.CharField(max_length=2, blank=True)
149+
150+
def formatted_name(self):
151+
name = self.doc_alias.name
152+
if name.startswith("rfc"):
153+
return name.upper()
154+
elif self.rev:
155+
return "%s-%s" % (name, self.rev)
156+
else:
157+
return name
158+
144159
def __unicode__(self):
145160
if self.rev:
146161
return u"%s which applies to %s-%s" % (self.ipr, self.doc_alias.name, self.rev)

ietf/ipr/new.py

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright The IETF Trust 2007, All Rights Reserved
22

3-
import re
3+
import re, datetime
44

55
from django.shortcuts import render_to_response as render, get_object_or_404
66
from django.template import RequestContext
@@ -10,6 +10,7 @@
1010

1111
from ietf.utils import log
1212
from ietf.utils.mail import send_mail
13+
from ietf.doc.models import Document, DocAlias
1314
from ietf.ipr.models import IprDetail, IprDocAlias, IprContact, LICENSE_CHOICES, IprUpdate
1415
from ietf.ipr.view_sections import section_table
1516

@@ -61,8 +62,6 @@ def new(request, type, update=None, submitter=None):
6162
one form containing fields from 4 tables -- don't build something like this again...
6263
6364
"""
64-
debug = ""
65-
6665
section_list = section_table[type].copy()
6766
section_list.update({"title":False, "new_intro":False, "form_intro":True,
6867
"form_submit":True, "form_legend": True, })
@@ -131,7 +130,7 @@ def clean_rfclist(self):
131130
for rfc in rfclist:
132131
try:
133132
DocAlias.objects.get(name="rfc%s" % int(rfc))
134-
except:
133+
except (DocAlias.DoesNotExist, DocAlias.MultipleObjectsReturned, ValueError):
135134
raise forms.ValidationError("Unknown RFC number: %s - please correct this." % rfc)
136135
rfclist = " ".join(rfclist)
137136
return rfclist
@@ -145,19 +144,19 @@ def clean_draftlist(self):
145144
if draft.endswith(".txt"):
146145
draft = draft[:-4]
147146
if re.search("-[0-9][0-9]$", draft):
148-
filename = draft[:-3]
147+
name = draft[:-3]
149148
rev = draft[-2:]
150149
else:
151-
filename = draft
150+
name = draft
152151
rev = None
153152
try:
154-
doc = Document.objects.get(docalias__name=filename)
155-
except Exception as e:
153+
doc = Document.objects.get(docalias__name=name)
154+
except (Document.DoesNotExist, Document.MultipleObjectsReturned) as e:
156155
log("Exception: %s" % e)
157-
raise forms.ValidationError("Unknown Internet-Draft: %s - please correct this." % filename)
156+
raise forms.ValidationError("Unknown Internet-Draft: %s - please correct this." % name)
158157
if rev and doc.rev != rev:
159-
raise forms.ValidationError("Unexpected revision '%s' for draft %s - the current revision is %s. Please check this." % (rev, filename, id.revision))
160-
drafts.append("%s-%s" % (filename, doc.rev))
158+
raise forms.ValidationError("Unexpected revision '%s' for draft %s - the current revision is %s. Please check this." % (rev, name, doc.rev))
159+
drafts.append("%s-%s" % (name, doc.rev))
161160
return " ".join(drafts)
162161
return ""
163162
def clean_licensing_option(self):
@@ -178,11 +177,8 @@ def is_valid(self):
178177
# POST of the "get updater" form, so we don't want to validate
179178
# this one. When we're posting *this* form, submitter is None,
180179
# even when updating.
181-
if (request.method == 'POST' or '_testpost' in request.REQUEST) and not submitter:
182-
if request.method == 'POST':
183-
data = request.POST.copy()
184-
else:
185-
data = request.GET.copy()
180+
if request.method == 'POST' and not submitter:
181+
data = request.POST.copy()
186182
data["submitted_date"] = datetime.datetime.now().strftime("%Y-%m-%d")
187183
data["third_party"] = section_list["third_party"]
188184
data["generic"] = section_list["generic"]
@@ -205,13 +201,13 @@ def is_valid(self):
205201
# Save IprDetail
206202
instance = form.save(commit=False)
207203

208-
legal_name_genitive = data['legal_name'] + "'" if data['legal_name'].endswith('s') else data['legal_name'] + "'s"
204+
legal_name_genitive = data['legal_name'] + "'" if data['legal_name'].endswith('s') else data['legal_name'] + "'s"
209205
if type == "generic":
210206
instance.title = legal_name_genitive + " General License Statement"
211-
if type == "specific":
207+
elif type == "specific":
212208
data["ipr_summary"] = get_ipr_summary(form.cleaned_data)
213209
instance.title = legal_name_genitive + """ Statement about IPR related to %(ipr_summary)s""" % data
214-
if type == "third-party":
210+
elif type == "third-party":
215211
data["ipr_summary"] = get_ipr_summary(form.cleaned_data)
216212
ietf_name_genitive = data['ietf_name'] + "'" if data['ietf_name'].endswith('s') else data['ietf_name'] + "'s"
217213
instance.title = ietf_name_genitive + """ Statement about IPR related to %(ipr_summary)s belonging to %(legal_name)s""" % data
@@ -294,7 +290,7 @@ def is_valid(self):
294290
form.unbound_form = True
295291

296292
# log(dir(form.ietf_contact_is_submitter))
297-
return render("ipr/details_edit.html", {"ipr": form, "section_list":section_list, "debug": debug}, context_instance=RequestContext(request))
293+
return render("ipr/details_edit.html", {"ipr": form, "section_list":section_list}, context_instance=RequestContext(request))
298294

299295
def update(request, ipr_id=None):
300296
"""Update a specific IPR disclosure"""
@@ -320,9 +316,7 @@ def __init__(self, *args, **kwargs):
320316

321317
if request.method == 'POST':
322318
form = UpdateForm(request.POST)
323-
elif '_testpost' in request.REQUEST:
324-
form = UpdateForm(request.GET)
325-
else:
319+
else:
326320
form = UpdateForm()
327321

328322
if not(form.is_valid()):

ietf/ipr/search.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ def search(request):
8585
# IPR list with documents
8686
elif search_type == "patent_search":
8787
iprs = IprDetail.objects.filter(legal_name__icontains=q, status__in=[1,3]).order_by("-submitted_date", "-ipr_id")
88-
count = iprs.count()
88+
count = len(iprs)
8989
iprs = [ ipr for ipr in iprs if not ipr.updated_by.all() ]
9090
return render("ipr/search_holder_result.html", {"q": q, "iprs": iprs, "count": count },
9191
context_instance=RequestContext(request) )
9292

93-
# Search by content of email or pagent_info field
93+
# Search by patents field or content of emails for patent numbers
9494
# IPR list with documents
9595
elif search_type == "patent_info_search":
9696
if len(q) < 3:

0 commit comments

Comments
 (0)