From 754e6d806f840d7af1c473d58ff072444dd61cad Mon Sep 17 00:00:00 2001
From: Jorran Wit <jorrandewit@outlook.com>
Date: Wed, 21 Dec 2016 23:34:03 +0100
Subject: [PATCH] Fix test on false-positive test result

Method test_form_with_duplicate_*'s second part
 gave a false-positive result as the form_data
 contained neither a DOI nor a Arxiv ID. The
 tests came back positive but actually they were
 not.
---
 commentaries/forms.py      |  2 ++
 commentaries/test_forms.py | 27 +++++++++++++++++++++------
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/commentaries/forms.py b/commentaries/forms.py
index f0dcdf3a3..7cbccf60a 100644
--- a/commentaries/forms.py
+++ b/commentaries/forms.py
@@ -69,6 +69,8 @@ class RequestCommentaryForm(forms.ModelForm):
             self.existing_commentary = get_object_or_404(
                 Commentary,
                 arxiv_identifier=cleaned_data['arxiv_identifier'])
+            if not self.existing_commentary:
+                raise
             self.add_error('arxiv_identifier', msg)
         elif (cleaned_data['pub_DOI'] and
               Commentary.objects.filter(pub_DOI=cleaned_data['pub_DOI']).exists()):
diff --git a/commentaries/test_forms.py b/commentaries/test_forms.py
index 30def7b93..5c5e3a40a 100644
--- a/commentaries/test_forms.py
+++ b/commentaries/test_forms.py
@@ -15,6 +15,11 @@ class TestRequestCommentaryForm(TestCase):
         self.user = UserFactory()
         self.valid_form_data = model_form_data(factory_instance, RequestCommentaryForm)
 
+    def empty_and_return_form_data(self, key):
+        """Empty specific valid_form_data field and return"""
+        self.valid_form_data[key] = None
+        return self.valid_form_data
+
     def test_valid_data_is_valid_for_arxiv(self):
         """Test valid form for Arxiv identifier"""
         form_data = self.valid_form_data
@@ -39,21 +44,31 @@ class TestRequestCommentaryForm(TestCase):
         self.assertTrue('arxiv_identifier' in form.errors)
         self.assertTrue('pub_DOI' in form.errors)
 
-    def test_form_with_duplicate_identifiers(self):
-        """Test form response with already existing identifiers"""
+    def test_form_with_duplicate_DOI(self):
+        """Test form response with already existing DOI"""
         # Create a factory instance containing Arxiv ID and DOI
         VettedCommentaryFactory.create()
 
         # Test duplicate DOI entry
-        form_data = self.valid_form_data
-        form_data['arxiv_identifier'] = ''
+        form_data = self.empty_and_return_form_data('arxiv_identifier')
         form = RequestCommentaryForm(form_data, user=self.user)
         self.assertTrue('pub_DOI' in form.errors)
         self.assertFalse(form.is_valid())
 
+        # Check is existing commentary is valid
+        existing_commentary = form.get_existing_commentary()
+        self.assertEqual(existing_commentary.pub_DOI, form_data['pub_DOI'])
+
+    def test_form_with_duplicate_arxiv_id(self):
+        """Test form response with already existing Arxiv ID"""
+        VettedCommentaryFactory.create()
+
         # Test duplicate Arxiv entry
-        form_data = self.valid_form_data
-        form_data['pub_DOI'] = ''
+        form_data = self.empty_and_return_form_data('pub_DOI')
         form = RequestCommentaryForm(form_data, user=self.user)
         self.assertTrue('arxiv_identifier' in form.errors)
         self.assertFalse(form.is_valid())
+
+        # Check is existing commentary is valid
+        existing_commentary = form.get_existing_commentary()
+        self.assertEqual(existing_commentary.arxiv_identifier, form_data['arxiv_identifier'])
-- 
GitLab