diff --git a/swh/indexer/tests/test_metadata.py b/swh/indexer/tests/test_metadata.py --- a/swh/indexer/tests/test_metadata.py +++ b/swh/indexer/tests/test_metadata.py @@ -1,12 +1,13 @@ -# Copyright (C) 2017-2020 The Software Heritage developers +# 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 json -import unittest +import logging from hypothesis import HealthCheck, given, settings, strategies +import pytest from swh.indexer.codemeta import CODEMETA_TERMS from swh.indexer.metadata import ContentMetadataIndexer, RevisionMetadataIndexer @@ -51,16 +52,12 @@ } -class Metadata(unittest.TestCase): +class TestMetadata: """ Tests metadata_mock_tool tool for Metadata detection """ - def setUp(self): - """ - shows the entire diff in the results - """ - self.maxDiff = None + def setup_method(self): self.npm_mapping = MAPPINGS["NpmMapping"]() self.codemeta_mapping = MAPPINGS["CodemetaMapping"]() self.maven_mapping = MAPPINGS["MavenMapping"]() @@ -81,7 +78,7 @@ # when result = self.npm_mapping.translate(content) # then - self.assertEqual(declared_metadata, result) + assert declared_metadata == result def test_compute_metadata_cff(self): """ @@ -160,7 +157,7 @@ # when result = self.cff_mapping.translate(content) # then - self.assertEqual(expected, result) + assert expected == result def test_compute_metadata_npm(self): """ @@ -201,7 +198,7 @@ # when result = self.npm_mapping.translate(content) # then - self.assertEqual(declared_metadata, result) + assert declared_metadata == result def test_index_content_metadata_npm(self): """ @@ -275,7 +272,7 @@ del result.tool["id"] # The assertion below returns False sometimes because of nested lists - self.assertEqual(expected_results, results) + assert expected_results == results def test_npm_bugs_normalization(self): # valid dictionary @@ -287,15 +284,12 @@ } }""" result = self.npm_mapping.translate(package_json) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "name": "foo", - "issueTracker": "https://github.com/owner/project/issues", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "name": "foo", + "issueTracker": "https://github.com/owner/project/issues", + "type": "SoftwareSourceCode", + } # "invalid" dictionary package_json = b"""{ @@ -305,14 +299,11 @@ } }""" result = self.npm_mapping.translate(package_json) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "name": "foo", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "name": "foo", + "type": "SoftwareSourceCode", + } # string package_json = b"""{ @@ -320,15 +311,12 @@ "bugs": "https://github.com/owner/project/issues" }""" result = self.npm_mapping.translate(package_json) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "name": "foo", - "issueTracker": "https://github.com/owner/project/issues", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "name": "foo", + "issueTracker": "https://github.com/owner/project/issues", + "type": "SoftwareSourceCode", + } def test_npm_repository_normalization(self): # normal @@ -340,15 +328,12 @@ } }""" result = self.npm_mapping.translate(package_json) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "name": "foo", - "codeRepository": "git+https://github.com/npm/cli.git", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "name": "foo", + "codeRepository": "git+https://github.com/npm/cli.git", + "type": "SoftwareSourceCode", + } # missing url package_json = b"""{ @@ -358,14 +343,11 @@ } }""" result = self.npm_mapping.translate(package_json) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "name": "foo", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "name": "foo", + "type": "SoftwareSourceCode", + } # github shortcut package_json = b"""{ @@ -379,7 +361,7 @@ "codeRepository": "git+https://github.com/npm/cli.git", "type": "SoftwareSourceCode", } - self.assertEqual(result, expected_result) + assert result == expected_result # github shortshortcut package_json = b"""{ @@ -387,7 +369,7 @@ "repository": "npm/cli" }""" result = self.npm_mapping.translate(package_json) - self.assertEqual(result, expected_result) + assert result == expected_result # gitlab shortcut package_json = b"""{ @@ -395,52 +377,48 @@ "repository": "gitlab:user/repo" }""" result = self.npm_mapping.translate(package_json) - self.assertEqual( - result, + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "name": "foo", + "codeRepository": "git+https://gitlab.com/user/repo.git", + "type": "SoftwareSourceCode", + } + + @pytest.mark.parametrize( + "filename", [b"package.json", b"Package.json", b"PACKAGE.json", b"PACKAGE.JSON"] + ) + def test_detect_metadata_package_json(self, filename): + # given + df = [ { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "name": "foo", - "codeRepository": "git+https://gitlab.com/user/repo.git", - "type": "SoftwareSourceCode", + "sha1_git": b"abc", + "name": b"index.js", + "target": b"abc", + "length": 897, + "status": "visible", + "type": "file", + "perms": 33188, + "dir_id": b"dir_a", + "sha1": b"bcd", }, - ) - - def test_detect_metadata_package_json(self): - filenames = [b"package.json", b"Package.json", b"PACKAGE.json", b"PACKAGE.JSON"] - - for filename in filenames: - with self.subTest(filename=filename): - # given - df = [ - { - "sha1_git": b"abc", - "name": b"index.js", - "target": b"abc", - "length": 897, - "status": "visible", - "type": "file", - "perms": 33188, - "dir_id": b"dir_a", - "sha1": b"bcd", - }, - { - "sha1_git": b"aab", - "name": filename, - "target": b"aab", - "length": 712, - "status": "visible", - "type": "file", - "perms": 33188, - "dir_id": b"dir_a", - "sha1": b"cde", - }, - ] - # when - results = detect_metadata(df) + { + "sha1_git": b"aab", + "name": filename, + "target": b"aab", + "length": 712, + "status": "visible", + "type": "file", + "perms": 33188, + "dir_id": b"dir_a", + "sha1": b"cde", + }, + ] + # when + results = detect_metadata(df) - expected_results = {"NpmMapping": [b"cde"]} - # then - self.assertEqual(expected_results, results) + expected_results = {"NpmMapping": [b"cde"]} + # then + assert expected_results == results def test_detect_metadata_codemeta_json_uppercase(self): # given @@ -473,7 +451,7 @@ expected_results = {"CodemetaMapping": [b"bcd"]} # then - self.assertEqual(expected_results, results) + assert expected_results == results def test_compute_metadata_valid_codemeta(self): raw_content = b"""{ @@ -580,7 +558,7 @@ "programmingLanguage": "JSON-LD", } result = self.codemeta_mapping.translate(raw_content) - self.assertEqual(result, expected_result) + assert result == expected_result def test_compute_metadata_codemeta_alternate_context(self): raw_content = b"""{ @@ -594,7 +572,7 @@ "identifier": "CodeMeta", } result = self.codemeta_mapping.translate(raw_content) - self.assertEqual(result, expected_result) + assert result == expected_result def test_compute_metadata_maven(self): raw_content = b""" @@ -625,33 +603,27 @@ """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "Maven Default Project", - "identifier": "com.mycompany.app", - "version": "1.2.3", - "license": "https://www.apache.org/licenses/LICENSE-2.0.txt", - "codeRepository": ( - "http://repo1.maven.org/maven2/com/mycompany/app/my-app" - ), - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "Maven Default Project", + "identifier": "com.mycompany.app", + "version": "1.2.3", + "license": "https://www.apache.org/licenses/LICENSE-2.0.txt", + "codeRepository": ( + "http://repo1.maven.org/maven2/com/mycompany/app/my-app" + ), + } def test_compute_metadata_maven_empty(self): raw_content = b""" """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + } def test_compute_metadata_maven_almost_empty(self): raw_content = b""" @@ -659,81 +631,85 @@ """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + } - def test_compute_metadata_maven_invalid_xml(self): + def test_compute_metadata_maven_invalid_xml(self, caplog): expected_warning = ( - "WARNING:swh.indexer.metadata_dictionary.maven.MavenMapping:" - "Error parsing XML from foo" + "swh.indexer.metadata_dictionary.maven.MavenMapping", + logging.WARNING, + "Error parsing XML from foo", ) + caplog.at_level(logging.WARNING, logger="swh.indexer.metadata_dictionary") raw_content = b""" """ - with self.assertLogs("swh.indexer.metadata_dictionary", level="WARNING") as cm: - result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) - self.assertEqual(cm.output, [expected_warning]) - self.assertEqual(result, None) + caplog.clear() + result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) + assert caplog.record_tuples == [expected_warning] + assert result is None raw_content = b""" """ - with self.assertLogs("swh.indexer.metadata_dictionary", level="WARNING") as cm: - result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) - self.assertEqual(cm.output, [expected_warning]) - self.assertEqual(result, None) + caplog.clear() + result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) + assert caplog.record_tuples == [expected_warning] + assert result is None - def test_compute_metadata_maven_unknown_encoding(self): + def test_compute_metadata_maven_unknown_encoding(self, caplog): expected_warning = ( - "WARNING:swh.indexer.metadata_dictionary.maven.MavenMapping:" - "Error detecting XML encoding from foo" + "swh.indexer.metadata_dictionary.maven.MavenMapping", + logging.WARNING, + "Error detecting XML encoding from foo", ) + caplog.at_level(logging.WARNING, logger="swh.indexer.metadata_dictionary") raw_content = b""" """ - with self.assertLogs("swh.indexer.metadata_dictionary", level="WARNING") as cm: - result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) - self.assertEqual(cm.output, [expected_warning]) - self.assertEqual(result, None) + caplog.clear() + result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) + assert caplog.record_tuples == [expected_warning] + assert result is None raw_content = b""" """ - with self.assertLogs("swh.indexer.metadata_dictionary", level="WARNING") as cm: - result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) - self.assertEqual(cm.output, [expected_warning]) - self.assertEqual(result, None) + caplog.clear() + result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) + assert caplog.record_tuples == [expected_warning] + assert result is None - def test_compute_metadata_maven_invalid_encoding(self): + def test_compute_metadata_maven_invalid_encoding(self, caplog): expected_warning = [ # libexpat1 <= 2.2.10-2+deb11u1 [ ( - "WARNING:swh.indexer.metadata_dictionary.maven.MavenMapping:" - "Error unidecoding XML from foo" + "swh.indexer.metadata_dictionary.maven.MavenMapping", + logging.WARNING, + "Error unidecoding XML from foo", ) ], # libexpat1 >= 2.2.10-2+deb11u2 [ ( - "WARNING:swh.indexer.metadata_dictionary.maven.MavenMapping:" - "Error parsing XML from foo" + "swh.indexer.metadata_dictionary.maven.MavenMapping", + logging.WARNING, + "Error parsing XML from foo", ) ], ] + caplog.at_level(logging.WARNING, logger="swh.indexer.metadata_dictionary") raw_content = b""" """ - with self.assertLogs("swh.indexer.metadata_dictionary", level="WARNING") as cm: - result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) - self.assertIn(cm.output, expected_warning) - self.assertEqual(result, None) + caplog.clear() + result = MAPPINGS["MavenMapping"]("foo").translate(raw_content) + assert caplog.record_tuples in expected_warning + assert result is None def test_compute_metadata_maven_minimal(self): raw_content = b""" @@ -745,19 +721,16 @@ 1.2.3 """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "Maven Default Project", - "identifier": "com.mycompany.app", - "version": "1.2.3", - "codeRepository": ( - "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" - ), - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "Maven Default Project", + "identifier": "com.mycompany.app", + "version": "1.2.3", + "codeRepository": ( + "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" + ), + } def test_compute_metadata_maven_empty_nodes(self): raw_content = b""" @@ -771,19 +744,16 @@ """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "Maven Default Project", - "identifier": "com.mycompany.app", - "version": "1.2.3", - "codeRepository": ( - "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" - ), - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "Maven Default Project", + "identifier": "com.mycompany.app", + "version": "1.2.3", + "codeRepository": ( + "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" + ), + } raw_content = b""" @@ -794,18 +764,15 @@ """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "Maven Default Project", - "identifier": "com.mycompany.app", - "codeRepository": ( - "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" - ), - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "Maven Default Project", + "identifier": "com.mycompany.app", + "codeRepository": ( + "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" + ), + } raw_content = b""" @@ -816,18 +783,15 @@ 1.2.3 """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "identifier": "com.mycompany.app", - "version": "1.2.3", - "codeRepository": ( - "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" - ), - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "identifier": "com.mycompany.app", + "version": "1.2.3", + "codeRepository": ( + "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" + ), + } raw_content = b""" @@ -840,19 +804,16 @@ """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "Maven Default Project", - "identifier": "com.mycompany.app", - "version": "1.2.3", - "codeRepository": ( - "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" - ), - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "Maven Default Project", + "identifier": "com.mycompany.app", + "version": "1.2.3", + "codeRepository": ( + "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" + ), + } raw_content = b""" @@ -860,14 +821,11 @@ 1.2.3 """ 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", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "version": "1.2.3", + } def test_compute_metadata_maven_invalid_licenses(self): raw_content = b""" @@ -882,19 +840,16 @@ """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "Maven Default Project", - "identifier": "com.mycompany.app", - "version": "1.2.3", - "codeRepository": ( - "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" - ), - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "Maven Default Project", + "identifier": "com.mycompany.app", + "version": "1.2.3", + "codeRepository": ( + "https://repo.maven.apache.org/maven2/com/mycompany/app/my-app" + ), + } def test_compute_metadata_maven_multiple(self): """Tests when there are multiple code repos and licenses.""" @@ -936,24 +891,21 @@ """ result = self.maven_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "Maven Default Project", - "identifier": "com.mycompany.app", - "version": "1.2.3", - "license": [ - "https://www.apache.org/licenses/LICENSE-2.0.txt", - "https://opensource.org/licenses/MIT", - ], - "codeRepository": [ - "http://repo1.maven.org/maven2/com/mycompany/app/my-app", - "http://example.org/maven2/com/mycompany/app/my-app", - ], - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "Maven Default Project", + "identifier": "com.mycompany.app", + "version": "1.2.3", + "license": [ + "https://www.apache.org/licenses/LICENSE-2.0.txt", + "https://opensource.org/licenses/MIT", + ], + "codeRepository": [ + "http://repo1.maven.org/maven2/com/mycompany/app/my-app", + "http://example.org/maven2/com/mycompany/app/my-app", + ], + } def test_compute_metadata_pkginfo(self): raw_content = b"""\ @@ -987,40 +939,33 @@ Provides-Extra: testing """ # noqa result = self.pkginfo_mapping.translate(raw_content) - self.assertCountEqual( - result["description"], - [ - "Software Heritage core utilities", # note the comma here - "swh-core\n" - "========\n" - "\n" - "core library for swh's modules:\n" - "- config parser\n" - "- hash computations\n" - "- serialization\n" - "- logging mechanism\n" - "", - ], - result, - ) + assert result["description"] == [ + "Software Heritage core utilities", # note the comma here + "swh-core\n" + "========\n" + "\n" + "core library for swh's modules:\n" + "- config parser\n" + "- hash computations\n" + "- serialization\n" + "- logging mechanism\n" + "", + ], result del result["description"] - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "url": "https://forge.softwareheritage.org/diffusion/DCORE/", - "name": "swh.core", - "author": [ - { - "type": "Person", - "name": "Software Heritage developers", - "email": "swh-devel@inria.fr", - } - ], - "version": "0.0.49", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "url": "https://forge.softwareheritage.org/diffusion/DCORE/", + "name": "swh.core", + "author": [ + { + "type": "Person", + "name": "Software Heritage developers", + "email": "swh-devel@inria.fr", + } + ], + "version": "0.0.49", + } def test_compute_metadata_pkginfo_utf8(self): raw_content = b"""\ @@ -1031,15 +976,12 @@ Hydrology N\xc2\xb083 """ # noqa result = self.pkginfo_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "snowpyt", - "description": "foo\nHydrology N°83", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "snowpyt", + "description": "foo\nHydrology N°83", + } def test_compute_metadata_pkginfo_keywords(self): raw_content = b"""\ @@ -1048,15 +990,12 @@ Keywords: foo bar baz """ # noqa result = self.pkginfo_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "foo", - "keywords": ["foo", "bar", "baz"], - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "foo", + "keywords": ["foo", "bar", "baz"], + } def test_compute_metadata_pkginfo_license(self): raw_content = b"""\ @@ -1065,15 +1004,12 @@ License: MIT """ # noqa result = self.pkginfo_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "foo", - "license": "MIT", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "foo", + "license": "MIT", + } def test_gemspec_base(self): raw_content = b""" @@ -1090,23 +1026,20 @@ s.metadata = { "source_code_uri" => "https://github.com/example/example" } end""" result = self.gemspec_mapping.translate(raw_content) - self.assertCountEqual( - result.pop("description"), - ["This is an example!", "Much longer explanation of the example!"], - ) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "author": [{"type": "Person", "name": "Ruby Coder"}], - "name": "example", - "license": "https://spdx.org/licenses/MIT", - "codeRepository": "https://rubygems.org/gems/example", - "email": "rubycoder@example.com", - "version": "0.1.0", - }, - ) + assert set(result.pop("description")) == { + "This is an example!", + "Much longer explanation of the example!", + } + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "author": [{"type": "Person", "name": "Ruby Coder"}], + "name": "example", + "license": "https://spdx.org/licenses/MIT", + "codeRepository": "https://rubygems.org/gems/example", + "email": "rubycoder@example.com", + "version": "0.1.0", + } def test_gemspec_two_author_fields(self): raw_content = b""" @@ -1115,20 +1048,20 @@ s.author = "Ruby Coder2" end""" result = self.gemspec_mapping.translate(raw_content) - self.assertCountEqual( - result.pop("author"), + assert result.pop("author") in ( [ {"type": "Person", "name": "Ruby Coder1"}, {"type": "Person", "name": "Ruby Coder2"}, ], + [ + {"type": "Person", "name": "Ruby Coder2"}, + {"type": "Person", "name": "Ruby Coder1"}, + ], ) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + } def test_gemspec_invalid_author(self): raw_content = b""" @@ -1136,38 +1069,29 @@ s.author = ["Ruby Coder"] end""" result = self.gemspec_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + } raw_content = b""" Gem::Specification.new do |s| s.author = "Ruby Coder1", end""" result = self.gemspec_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + } raw_content = b""" Gem::Specification.new do |s| s.authors = ["Ruby Coder1", ["Ruby Coder2"]] end""" result = self.gemspec_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "author": [{"type": "Person", "name": "Ruby Coder1"}], - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "author": [{"type": "Person", "name": "Ruby Coder1"}], + } def test_gemspec_alternative_header(self): raw_content = b""" @@ -1179,15 +1103,12 @@ } """ result = self.gemspec_mapping.translate(raw_content) - self.assertEqual( - result, - { - "@context": "https://doi.org/10.5063/schema/codemeta-2.0", - "type": "SoftwareSourceCode", - "name": "rb-system-with-aliases", - "description": "execute system commands with aliases", - }, - ) + assert result == { + "@context": "https://doi.org/10.5063/schema/codemeta-2.0", + "type": "SoftwareSourceCode", + "name": "rb-system-with-aliases", + "description": "execute system commands with aliases", + } @settings(suppress_health_check=[HealthCheck.too_slow]) @given(json_document_strategy(keys=list(NpmMapping.mapping))) @@ -1274,7 +1195,7 @@ del result.tool["id"] # then - self.assertEqual(results, expected_results) + assert results == expected_results def test_revision_metadata_indexer_single_root_dir(self): metadata_indexer = RevisionMetadataIndexer(config=REVISION_METADATA_CONFIG) @@ -1338,4 +1259,4 @@ del result.tool["id"] # then - self.assertEqual(results, expected_results) + assert results == expected_results