Changeset View
Changeset View
Standalone View
Standalone View
swh/indexer/tests/test_metadata.py
# Copyright (C) 2017 The Software Heritage developers | # Copyright (C) 2017 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 unittest | import unittest | ||||
import logging | import logging | ||||
from swh.indexer.metadata_dictionary import compute_metadata | from swh.indexer.metadata_dictionary import compute_metadata, CROSSWALK_TABLE | ||||
from swh.indexer.metadata_detector import detect_metadata | from swh.indexer.metadata_detector import detect_metadata | ||||
from swh.indexer.metadata_detector import extract_minimal_metadata_dict | from swh.indexer.metadata_detector import extract_minimal_metadata_dict | ||||
from swh.indexer.metadata import ContentMetadataIndexer | from swh.indexer.metadata import ContentMetadataIndexer | ||||
from swh.indexer.metadata import RevisionMetadataIndexer | from swh.indexer.metadata import RevisionMetadataIndexer | ||||
from swh.indexer.tests.test_utils import MockObjStorage, MockStorage | from swh.indexer.tests.test_utils import MockObjStorage, MockStorage | ||||
from swh.indexer.tests.test_utils import MockIndexerStorage | from swh.indexer.tests.test_utils import MockIndexerStorage | ||||
Show All 28 Lines | def prepare(self): | ||||
'storage': { | 'storage': { | ||||
'cls': 'remote', | 'cls': 'remote', | ||||
'args': { | 'args': { | ||||
'url': 'http://localhost:9999', | 'url': 'http://localhost:9999', | ||||
} | } | ||||
}, | }, | ||||
'tools': { | 'tools': { | ||||
'name': 'swh-metadata-detector', | 'name': 'swh-metadata-detector', | ||||
'version': '0.0.1', | 'version': '0.0.2', | ||||
'configuration': { | 'configuration': { | ||||
'type': 'local', | 'type': 'local', | ||||
'context': 'npm' | 'context': 'npm' | ||||
} | } | ||||
} | } | ||||
} | } | ||||
self.storage = MockStorage() | self.storage = MockStorage() | ||||
self.idx_storage = MockIndexerStorage() | self.idx_storage = MockIndexerStorage() | ||||
Show All 12 Lines | class Metadata(unittest.TestCase): | ||||
""" | """ | ||||
def setUp(self): | def setUp(self): | ||||
""" | """ | ||||
shows the entire diff in the results | shows the entire diff in the results | ||||
""" | """ | ||||
self.maxDiff = None | self.maxDiff = None | ||||
self.content_tool = { | self.content_tool = { | ||||
'name': 'swh-metadata-translator', | 'name': 'swh-metadata-translator', | ||||
'version': '0.0.1', | 'version': '0.0.2', | ||||
'configuration': { | 'configuration': { | ||||
'type': 'local', | 'type': 'local', | ||||
'context': 'npm' | 'context': 'npm' | ||||
} | } | ||||
} | } | ||||
MockIndexerStorage.added_data = [] | MockIndexerStorage.added_data = [] | ||||
def test_crosstable(self): | |||||
self.assertEqual(CROSSWALK_TABLE['NodeJS'], { | |||||
'repository': 'codeRepository', | |||||
'os': 'operatingSystem', | |||||
'cpu': 'processorRequirements', | |||||
'engines': 'processorRequirements', | |||||
'dependencies': 'softwareRequirements', | |||||
'bundleDependencies': 'softwareRequirements', | |||||
'bundledDependencies': 'softwareRequirements', | |||||
'peerDependencies': 'softwareRequirements', | |||||
'author': 'creator', | |||||
'author.email': 'email', | |||||
'author.name': 'name', | |||||
'contributor': 'contributor', | |||||
'keywords': 'keywords', | |||||
'license': 'license', | |||||
'version': 'version', | |||||
'description': 'description', | |||||
'name': 'name', | |||||
'devDependencies': 'softwareSuggestions', | |||||
'optionalDependencies': 'softwareSuggestions', | |||||
'bugs': 'issueTracker', | |||||
'homepage': 'url' | |||||
}) | |||||
def test_compute_metadata_none(self): | def test_compute_metadata_none(self): | ||||
""" | """ | ||||
testing content empty content is empty | testing content empty content is empty | ||||
should return None | should return None | ||||
""" | """ | ||||
# given | # given | ||||
content = b"" | content = b"" | ||||
context = "npm" | context = "npm" | ||||
# None if no metadata was found or an error occurred | # None if no metadata was found or an error occurred | ||||
declared_metadata = None | declared_metadata = None | ||||
# when | # when | ||||
result = compute_metadata(context, content) | result = compute_metadata(context, content) | ||||
# then | # then | ||||
self.assertEqual(declared_metadata, result) | self.assertEqual(declared_metadata, result) | ||||
def test_compute_metadata_npm(self): | def test_compute_metadata_npm(self): | ||||
""" | """ | ||||
testing only computation of metadata with hard_mapping_npm | testing only computation of metadata with hard_mapping_npm | ||||
""" | """ | ||||
# given | # given | ||||
content = b""" | content = b""" | ||||
{ | { | ||||
"name": "test_metadata", | "name": "test_metadata", | ||||
"version": "0.0.1", | "version": "0.0.2", | ||||
"description": "Simple package.json test for indexer", | "description": "Simple package.json test for indexer", | ||||
"repository": { | "repository": { | ||||
"type": "git", | "type": "git", | ||||
"url": "https://github.com/moranegg/metadata_test" | "url": "https://github.com/moranegg/metadata_test" | ||||
} | } | ||||
} | } | ||||
""" | """ | ||||
declared_metadata = { | declared_metadata = { | ||||
'name': 'test_metadata', | 'name': 'test_metadata', | ||||
'version': '0.0.1', | 'version': '0.0.2', | ||||
'description': 'Simple package.json test for indexer', | 'description': 'Simple package.json test for indexer', | ||||
'codeRepository': { | 'codeRepository': { | ||||
'type': 'git', | 'type': 'git', | ||||
'url': 'https://github.com/moranegg/metadata_test' | 'url': 'https://github.com/moranegg/metadata_test' | ||||
}, | }, | ||||
'other': {} | 'other': {} | ||||
} | } | ||||
# when | # when | ||||
result = compute_metadata("npm", content) | result = compute_metadata("npm", content) | ||||
# then | # then | ||||
self.assertEqual(declared_metadata, result) | self.assertEqual(declared_metadata, result) | ||||
def test_extract_minimal_metadata_dict(self): | def test_extract_minimal_metadata_dict(self): | ||||
""" | """ | ||||
Test the creation of a coherent minimal metadata set | Test the creation of a coherent minimal metadata set | ||||
""" | """ | ||||
# given | # given | ||||
metadata_list = [{ | metadata_list = [{ | ||||
'name': 'test_1', | 'name': 'test_1', | ||||
'version': '0.0.1', | 'version': '0.0.2', | ||||
'description': 'Simple package.json test for indexer', | 'description': 'Simple package.json test for indexer', | ||||
'codeRepository': { | 'codeRepository': { | ||||
'type': 'git', | 'type': 'git', | ||||
'url': 'https://github.com/moranegg/metadata_test' | 'url': 'https://github.com/moranegg/metadata_test' | ||||
}, | }, | ||||
'other': {} | 'other': {} | ||||
}, { | }, { | ||||
'name': 'test_0_1', | 'name': 'test_0_1', | ||||
'version': '0.0.1', | 'version': '0.0.2', | ||||
'description': 'Simple package.json test for indexer', | 'description': 'Simple package.json test for indexer', | ||||
'codeRepository': { | 'codeRepository': { | ||||
'type': 'git', | 'type': 'git', | ||||
'url': 'https://github.com/moranegg/metadata_test' | 'url': 'https://github.com/moranegg/metadata_test' | ||||
}, | }, | ||||
'other': {} | 'other': {} | ||||
}, { | }, { | ||||
'name': 'test_metadata', | 'name': 'test_metadata', | ||||
'version': '0.0.1', | 'version': '0.0.2', | ||||
'author': 'moranegg', | 'author': 'moranegg', | ||||
'other': {} | 'other': {} | ||||
}] | }] | ||||
# when | # when | ||||
results = extract_minimal_metadata_dict(metadata_list) | results = extract_minimal_metadata_dict(metadata_list) | ||||
# then | # then | ||||
expected_results = { | expected_results = { | ||||
"developmentStatus": None, | "developmentStatus": None, | ||||
"version": ['0.0.1'], | "version": ['0.0.2'], | ||||
"operatingSystem": None, | "operatingSystem": None, | ||||
"description": ['Simple package.json test for indexer'], | "description": ['Simple package.json test for indexer'], | ||||
"keywords": None, | "keywords": None, | ||||
"issueTracker": None, | "issueTracker": None, | ||||
"name": ['test_1', 'test_0_1', 'test_metadata'], | "name": ['test_1', 'test_0_1', 'test_metadata'], | ||||
"author": ['moranegg'], | "author": ['moranegg'], | ||||
"relatedLink": None, | "relatedLink": None, | ||||
"url": None, | "url": None, | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | def test_index_content_metadata_npm(self): | ||||
'abbrev': '~1.1.0', | 'abbrev': '~1.1.0', | ||||
'ansi-regex': '~2.1.1', | 'ansi-regex': '~2.1.1', | ||||
'ansicolors': '~0.3.2', | 'ansicolors': '~0.3.2', | ||||
'ansistyles': '~0.1.3' | 'ansistyles': '~0.1.3' | ||||
}, | }, | ||||
'issueTracker': { | 'issueTracker': { | ||||
'url': 'https://github.com/npm/npm/issues' | 'url': 'https://github.com/npm/npm/issues' | ||||
}, | }, | ||||
'author': | 'creator': | ||||
'Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)', | 'Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)', | ||||
'codeRepository': { | 'codeRepository': { | ||||
'type': 'git', | 'type': 'git', | ||||
'url': 'https://github.com/npm/npm' | 'url': 'https://github.com/npm/npm' | ||||
}, | }, | ||||
'description': 'a package manager for JavaScript', | 'description': 'a package manager for JavaScript', | ||||
'softwareSuggestions': { | 'softwareSuggestions': { | ||||
'tacks': '~1.2.6', | 'tacks': '~1.2.6', | ||||
▲ Show 20 Lines • Show All 111 Lines • Show Last 20 Lines |