From 47ffc28f4ae8178c1e7cbb26bfa83c36ec3e9746 Mon Sep 17 00:00:00 2001 From: Geert Kapteijns <ghkapteijns@gmail.com> Date: Sat, 13 May 2017 20:30:39 +0200 Subject: [PATCH] ArxivQueryForm tests --- commentaries/forms.py | 6 ++- commentaries/test_forms.py | 29 ++++++++++- commentaries/views.py | 12 ++++- scipost/test_services.py | 98 ++++++++++++++++++++++---------------- 4 files changed, 100 insertions(+), 45 deletions(-) diff --git a/commentaries/forms.py b/commentaries/forms.py index f64ee17ff..d3d30be91 100644 --- a/commentaries/forms.py +++ b/commentaries/forms.py @@ -42,7 +42,11 @@ class DOIToQueryForm(forms.Form): class ArxivQueryForm(forms.Form): - identifier = forms.CharField() + IDENTIFIER_PATTERN_NEW = r'^[0-9]{4,}.[0-9]{4,5}v[0-9]{1,2}$' + IDENTIFIER_PATTERN_OLD = r'^[-.a-z]+/[0-9]{7,}v[0-9]{1,2}$' + VALID_ARXIV_IDENTIFIER_REGEX = "(?:{})|(?:{})".format(IDENTIFIER_PATTERN_NEW, IDENTIFIER_PATTERN_OLD) + + identifier = forms.RegexField(regex=VALID_ARXIV_IDENTIFIER_REGEX, strip=True) # identifierpattern_new = re.compile("^[0-9]{4,}.[0-9]{4,5}v[0-9]{1,2}$") # identifierpattern_old = re.compile("^[-.a-z]+/[0-9]{7,}v[0-9]{1,2}$") diff --git a/commentaries/test_forms.py b/commentaries/test_forms.py index 9e9d4a483..84d600a71 100644 --- a/commentaries/test_forms.py +++ b/commentaries/test_forms.py @@ -6,11 +6,38 @@ from common.helpers import model_form_data from scipost.factories import UserFactory from .factories import VettedCommentaryFactory, UnvettedCommentaryFactory -from .forms import RequestCommentaryForm, RequestPublishedArticleForm, VetCommentaryForm, DOIToQueryForm +from .forms import RequestCommentaryForm, RequestPublishedArticleForm, VetCommentaryForm, DOIToQueryForm, ArxivQueryForm from .models import Commentary from common.helpers.test import add_groups_and_permissions +class TestArxivQueryForm(TestCase): + def test_new_arxiv_identifier_is_valid(self): + new_identifier_data = {'identifier': '1612.07611v1'} + form = ArxivQueryForm(new_identifier_data) + self.assertTrue(form.is_valid()) + + 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()) + + def test_invalid_arxiv_identifier(self): + invalid_data = {'identifier': 'i am not valid'} + form = ArxivQueryForm(invalid_data) + self.assertFalse(form.is_valid()) + + def test_new_arxiv_identifier_without_version_number_is_invalid(self): + data = {'identifier': '1612.07611'} + form = ArxivQueryForm(data) + self.assertFalse(form.is_valid()) + + def test_old_arxiv_identifier_without_version_number_is_invalid(self): + data = {'identifier': 'cond-mat/0612480'} + form = ArxivQueryForm(data) + self.assertFalse(form.is_valid()) + + class TestDOIToQueryForm(TestCase): def setUp(self): add_groups_and_permissions() diff --git a/commentaries/views.py b/commentaries/views.py index 4255f6f90..1e47459c7 100644 --- a/commentaries/views.py +++ b/commentaries/views.py @@ -117,7 +117,17 @@ def prefill_using_DOI(request): @permission_required('scipost.can_request_commentary_pages', raise_exception=True) def prefill_using_arxiv_identifier(request): if request.method == "POST": - return 1 + arxiv_query_form = ArxivQueryForm(request.POST) + if arxiv_query_form.is_valid(): + raise NotImplementedError + else: + form = RequestArxivPreprintForm() + + context = { + 'form': form, + 'arxiv_query_form': arxiv_query_form, + } + return render(request, 'commentaries/request_arxiv_preprint.html', context) else: raise Http404 diff --git a/scipost/test_services.py b/scipost/test_services.py index 44986d73d..bb48a7066 100644 --- a/scipost/test_services.py +++ b/scipost/test_services.py @@ -6,50 +6,25 @@ from submissions.models import Submission class ArxivCallerTest(TestCase): - def setUp(self): - self.valid_arxiv_identifier = '1612.07611v1' - - def test_collects_metadata(self): - raise NotImplementedError - -class ArxivCallerTestOld(TestCase): - def test_correct_lookup(self): - caller = ArxivCaller(Submission, '1611.09574v1') - - caller.process() - - self.assertEqual(caller.is_valid(), True) - self.assertIn('entries', caller.metadata) - - def test_errorcode_for_non_existing_paper(self): - caller = ArxivCaller(Submission, '2611.09574v1') - - caller.process() - self.assertEqual(caller.is_valid(), False) - self.assertEqual(caller.errorcode, 'preprint_does_not_exist') - - def test_errorcode_for_bad_request(self): - caller = ArxivCaller(Submission, '161109574v1') - - caller.process() - self.assertEqual(caller.is_valid(), False) - self.assertEqual(caller.errorcode, 'arxiv_bad_request') - - def test_errorcode_for_already_published_journal_ref(self): - caller = ArxivCaller(Submission, '1412.0006v1') - - caller.process() - self.assertEqual(caller.is_valid(), False) - self.assertEqual(caller.errorcode, 'paper_published_journal_ref') - self.assertNotEqual(caller.arxiv_journal_ref, '') + def test_identifier_new_style(self): + caller = ArxivCaller('1612.07611v1') + self.assertTrue(caller.is_valid) + correct_data = { + 'pub_abstract': 'The Berezinskii-Kosterlitz-Thouless (BKT) transitions of the six-state clock\nmodel on the square lattice are investigated by means of the corner-transfer\nmatrix renormalization group method. The classical analogue of the entanglement\nentropy $S( L, T )$ is calculated for $L$ by $L$ square system up to $L = 129$,\nas a function of temperature $T$. The entropy has a peak at $T = T^{*}_{~}( L\n)$, where the temperature depends on both $L$ and boundary conditions. Applying\nthe finite-size scaling to $T^{*}_{~}( L )$ and assuming the presence of BKT\ntransitions, the transition temperature is estimated to be $T_1^{~} = 0.70$ and\n$T_2^{~} = 0.88$. The obtained results agree with previous analyses. It should\nbe noted that no thermodynamic function is used in this study.', 'author_list': ['Roman KrÄmár', 'Andrej Gendiar', 'Tomotoshi Nishino'], 'arxiv_link': 'http://arxiv.org/abs/1612.07611v1', 'pub_title': 'Phase transition of the six-state clock model observed from the\n entanglement entropy' + } + self.assertEqual(caller.data, correct_data) - def test_errorcode_no_version_nr(self): - # Should be already caught in form validation - caller = ArxivCaller(Submission, '1412.0006') + def test_identifier_old_style(self): + caller = ArxivCaller('cond-mat/0612480') + self.assertTrue(caller.is_valid) + correct_data = { + 'pub_title': 'Least Action Principle for the Real-Time Density Matrix Renormalization\n Group', 'arxiv_link': 'http://arxiv.org/abs/cond-mat/0612480v2', 'author_list': ['Kouji Ueda', 'Chenglong Jin', 'Naokazu Shibata', 'Yasuhiro Hieida', 'Tomotoshi Nishino'], 'pub_abstract': 'A kind of least action principle is introduced for the discrete time\nevolution of one-dimensional quantum lattice models. Based on this principle,\nwe obtain an optimal condition for the matrix product states on succeeding time\nslices generated by the real-time density matrix renormalization group method.\nThis optimization can also be applied to classical simulations of quantum\ncircuits. We discuss the time reversal symmetry in the fully optimized MPS.' + } + self.assertEqual(caller.data, correct_data) - caller.process() - self.assertEqual(caller.is_valid(), False) - self.assertEqual(caller.errorcode, 'bad_identifier') + def valid_but_nonexistent_identifier(self): + caller = ArxivCaller('1613.07611v1') + self.assertFalse(caller.is_valid) class DOICallerTest(TestCase): @@ -85,3 +60,42 @@ class DOICallerTest(TestCase): def test_valid_but_non_existent_doi(self): caller = DOICaller('10.21468/NonExistentJournal.2.2.012') self.assertEqual(caller.is_valid, False) + +# class ArxivCallerTestOld(TestCase): +# def test_correct_lookup(self): +# caller = ArxivCaller(Submission, '1611.09574v1') +# +# caller.process() +# +# self.assertEqual(caller.is_valid(), True) +# self.assertIn('entries', caller.metadata) +# +# def test_errorcode_for_non_existing_paper(self): +# caller = ArxivCaller(Submission, '2611.09574v1') +# +# caller.process() +# self.assertEqual(caller.is_valid(), False) +# self.assertEqual(caller.errorcode, 'preprint_does_not_exist') +# +# def test_errorcode_for_bad_request(self): +# caller = ArxivCaller(Submission, '161109574v1') +# +# caller.process() +# self.assertEqual(caller.is_valid(), False) +# self.assertEqual(caller.errorcode, 'arxiv_bad_request') +# +# def test_errorcode_for_already_published_journal_ref(self): +# caller = ArxivCaller(Submission, '1412.0006v1') +# +# caller.process() +# self.assertEqual(caller.is_valid(), False) +# self.assertEqual(caller.errorcode, 'paper_published_journal_ref') +# self.assertNotEqual(caller.arxiv_journal_ref, '') +# +# def test_errorcode_no_version_nr(self): +# # Should be already caught in form validation +# caller = ArxivCaller(Submission, '1412.0006') +# +# caller.process() +# self.assertEqual(caller.is_valid(), False) +# self.assertEqual(caller.errorcode, 'bad_identifier') -- GitLab