Changeset View
Changeset View
Standalone View
Standalone View
swh/indexer/tests/metadata_dictionary/test_maven.py
# Copyright (C) 2017-2022 The Software Heritage developers | # Copyright (C) 2017-2022 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import logging | import logging | ||||
from hypothesis import HealthCheck, given, settings | from hypothesis import HealthCheck, given, settings | ||||
from swh.indexer.codemeta import COMPACT_CONTEXT | |||||
from swh.indexer.metadata_dictionary import MAPPINGS | from swh.indexer.metadata_dictionary import MAPPINGS | ||||
from ..utils import xml_document_strategy | from ..utils import xml_document_strategy | ||||
def test_compute_metadata_maven(): | def test_compute_metadata_maven(): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
Show All 19 Lines | <project> | ||||
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> | <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> | ||||
<distribution>repo</distribution> | <distribution>repo</distribution> | ||||
<comments>A business-friendly OSS license</comments> | <comments>A business-friendly OSS license</comments> | ||||
</license> | </license> | ||||
</licenses> | </licenses> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"name": "Maven Default Project", | "name": "Maven Default Project", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
"license": "https://www.apache.org/licenses/LICENSE-2.0.txt", | "license": "https://www.apache.org/licenses/LICENSE-2.0.txt", | ||||
"codeRepository": ("http://repo1.maven.org/maven2/com/mycompany/app/my-app"), | "codeRepository": ("http://repo1.maven.org/maven2/com/mycompany/app/my-app"), | ||||
} | } | ||||
def test_compute_metadata_maven_empty(): | def test_compute_metadata_maven_empty(): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
} | } | ||||
def test_compute_metadata_maven_almost_empty(): | def test_compute_metadata_maven_almost_empty(): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
<foo/> | <foo/> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
} | } | ||||
def test_compute_metadata_maven_invalid_xml(caplog): | def test_compute_metadata_maven_invalid_xml(caplog): | ||||
expected_warning = ( | expected_warning = ( | ||||
"swh.indexer.metadata_dictionary.maven.MavenMapping", | "swh.indexer.metadata_dictionary.maven.MavenMapping", | ||||
logging.WARNING, | logging.WARNING, | ||||
▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | <project> | ||||
<name>Maven Default Project</name> | <name>Maven Default Project</name> | ||||
<modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
<groupId>com.mycompany.app</groupId> | <groupId>com.mycompany.app</groupId> | ||||
<artifactId>my-app</artifactId> | <artifactId>my-app</artifactId> | ||||
<version>1.2.3</version> | <version>1.2.3</version> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"name": "Maven Default Project", | "name": "Maven Default Project", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
"codeRepository": ( | "codeRepository": ( | ||||
"https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | ||||
), | ), | ||||
} | } | ||||
def test_compute_metadata_maven_empty_nodes(): | def test_compute_metadata_maven_empty_nodes(): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
<name>Maven Default Project</name> | <name>Maven Default Project</name> | ||||
<modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
<groupId>com.mycompany.app</groupId> | <groupId>com.mycompany.app</groupId> | ||||
<artifactId>my-app</artifactId> | <artifactId>my-app</artifactId> | ||||
<version>1.2.3</version> | <version>1.2.3</version> | ||||
<repositories> | <repositories> | ||||
</repositories> | </repositories> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"name": "Maven Default Project", | "name": "Maven Default Project", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
"codeRepository": ( | "codeRepository": ( | ||||
"https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | ||||
), | ), | ||||
} | } | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
<name>Maven Default Project</name> | <name>Maven Default Project</name> | ||||
<modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
<groupId>com.mycompany.app</groupId> | <groupId>com.mycompany.app</groupId> | ||||
<artifactId>my-app</artifactId> | <artifactId>my-app</artifactId> | ||||
<version></version> | <version></version> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"name": "Maven Default Project", | "name": "Maven Default Project", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"codeRepository": ( | "codeRepository": ( | ||||
"https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | ||||
), | ), | ||||
} | } | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
<name></name> | <name></name> | ||||
<modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
<groupId>com.mycompany.app</groupId> | <groupId>com.mycompany.app</groupId> | ||||
<artifactId>my-app</artifactId> | <artifactId>my-app</artifactId> | ||||
<version>1.2.3</version> | <version>1.2.3</version> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
"codeRepository": ( | "codeRepository": ( | ||||
"https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | ||||
), | ), | ||||
} | } | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
<name>Maven Default Project</name> | <name>Maven Default Project</name> | ||||
<modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
<groupId>com.mycompany.app</groupId> | <groupId>com.mycompany.app</groupId> | ||||
<artifactId>my-app</artifactId> | <artifactId>my-app</artifactId> | ||||
<version>1.2.3</version> | <version>1.2.3</version> | ||||
<licenses> | <licenses> | ||||
</licenses> | </licenses> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"name": "Maven Default Project", | "name": "Maven Default Project", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
"codeRepository": ( | "codeRepository": ( | ||||
"https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | ||||
), | ), | ||||
} | } | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
<groupId></groupId> | <groupId></groupId> | ||||
<version>1.2.3</version> | <version>1.2.3</version> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
} | } | ||||
def test_compute_metadata_maven_invalid_licenses(): | def test_compute_metadata_maven_invalid_licenses(): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project> | ||||
<name>Maven Default Project</name> | <name>Maven Default Project</name> | ||||
<modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
<groupId>com.mycompany.app</groupId> | <groupId>com.mycompany.app</groupId> | ||||
<artifactId>my-app</artifactId> | <artifactId>my-app</artifactId> | ||||
<version>1.2.3</version> | <version>1.2.3</version> | ||||
<licenses> | <licenses> | ||||
foo | foo | ||||
</licenses> | </licenses> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"name": "Maven Default Project", | "name": "Maven Default Project", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
"codeRepository": ( | "codeRepository": ( | ||||
"https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" | ||||
), | ), | ||||
} | } | ||||
Show All 35 Lines | <project> | ||||
<license> | <license> | ||||
<name>MIT license</name> | <name>MIT license</name> | ||||
<url>https://opensource.org/licenses/MIT</url> | <url>https://opensource.org/licenses/MIT</url> | ||||
</license> | </license> | ||||
</licenses> | </licenses> | ||||
</project>""" | </project>""" | ||||
result = MAPPINGS["MavenMapping"]().translate(raw_content) | result = MAPPINGS["MavenMapping"]().translate(raw_content) | ||||
assert result == { | assert result == { | ||||
"@context": "https://doi.org/10.5063/schema/codemeta-2.0", | "@context": COMPACT_CONTEXT, | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"name": "Maven Default Project", | "name": "Maven Default Project", | ||||
"identifier": "com.mycompany.app", | "identifier": "com.mycompany.app", | ||||
"version": "1.2.3", | "version": "1.2.3", | ||||
"license": [ | "license": [ | ||||
"https://www.apache.org/licenses/LICENSE-2.0.txt", | "https://www.apache.org/licenses/LICENSE-2.0.txt", | ||||
"https://opensource.org/licenses/MIT", | "https://opensource.org/licenses/MIT", | ||||
], | ], | ||||
Show All 17 Lines |