From 4a0a5dc570e42955633526e428bb472aa7870605 Mon Sep 17 00:00:00 2001
From: Luciano <41302084+Rossi-Luciano@users.noreply.github.com>
Date: Mon, 8 Jan 2024 09:24:33 -0300
Subject: [PATCH] =?UTF-8?q?Fix:=20adaptar=20a=20classe=20de=20valida=C3=A7?=
=?UTF-8?q?=C3=A3o=20de=20ISSN's=20ao=20padr=C3=A3o=20adotado=20(#523)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Refatora classe de validação para ISSN's
* Adapta os testes às modificações
* Adiciona classe de exceção
* Corrige 'docstring'
* Altera a instanciação de 'self.journal_issns'
* Torna 'issns_dict' obrigatório
* Atualiza 'docstring'
* Altera procedimento de validação
* Adapta testes às alterações na validação
---------
Co-authored-by: Roberta Takenaka <505143+robertatakenaka@users.noreply.github.com>
---
packtools/sps/validation/exceptions.py | 4 +
packtools/sps/validation/journal_meta.py | 116 +++++++++++++-----
tests/sps/validation/test_journal_meta.py | 137 ++++++++++++++--------
3 files changed, 179 insertions(+), 78 deletions(-)
diff --git a/packtools/sps/validation/exceptions.py b/packtools/sps/validation/exceptions.py
index 9f9035bc5..d46feb69e 100644
--- a/packtools/sps/validation/exceptions.py
+++ b/packtools/sps/validation/exceptions.py
@@ -43,6 +43,10 @@ class ValidationRelatedArticleException(Exception):
...
+class ValidationIssnsException(Exception):
+ ...
+
+
class ValidationLicenseException(Exception):
...
diff --git a/packtools/sps/validation/journal_meta.py b/packtools/sps/validation/journal_meta.py
index 666630a39..8758ea80f 100644
--- a/packtools/sps/validation/journal_meta.py
+++ b/packtools/sps/validation/journal_meta.py
@@ -1,29 +1,81 @@
from ..models.journal_meta import ISSN, Acronym, Title, Publisher
+from packtools.sps.validation.exceptions import ValidationIssnsException
class ISSNValidation:
- def __init__(self, xmltree):
+ def __init__(self, xmltree, issns_dict=None):
self.xmltree = xmltree
self.journal_issns = ISSN(xmltree)
-
- def validate_epub(self, expected_value):
- resp_epub = dict(
- object='issn epub',
- output_expected=expected_value,
- output_obteined=self.journal_issns.epub,
- match=(expected_value == self.journal_issns.epub)
-
- )
- return resp_epub
-
- def validate_ppub(self, expected_value):
- resp_ppub = dict(
- object='issn ppub',
- output_expected=expected_value,
- output_obteined=self.journal_issns.ppub,
- match=(expected_value == self.journal_issns.ppub)
- )
- return resp_ppub
+ self.issns_dict = issns_dict
+
+ def validate_issn(self, issns_dict):
+ """
+ Checks whether the ISSN value is as expected.
+
+ XML input
+ ---------
+
+
+
+ 0034-8910
+ 1518-8787
+
+
+
+
+ Params
+ ------
+ issns_dict : dict, such as:
+ {
+ 'ppub': '0034-8910',
+ 'epub': '1518-8787'
+ }
+
+ Returns
+ -------
+ list of dictionaries, such as:
+ [
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="ppub"]',
+ 'validation_type': 'value',
+ 'response': 'OK',
+ 'expected_value': '0034-8910',
+ 'got_value': '0034-8910',
+ 'message': 'Got 0034-8910 expected 0034-8910',
+ 'advice': None
+ },
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="epub"]',
+ 'validation_type': 'value',
+ 'response': 'OK',
+ 'expected_value': '1518-8787',
+ 'got_value': '1518-8787',
+ 'message': 'Got 1518-8787 expected 1518-8787',
+ 'advice': None
+ }
+ ]
+ """
+ issns_dict = issns_dict or self.issns_dict
+ if not issns_dict or type(issns_dict) is not dict:
+ raise ValidationIssnsException("The function requires a list of ISSNs in dictionary format")
+
+ for tp, issn_expected in issns_dict.items():
+ issn_obtained = self.journal_issns.epub if tp == "epub" else self.journal_issns.ppub
+ is_valid = issn_expected == issn_obtained
+ yield {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="{}"]'.format(tp),
+ 'validation_type': 'value',
+ 'response': 'OK' if is_valid else 'ERROR',
+ 'expected_value': '{}'.format(tp, issn_expected),
+ 'got_value': '{}'.format(tp, issn_obtained),
+ 'message': 'Got {} expected {}'.format(
+ tp, issn_obtained, tp, issn_expected
+ ),
+ 'advice': None if is_valid else 'Provide an ISSN value as expected: {}'.format(tp, issn_expected),
+ }
class AcronymValidation:
@@ -88,8 +140,10 @@ def validate(self, expected_values):
'''
expected_values is a dict like:
{
- 'issn_epub': '0103-5053',
- 'issn_ppub': '1678-4790',
+ 'issns': {
+ 'ppub': '0103-5053',
+ 'epub': '1678-4790'
+ },
'acronym': 'hcsm',
'journal-title': 'História, Ciências, Saúde-Manguinhos',
'abbrev-journal-title': 'Hist. cienc. saude-Manguinhos',
@@ -102,12 +156,14 @@ def validate(self, expected_values):
title = TitleValidation(self.xmltree)
publisher = PublisherValidation(self.xmltree)
- resp_journal_meta = [
- issn.validate_epub(expected_values['issn_epub']),
- issn.validate_ppub(expected_values['issn_ppub']),
- acronym.validate_text(expected_values['acronym']),
- title.validate_journal_title(expected_values['journal-title']),
- title.validate_abbreviated_journal_title(expected_values['abbrev-journal-title']),
- publisher.validate_publishers_names(expected_values['publisher-name'])
- ]
+ resp_journal_meta = list(issn.validate_issn(expected_values['issns']))
+
+ resp_journal_meta.extend(
+ [
+ acronym.validate_text(expected_values['acronym']),
+ title.validate_journal_title(expected_values['journal-title']),
+ title.validate_abbreviated_journal_title(expected_values['abbrev-journal-title']),
+ publisher.validate_publishers_names(expected_values['publisher-name'])
+ ]
+ )
return resp_journal_meta
diff --git a/tests/sps/validation/test_journal_meta.py b/tests/sps/validation/test_journal_meta.py
index 4581f1bd8..44f42189d 100644
--- a/tests/sps/validation/test_journal_meta.py
+++ b/tests/sps/validation/test_journal_meta.py
@@ -21,45 +21,75 @@ def setUp(self):
)
self.issns = ISSNValidation(self.xmltree)
- def test_issn_epub_match(self):
- expected = dict(
- object='issn epub',
- output_expected='1678-4790',
- output_obteined='1678-4790',
- match=True
+ def test_validate_issn_ok(self):
+ self.maxDiff = None
+ obtained = self.issns.validate_issn(
+ {
+ 'ppub': '0103-5053',
+ 'epub': '1678-4790'
+ }
)
- obtained = self.issns.validate_epub('1678-4790')
- self.assertDictEqual(expected, obtained)
- def test_issn_epub_no_match(self):
- expected = dict(
- object='issn epub',
- output_expected='1678-4791',
- output_obteined='1678-4790',
- match=False
- )
- obtained = self.issns.validate_epub('1678-4791')
- self.assertDictEqual(expected, obtained)
+ expected = [
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="ppub"]',
+ 'validation_type': 'value',
+ 'response': 'OK',
+ 'expected_value': '0103-5053',
+ 'got_value': '0103-5053',
+ 'message': 'Got 0103-5053 expected 0103-5053',
+ 'advice': None
+ },
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="epub"]',
+ 'validation_type': 'value',
+ 'response': 'OK',
+ 'expected_value': '1678-4790',
+ 'got_value': '1678-4790',
+ 'message': 'Got 1678-4790 expected 1678-4790',
+ 'advice': None
+ }
+ ]
+ for i, item in enumerate(obtained):
+ with self.subTest(i):
+ self.assertDictEqual(expected[i], item)
- def test_issn_ppub_match(self):
- expected = dict(
- object='issn ppub',
- output_expected='0103-5053',
- output_obteined='0103-5053',
- match=True
+ def test_validate_issn_not_ok(self):
+ self.maxDiff = None
+ obtained = self.issns.validate_issn(
+ {
+ 'ppub': '0103-5054',
+ 'epub': '1678-4791'
+ }
)
- obtained = self.issns.validate_ppub('0103-5053')
- self.assertDictEqual(expected, obtained)
- def test_issn_ppub_no_match(self):
- expected = dict(
- object='issn ppub',
- output_expected='0103-5051',
- output_obteined='0103-5053',
- match=False
- )
- obtained = self.issns.validate_ppub('0103-5051')
- self.assertDictEqual(expected, obtained)
+ expected = [
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="ppub"]',
+ 'validation_type': 'value',
+ 'response': 'ERROR',
+ 'expected_value': '0103-5054',
+ 'got_value': '0103-5053',
+ 'message': 'Got 0103-5053 expected 0103-5054',
+ 'advice': 'Provide an ISSN value as expected: 0103-5054'
+ },
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="epub"]',
+ 'validation_type': 'value',
+ 'response': 'ERROR',
+ 'expected_value': '1678-4791',
+ 'got_value': '1678-4790',
+ 'message': 'Got 1678-4790 expected 1678-4791',
+ 'advice': 'Provide an ISSN value as expected: 1678-4791'
+ }
+ ]
+ for i, item in enumerate(obtained):
+ with self.subTest(i):
+ self.assertDictEqual(expected[i], item)
class AcronymTest(TestCase):
@@ -285,19 +315,28 @@ def setUp(self):
self.journal_meta = JournalMetaValidation(self.xmltree)
def test_journal_meta_match(self):
+ self.maxDiff = None
expected = [
- dict(
- object='issn epub',
- output_expected='1678-4790',
- output_obteined='1678-4790',
- match=True
- ),
- dict(
- object='issn ppub',
- output_expected='0103-5053',
- output_obteined='0103-5053',
- match=True
- ),
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="ppub"]',
+ 'validation_type': 'value',
+ 'response': 'OK',
+ 'expected_value': '0103-5053',
+ 'got_value': '0103-5053',
+ 'message': 'Got 0103-5053 expected 0103-5053',
+ 'advice': None
+ },
+ {
+ 'title': 'Journal ISSN element validation',
+ 'xpath': './/journal-meta//issn[@pub-type="epub"]',
+ 'validation_type': 'value',
+ 'response': 'OK',
+ 'expected_value': '1678-4790',
+ 'got_value': '1678-4790',
+ 'message': 'Got 1678-4790 expected 1678-4790',
+ 'advice': None
+ },
dict(
object='journal acronym',
output_expected='hcsm',
@@ -324,8 +363,10 @@ def test_journal_meta_match(self):
)
]
obtained = self.journal_meta.validate({
- 'issn_epub': '1678-4790',
- 'issn_ppub': '0103-5053',
+ 'issns': {
+ 'ppub': '0103-5053',
+ 'epub': '1678-4790'
+ },
'acronym': 'hcsm',
'journal-title': 'História, Ciências, Saúde-Manguinhos',
'abbrev-journal-title': 'Hist. cienc. saude-Manguinhos',