From 9547646f81f02ae0343e01a317d505101cc45b66 Mon Sep 17 00:00:00 2001
From: Henrik Levkowetz <henrik@levkowetz.com>
Date: Tue, 27 Mar 2018 17:55:11 +0000
Subject: [PATCH] Added a test for IPR edit.  - Legacy-Id: 14951

---
 ietf/ipr/tests.py | 56 +++++++++++++++++++++++++++++++++++++++++++----
 ietf/ipr/views.py |  5 +++--
 2 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/ietf/ipr/tests.py b/ietf/ipr/tests.py
index 0f8004cfc..7eedc3f7f 100644
--- a/ietf/ipr/tests.py
+++ b/ietf/ipr/tests.py
@@ -13,11 +13,12 @@ from ietf.ipr.mail import (process_response_email, get_reply_to, get_update_subm
 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
+from ietf.message.models import Message
+from ietf.utils.mail import outbox, empty_outbox
+from ietf.utils.test_data import make_test_data
+from ietf.utils.test_utils import TestCase, login_testing_unauthorized, unicontent
+from ietf.utils.text import text_to_dict
 
 
 class IprTests(TestCase):
@@ -380,6 +381,53 @@ class IprTests(TestCase):
         self.assertTrue('New IPR Submission' in outbox[0]['Subject'])
         self.assertTrue('ietf-ipr@' in outbox[0]['To'])
 
+    def test_edit(self):
+        draft = make_test_data()
+        original_ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
+
+        # get
+        url = urlreverse("ietf.ipr.views.edit", kwargs={ "id": original_ipr.id })
+        login_testing_unauthorized(self, "secretary", url)
+        r = self.client.get(url)
+        self.assertContains(r, "Native Martians United")
+
+        #url = urlreverse("ietf.ipr.views.new", kwargs={ "type": "specific" })
+        # successful post
+        empty_outbox()
+        post_data = {
+            "has_patent_pending": False,
+            "holder_contact_email": "test@holder.com",
+            "holder_contact_info": "555-555-0100",
+            "holder_contact_name": "Test Holder",
+            "holder_legal_name": "Test Legal",
+            "ietfer_contact_info": "555-555-0101",
+            "ietfer_name": "Test Participant",
+            "iprdocrel_set-0-document": "%s" % draft.docalias_set.first().pk,
+            "iprdocrel_set-0-revisions": '00',
+            "iprdocrel_set-INITIAL_FORMS": 0,
+            "iprdocrel_set-TOTAL_FORMS": 1,
+            "licensing": "royalty-free",
+            "patent_date": "2000-01-01",
+            "patent_inventor": "A. Nonymous",
+            "patent_number": "SE12345678901",
+            "patent_title": "A method of transfering bits",
+            "submitter_email": "test@holder.com",
+            "submitter_name": "Test Holder",
+            "updates": "",
+        }
+        r = self.client.post(url, post_data, follow=True)
+        self.assertContains(r, "Disclosure modified")
+
+        iprs = IprDisclosureBase.objects.filter(title__icontains=draft.name)
+        self.assertEqual(len(iprs), 1)
+        ipr = iprs[0].get_child()
+        self.assertEqual(ipr.holder_legal_name, "Test Legal")
+        patent_info_dict = dict( (k.replace('patent_','').capitalize(), v) for k, v in post_data.items() if k.startswith('patent_') )
+        self.assertEqual(text_to_dict(ipr.patent_info), patent_info_dict)
+        self.assertEqual(ipr.state.slug, 'posted')
+
+        self.assertEqual(len(outbox),0)
+
     def test_update(self):
         draft = make_test_data()
         original_ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py
index d2a5b4153..cc6cf35f2 100644
--- a/ietf/ipr/views.py
+++ b/ietf/ipr/views.py
@@ -308,14 +308,15 @@ def edit(request, id, updates=None):
             valid_formsets = draft_formset.is_valid()
         else:
             valid_formsets = True
-            
+
         if form.is_valid() and valid_formsets: 
             updates = form.cleaned_data.get('updates')
             disclosure = form.save(commit=False)
             disclosure.save()
-            
+
             if type != 'generic':
                 draft_formset = DraftFormset(request.POST, instance=disclosure)
+                draft_formset.clean()
                 draft_formset.save()
 
             set_disclosure_title(disclosure)