diff --git a/swh/deposit/tests/api/test_checks.py b/swh/deposit/tests/api/test_checks.py index 6f96beea..0854e679 100644 --- a/swh/deposit/tests/api/test_checks.py +++ b/swh/deposit/tests/api/test_checks.py @@ -1,252 +1,250 @@ # Copyright (C) 2017-2022 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import textwrap from typing import Any, Dict from xml.etree import ElementTree import pytest from swh.deposit.api.checks import ( METADATA_PROVENANCE_KEY, SUGGESTED_FIELDS_MISSING, check_metadata, ) METADATA_PROVENANCE_DICT: Dict[str, Any] = { "swh:deposit": { METADATA_PROVENANCE_KEY: {"schema:url": "some-metadata-provenance-url"} } } XMLNS = """xmlns="http://www.w3.org/2005/Atom" xmlns:swh="https://www.softwareheritage.org/schema/2018/deposit" xmlns:codemeta="https://doi.org/10.5063/SCHEMA/CODEMETA-2.0" - xmlns:schema="http://schema.org/" -""" + xmlns:schema="http://schema.org/" """ PROVENANCE_XML = """ some-metadata-provenance-url - -""" + """ _parameters1 = [ textwrap.dedent(metadata_ok) for (metadata_ok,) in [ ( - f""" + f"""\ something something-else foo someone {PROVENANCE_XML} """, ), ( - f""" + f"""\ something something-else foo no one {PROVENANCE_XML} """, ), ( - f""" + f"""\ some url bar no one {PROVENANCE_XML} """, ), ( - f""" + f"""\ some url some id nar no one 2020-12-21 2020-12-21 {PROVENANCE_XML} """, ), ] ] @pytest.mark.parametrize( "metadata_ok", _parameters1, ) def test_api_checks_check_metadata_ok(metadata_ok, swh_checks_deposit): actual_check, detail = check_metadata(ElementTree.fromstring(metadata_ok)) assert actual_check is True, f"Unexpected result: {detail}" if "swh:deposit" in metadata_ok: # no missing suggested field assert detail is None else: # missing suggested field assert detail == { "metadata": [ { "fields": [METADATA_PROVENANCE_KEY], "summary": SUGGESTED_FIELDS_MISSING, } ] } _parameters2 = [ (textwrap.dedent(metadata_ko), expected_summary) for (metadata_ko, expected_summary) in [ ( - f""" + f"""\ something something-else someone {PROVENANCE_XML} """, { "summary": "Mandatory fields are missing", "fields": ["atom:name or atom:title or codemeta:name"], }, ), ( - f""" + f"""\ something something-else foobar {PROVENANCE_XML} """, { "summary": "Mandatory fields are missing", "fields": ["atom:author or codemeta:author"], }, ), ( - f""" + f"""\ something something-else bar someone {PROVENANCE_XML} """, { "summary": "Mandatory fields are missing", "fields": ["atom:name or atom:title or codemeta:name"], }, ), ( - f""" + f"""\ something something-else foobar foo {PROVENANCE_XML} """, { "summary": "Mandatory fields are missing", "fields": ["atom:author or codemeta:author"], }, ), ( - f""" + f"""\ something something-else bar someone {PROVENANCE_XML} """, { "summary": "Mandatory fields are missing", "fields": ["atom:author or codemeta:author"], }, ), ( - f""" + f"""\ something something-else bar someone 2020-aa-21 2020-12-bb {PROVENANCE_XML} """, { "summary": "Invalid date format", "fields": ["codemeta:datePublished", "codemeta:dateCreated"], }, ), ] ] @pytest.mark.parametrize("metadata_ko,expected_summary", _parameters2) def test_api_checks_check_metadata_ko( metadata_ko, expected_summary, swh_checks_deposit ): actual_check, error_detail = check_metadata(ElementTree.fromstring(metadata_ko)) assert actual_check is False assert error_detail == {"metadata": [expected_summary]} _parameters3 = [ (textwrap.dedent(metadata_ko), expected_summary) for (metadata_ko, expected_summary) in [ ( - f""" + f"""\ some url someid bar no one 2020-aa-21 2020-12-bb """, { "summary": "Invalid date format", "fields": ["codemeta:datePublished", "codemeta:dateCreated"], }, ), ] ] @pytest.mark.parametrize("metadata_ko,expected_invalid_summary", _parameters3) def test_api_checks_check_metadata_fields_ko_and_missing_suggested_fields( metadata_ko, expected_invalid_summary, swh_checks_deposit ): actual_check, error_detail = check_metadata(ElementTree.fromstring(metadata_ko)) assert actual_check is False assert error_detail == { "metadata": [expected_invalid_summary] + [{"fields": [METADATA_PROVENANCE_KEY], "summary": SUGGESTED_FIELDS_MISSING,}] }