From 8446b6fcdf3c29fff903c81f7654e040e5c5b43c Mon Sep 17 00:00:00 2001 From: Luciano <41302084+Rossi-Luciano@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:00:08 -0300 Subject: [PATCH] Fix: funding source validation (#669) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Altera para a utilização do método correto * Adiciona teste --- packtools/sps/validation/funding_group.py | 4 +- tests/sps/validation/test_funding_group.py | 58 ++++++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/packtools/sps/validation/funding_group.py b/packtools/sps/validation/funding_group.py index 0c532d90c..06ec267ad 100644 --- a/packtools/sps/validation/funding_group.py +++ b/packtools/sps/validation/funding_group.py @@ -56,7 +56,7 @@ def funding_sources_exist_validation(self, error_level="ERROR"): advice = 'Provide value for funding source' else: is_valid = True - data = self.funding_group_object.data(self.special_chars_funding, self.special_chars_award_id) + data = self.funding_group_object.extract_funding_data(self.special_chars_funding, self.special_chars_award_id) yield format_response( title=title, parent="article", @@ -76,7 +76,7 @@ def funding_sources_exist_validation(self, error_level="ERROR"): def award_id_format_validation(self, callable_validation=None, error_level="ERROR"): callable_validation = callable_validation or _callable_extern_validate_default - data = self.funding_group_object.data(self.special_chars_funding, self.special_chars_award_id) + data = self.funding_group_object.extract_funding_data(self.special_chars_funding, self.special_chars_award_id) for funding in self.funding_group: for award_id in funding.get("award-id"): is_valid = callable_validation(award_id) diff --git a/tests/sps/validation/test_funding_group.py b/tests/sps/validation/test_funding_group.py index 8e4ba4e60..0c623bfc8 100644 --- a/tests/sps/validation/test_funding_group.py +++ b/tests/sps/validation/test_funding_group.py @@ -2,6 +2,7 @@ from packtools.sps.utils.xml_utils import get_xml_tree from packtools.sps.validation.funding_group import FundingGroupValidation +from packtools.sps.utils import xml_utils def callable_validation_success(award_id): @@ -1181,6 +1182,63 @@ def test_award_id_format_validation_fail_without_award_id(self): obtained = list(FundingGroupValidation(xml_tree).award_id_format_validation(callable_validation_fail)) self.assertEqual([], obtained) + def test_funding_sources_validation_fix_bug(self): + self.maxDiff = None + xml_tree = xml_utils.get_xml_tree('tests/samples/1518-8787-rsp-56-37.xml') + obtained = list(FundingGroupValidation( + xml_tree, + special_chars_funding=['.', ','], + special_chars_award_id=['/', '.', '-'] + ).funding_sources_exist_validation()) + + expected = [ + { + "title": "Funding source element validation", + "parent": "article", + "parent_article_type": "other", + "parent_id": None, + "parent_lang": "en", + "item": "award-group", + "sub_item": "funding-source", + "validation_type": "exist", + "response": "OK", + "expected_value": "at least 1 value for funding source and at least 1 value " + "for award id", + "got_value": "1 values for funding source and 1 values for award id", + "message": "Got 1 values for funding source and 1 values for award id, " + "expected at least 1 value for funding source and at least 1 value " + "for award id", + "advice": None, + "data": { + "ack": [], + "article_lang": "en", + "article_type": "other", + "award_groups": [ + {"award-id": ["442776/2019-5"], "funding-source": ["CNPq"]}, + {"award-id": ["2018/14384-9"], "funding-source": ["Fapesp"]}, + ], + "fn_financial_information": [ + { + "fn-type": "financial-disclosure", + "look-like-award-id": ["442776/2019-5"], + "look-like-funding-source": [], + } + ], + "funding_sources": ["CNPq", "Fapesp"], + "funding_statement": "Funding: Conselho Nacional de Desenvolvimento " + "Científico e Tecnológico (CNPq - " + "442776/2019-5). Fundação de Amparo à Pesquisa " + "do Estado de São Paulo (Fapesp - " + "2018/14384-9).", + "principal_award_recipients": [], + }, + } + ] + + for i, item in enumerate(expected): + with self.subTest(i): + self.assertDictEqual(obtained[i], item) + if __name__ == '__main__': unittest.main()