Source code for commentaries.tests.test_forms

__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


import re

from django.test import TestCase

from common.helpers import model_form_data
from scipost.factories import UserFactory, ContributorFactory

from ..factories import CommentaryFactory, UnvettedCommentaryFactory,\
                       UnvettedUnpublishedCommentaryFactory
from ..forms import RequestPublishedArticleForm, VetCommentaryForm, DOIToQueryForm,\
                   ArxivQueryForm, RequestArxivPreprintForm
from ..models import Commentary
from common.helpers.test import add_groups_and_permissions


[docs]class TestArxivQueryForm(TestCase):
[docs] def setUp(self): add_groups_and_permissions() ContributorFactory.create_batch(5)
[docs] def test_new_arxiv_identifier_is_valid(self): new_identifier_data = {'identifier': '1612.07611v1'} form = ArxivQueryForm(new_identifier_data) self.assertTrue(form.is_valid())
[docs] def test_old_arxiv_identifier_is_valid(self): old_identifier_data = {'identifier': 'cond-mat/0612480v1'} form = ArxivQueryForm(old_identifier_data) self.assertTrue(form.is_valid())
[docs] def test_invalid_arxiv_identifier(self): invalid_data = {'identifier': 'i am not valid'} form = ArxivQueryForm(invalid_data) self.assertFalse(form.is_valid())
[docs] def test_new_arxiv_identifier_without_version_number_is_invalid(self): data = {'identifier': '1612.07611'} form = ArxivQueryForm(data) self.assertFalse(form.is_valid())
[docs] def test_old_arxiv_identifier_without_version_number_is_invalid(self): data = {'identifier': 'cond-mat/0612480'} form = ArxivQueryForm(data) self.assertFalse(form.is_valid())
[docs] def test_arxiv_identifier_that_already_has_commentary_page_is_invalid(self): unvetted_commentary = UnvettedCommentaryFactory() invalid_data = {'identifier': unvetted_commentary.arxiv_identifier} form = ArxivQueryForm(invalid_data) self.assertFalse(form.is_valid()) error_message = form.errors['identifier'][0] self.assertRegexpMatches(error_message, re.compile('already exist'))
[docs] def test_valid_but_non_existent_identifier_is_invalid(self): invalid_data = {'identifier': '1613.07611v1'} form = ArxivQueryForm(invalid_data) self.assertFalse(form.is_valid())
[docs]class TestDOIToQueryForm(TestCase):
[docs] def setUp(self): add_groups_and_permissions() ContributorFactory.create_batch(5)
[docs] def test_invalid_doi_is_invalid(self): invalid_data = {'doi': 'blablab'} form = DOIToQueryForm(invalid_data) self.assertFalse(form.is_valid())
[docs] def test_doi_that_already_has_commentary_page_is_invalid(self): unvetted_commentary = UnvettedCommentaryFactory() invalid_data = {'doi': unvetted_commentary.pub_DOI} form = DOIToQueryForm(invalid_data) self.assertFalse(form.is_valid()) error_message = form.errors['doi'][0] self.assertRegexpMatches(error_message, re.compile('already exist'))
[docs] def test_physrev_doi_is_valid(self): physrev_doi = "10.1103/PhysRevLett.123.183602" form = DOIToQueryForm({'doi': physrev_doi}) self.assertTrue(form.is_valid())
[docs] def test_scipost_doi_is_valid(self): scipost_doi = "10.21468/SciPostPhys.2.2.010" form = DOIToQueryForm({'doi': scipost_doi}) self.assertTrue(form.is_valid())
[docs] def test_old_doi_is_valid(self): old_doi = "10.1088/0022-3719/7/6/005" form = DOIToQueryForm({'doi': old_doi}) self.assertTrue(form.is_valid())
[docs] def test_valid_but_nonexistent_doi_is_invalid(self): doi = "10.21468/NonExistentJournal.2.2.010" form = DOIToQueryForm({'doi': doi}) self.assertEqual(form.is_valid(), False)
[docs]class TestVetCommentaryForm(TestCase):
[docs] def setUp(self): add_groups_and_permissions() ContributorFactory.create_batch(5) self.commentary = UnvettedCommentaryFactory.create() self.user = UserFactory.create() self.form_data = { 'action_option': VetCommentaryForm.ACTION_ACCEPT, 'refusal_reason': VetCommentaryForm.REFUSAL_EMPTY, 'email_response_field': 'Lorem Ipsum' }
[docs] def test_valid_accepted_form(self): """Test valid form data and return Commentary""" form = VetCommentaryForm(self.form_data, commentary_id=self.commentary.id, user=self.user) self.assertTrue(form.is_valid()) self.assertFalse(Commentary.objects.vetted().exists()) self.assertTrue(Commentary.objects.awaiting_vetting().exists()) # Accept Commentary in database form.process_commentary() self.assertTrue(Commentary.objects.vetted().exists()) self.assertFalse(Commentary.objects.awaiting_vetting().exists())
[docs] def test_valid_modified_form(self): """Test valid form data and delete Commentary""" self.form_data['action_option'] = VetCommentaryForm.ACTION_MODIFY form = VetCommentaryForm(self.form_data, commentary_id=self.commentary.id, user=self.user) self.assertTrue(form.is_valid()) self.assertFalse(Commentary.objects.vetted().exists()) self.assertTrue(Commentary.objects.awaiting_vetting().count() == 1) # Modified Commentary in the database form.process_commentary() self.assertTrue(form.commentary_is_modified()) self.assertTrue(Commentary.objects.awaiting_vetting().exists())
[docs] def test_valid_rejected_form(self): """Test valid form data and delete Commentary""" self.form_data['action_option'] = VetCommentaryForm.ACTION_REFUSE self.form_data['refusal_reason'] = VetCommentaryForm.REFUSAL_UNTRACEBLE form = VetCommentaryForm(self.form_data, commentary_id=self.commentary.id, user=self.user) self.assertTrue(form.is_valid()) self.assertFalse(Commentary.objects.vetted().exists()) self.assertTrue(Commentary.objects.awaiting_vetting().exists()) # Delete the Commentary form.process_commentary() self.assertTrue(form.commentary_is_refused()) self.assertFalse(Commentary.objects.awaiting_vetting().exists()) # Refusal choice is ok refusal_reason_inserted = VetCommentaryForm.COMMENTARY_REFUSAL_DICT[ VetCommentaryForm.REFUSAL_UNTRACEBLE] self.assertEqual(form.get_refusal_reason(), refusal_reason_inserted)
[docs] def test_process_before_validation(self): """Test response of form on processing before validation""" form = VetCommentaryForm(self.form_data, commentary_id=self.commentary.id, user=self.user) self.assertRaises(AttributeError, form.process_commentary)
[docs]class TestRequestPublishedArticleForm(TestCase):
[docs] def setUp(self): add_groups_and_permissions() ContributorFactory.create_batch(5) factory_instance = UnvettedCommentaryFactory.build() self.user = UserFactory() self.valid_form_data = model_form_data(factory_instance, RequestPublishedArticleForm)
[docs] def test_valid_data_is_valid(self): """Test valid form for DOI""" form = RequestPublishedArticleForm(self.valid_form_data) self.assertTrue(form.is_valid())
[docs] def test_doi_that_already_has_commentary_page_is_invalid(self): unvetted_commentary = UnvettedCommentaryFactory() invalid_data = {**self.valid_form_data, **{'pub_DOI': unvetted_commentary.pub_DOI}} form = RequestPublishedArticleForm(invalid_data) self.assertEqual(form.is_valid(), False) error_message = form.errors['pub_DOI'][0] self.assertRegexpMatches(error_message, re.compile('already exist'))
[docs] def test_commentary_without_pub_DOI_is_invalid(self): invalid_data = {**self.valid_form_data, **{'pub_DOI': ''}} form = RequestPublishedArticleForm(invalid_data) self.assertEqual(form.is_valid(), False)
[docs]class TestRequestArxivPreprintForm(TestCase):
[docs] def setUp(self): add_groups_and_permissions() ContributorFactory.create_batch(5) factory_instance = UnvettedUnpublishedCommentaryFactory.build() self.user = UserFactory() self.valid_form_data = model_form_data(factory_instance, RequestPublishedArticleForm) self.valid_form_data['arxiv_identifier'] = factory_instance.arxiv_identifier
[docs] def test_valid_data_is_valid(self): form = RequestArxivPreprintForm(self.valid_form_data) self.assertTrue(form.is_valid())
[docs] def test_identifier_that_already_has_commentary_page_is_invalid(self): commentary = UnvettedUnpublishedCommentaryFactory() invalid_data = {**self.valid_form_data, **{'arxiv_identifier': commentary.arxiv_identifier}} form = RequestArxivPreprintForm(invalid_data) self.assertEqual(form.is_valid(), False) error_message = form.errors['arxiv_identifier'][0] self.assertRegexpMatches(error_message, re.compile('already exist'))
[docs] def test_commentary_without_arxiv_identifier_is_invalid(self): invalid_data = {**self.valid_form_data, **{'arxiv_identifier': ''}} form = RequestArxivPreprintForm(invalid_data) self.assertEqual(form.is_valid(), False)