Changeset View
Changeset View
Standalone View
Standalone View
swh/indexer/tests/test_metadata.py
Show First 20 Lines • Show All 566 Lines • ▼ Show 20 Lines | def test_compute_metadata_codemeta_alternate_context(self): | ||||
"type": "SoftwareSourceCode", | "type": "SoftwareSourceCode", | ||||
"identifier": "CodeMeta", | "identifier": "CodeMeta", | ||||
} | } | ||||
result = self.codemeta_mapping.translate(raw_content) | result = self.codemeta_mapping.translate(raw_content) | ||||
self.assertEqual(result, expected_result) | self.assertEqual(result, expected_result) | ||||
def test_compute_metadata_maven(self): | def test_compute_metadata_maven(self): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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> | ||||
<repository> | <repository> | ||||
<id>central</id> | <id>central</id> | ||||
Show All 23 Lines | def test_compute_metadata_maven(self): | ||||
'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': | 'codeRepository': | ||||
'http://repo1.maven.org/maven2/com/mycompany/app/my-app', | 'http://repo1.maven.org/maven2/com/mycompany/app/my-app', | ||||
}) | }) | ||||
def test_compute_metadata_maven_empty(self): | def test_compute_metadata_maven_empty(self): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
</project>""" | </project>""" | ||||
result = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'type': 'SoftwareSourceCode', | 'type': 'SoftwareSourceCode', | ||||
}) | }) | ||||
def test_compute_metadata_maven_almost_empty(self): | def test_compute_metadata_maven_almost_empty(self): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<foo/> | <foo/> | ||||
</project>""" | </project>""" | ||||
result = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'type': 'SoftwareSourceCode', | 'type': 'SoftwareSourceCode', | ||||
}) | }) | ||||
def test_compute_metadata_maven_unknown_project_ns(self): | |||||
raw_content = b""" | |||||
<foo:project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
xmlns:foo="http://example.com/foo"> | |||||
<name>Maven Default Project</name> | |||||
<version>1.2.3</version> | |||||
</foo:project>""" | |||||
result = self.maven_mapping.translate(raw_content) | |||||
self.assertEqual(result, { | |||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | |||||
'type': 'SoftwareSourceCode', | |||||
}) | |||||
def test_compute_metadata_maven_unknown_element_ns(self): | |||||
raw_content = b""" | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
xmlns:foo="http://example.com/foo"> | |||||
<foo:name>Maven Default Project</foo:name> | |||||
<version>1.2.3</version> | |||||
</project>""" | |||||
result = self.maven_mapping.translate(raw_content) | |||||
self.assertEqual(result, { | |||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | |||||
'type': 'SoftwareSourceCode', | |||||
'version': '1.2.3', | |||||
}) | |||||
def test_compute_metadata_maven_invalid_xml(self): | def test_compute_metadata_maven_invalid_xml(self): | ||||
expected_warning = ( | expected_warning = ( | ||||
'WARNING:swh.indexer.metadata_dictionary.MavenMapping:' | 'WARNING:swh.indexer.metadata_dictionary.MavenMapping:' | ||||
'Error parsing XML from foo') | 'Error parsing XML from foo') | ||||
raw_content = b""" | raw_content = b""" | ||||
<project>""" | <project xmlns="http://maven.apache.org/POM/4.0.0">""" | ||||
with self.assertLogs('swh.indexer.metadata_dictionary', | with self.assertLogs('swh.indexer.metadata_dictionary', | ||||
level='WARNING') as cm: | level='WARNING') as cm: | ||||
result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | ||||
self.assertEqual(cm.output, [expected_warning]) | self.assertEqual(cm.output, [expected_warning]) | ||||
self.assertEqual(result, None) | self.assertEqual(result, None) | ||||
raw_content = b""" | raw_content = b""" | ||||
""" | """ | ||||
with self.assertLogs('swh.indexer.metadata_dictionary', | with self.assertLogs('swh.indexer.metadata_dictionary', | ||||
level='WARNING') as cm: | level='WARNING') as cm: | ||||
result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | ||||
self.assertEqual(cm.output, [expected_warning]) | self.assertEqual(cm.output, [expected_warning]) | ||||
self.assertEqual(result, None) | self.assertEqual(result, None) | ||||
def test_compute_metadata_maven_unknown_encoding(self): | def test_compute_metadata_maven_unknown_encoding(self): | ||||
expected_warning = ( | expected_warning = ( | ||||
'WARNING:swh.indexer.metadata_dictionary.MavenMapping:' | 'WARNING:swh.indexer.metadata_dictionary.MavenMapping:' | ||||
'Error detecting XML encoding from foo') | 'Error detecting XML encoding from foo') | ||||
raw_content = b"""<?xml version="1.0" encoding="foo"?> | raw_content = b"""<?xml version="1.0" encoding="foo"?> | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
</project>""" | </project>""" | ||||
with self.assertLogs('swh.indexer.metadata_dictionary', | with self.assertLogs('swh.indexer.metadata_dictionary', | ||||
level='WARNING') as cm: | level='WARNING') as cm: | ||||
result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | ||||
self.assertEqual(cm.output, [expected_warning]) | self.assertEqual(cm.output, [expected_warning]) | ||||
self.assertEqual(result, None) | self.assertEqual(result, None) | ||||
raw_content = b"""<?xml version="1.0" encoding="UTF-7"?> | raw_content = b"""<?xml version="1.0" encoding="UTF-7"?> | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
</project>""" | </project>""" | ||||
with self.assertLogs('swh.indexer.metadata_dictionary', | with self.assertLogs('swh.indexer.metadata_dictionary', | ||||
level='WARNING') as cm: | level='WARNING') as cm: | ||||
result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | ||||
self.assertEqual(cm.output, [expected_warning]) | self.assertEqual(cm.output, [expected_warning]) | ||||
self.assertEqual(result, None) | self.assertEqual(result, None) | ||||
def test_compute_metadata_maven_invalid_encoding(self): | def test_compute_metadata_maven_invalid_encoding(self): | ||||
expected_warning = ( | expected_warning = ( | ||||
'WARNING:swh.indexer.metadata_dictionary.MavenMapping:' | 'WARNING:swh.indexer.metadata_dictionary.MavenMapping:' | ||||
'Error unidecoding XML from foo') | 'Error unidecoding XML from foo') | ||||
raw_content = b"""<?xml version="1.0" encoding="UTF-8"?> | raw_content = b"""<?xml version="1.0" encoding="UTF-8"?> | ||||
<foo\xe5ct> | <foo\xe5ct> | ||||
</foo>""" | </foo>""" | ||||
with self.assertLogs('swh.indexer.metadata_dictionary', | with self.assertLogs('swh.indexer.metadata_dictionary', | ||||
level='WARNING') as cm: | level='WARNING') as cm: | ||||
result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | result = MAPPINGS["MavenMapping"]('foo').translate(raw_content) | ||||
self.assertEqual(cm.output, [expected_warning]) | self.assertEqual(cm.output, [expected_warning]) | ||||
self.assertEqual(result, None) | self.assertEqual(result, None) | ||||
def test_compute_metadata_maven_minimal(self): | def test_compute_metadata_maven_minimal(self): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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 = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'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(self): | def test_compute_metadata_maven_empty_nodes(self): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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 = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'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 xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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 = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'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 xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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 = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'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 xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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 = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'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 xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<groupId></groupId> | <groupId></groupId> | ||||
<version>1.2.3</version> | <version>1.2.3</version> | ||||
</project>""" | </project>""" | ||||
result = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'type': 'SoftwareSourceCode', | 'type': 'SoftwareSourceCode', | ||||
'version': '1.2.3', | 'version': '1.2.3', | ||||
}) | }) | ||||
def test_compute_metadata_maven_invalid_licenses(self): | def test_compute_metadata_maven_invalid_licenses(self): | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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 = self.maven_mapping.translate(raw_content) | result = self.maven_mapping.translate(raw_content) | ||||
self.assertEqual(result, { | self.assertEqual(result, { | ||||
'@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', | ||||
'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_multiple(self): | def test_compute_metadata_maven_multiple(self): | ||||
'''Tests when there are multiple code repos and licenses.''' | '''Tests when there are multiple code repos and licenses.''' | ||||
raw_content = b""" | raw_content = b""" | ||||
<project> | <project xmlns="http://maven.apache.org/POM/4.0.0"> | ||||
<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> | ||||
<repository> | <repository> | ||||
<id>central</id> | <id>central</id> | ||||
▲ Show 20 Lines • Show All 296 Lines • Show Last 20 Lines |