diff --git a/commentaries/forms.py b/commentaries/forms.py index f0dcdf3a30c8497a8d19650abc9fda2c291bda45..7cbccf60a3bbec21b476c6a1f7103a33f0aca5c8 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 30def7b93c534f337dc37faf3bc86e60e28e5dc0..5c5e3a40aad1a9206f52c8c8c54fbb374a3c0cf2 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'])