diff --git a/swh/indexer/tests/test_origin_metadata.py b/swh/indexer/tests/test_origin_metadata.py --- a/swh/indexer/tests/test_origin_metadata.py +++ b/swh/indexer/tests/test_origin_metadata.py @@ -3,8 +3,7 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -import pytest - +import functools from unittest import mock from swh.objstorage.objstorage_in_memory import InMemoryObjStorage @@ -31,75 +30,85 @@ } } +EXPECTED_METADATA = { + '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', + 'url': + 'https://github.com/librariesio/yarn-parser#readme', + 'codeRepository': + 'git+git+https://github.com/librariesio/yarn-parser.git', + 'author': [{ + 'type': 'Person', + 'name': 'Andrew Nesbitt' + }], + 'license': 'https://spdx.org/licenses/AGPL-3.0', + 'version': '1.0.0', + 'description': + 'Tiny web service for parsing yarn.lock files', + 'issueTracker': + 'https://github.com/librariesio/yarn-parser/issues', + 'name': 'yarn-parser', + 'keywords': ['yarn', 'parse', 'lock', 'dependencies'], +} + -@pytest.mark.db -@mock.patch('swh.indexer.metadata.RevisionMetadataIndexer.parse_config_file') -@mock.patch('swh.indexer.origin_head.OriginHeadIndexer.parse_config_file') -@mock.patch('swh.indexer.storage.in_memory.IndexerStorage') -@mock.patch('swh.storage.in_memory.Storage') -def test_full_origin_metadata_indexer( - storage_mock, idx_storage_mock, origin_head_parse_config, - revision_metadata_parse_config): - # Always returns the same instance of the idx storage, because - # this function is called by each of the three indexers. - objstorage = InMemoryObjStorage() - storage = Storage() - idx_storage = IndexerStorage() - - origin_head_parse_config.return_value = ORIGIN_HEAD_CONFIG - revision_metadata_parse_config.return_value = REVISION_METADATA_CONFIG - storage_mock.return_value = storage - idx_storage_mock.return_value = idx_storage - - fill_obj_storage(objstorage) - fill_storage(storage) - - # TODO: find a better way to share the ContentMetadataIndexer use - # the same objstorage instance. - import swh.objstorage - old_inmem_objstorage = swh.objstorage._STORAGE_CLASSES['memory'] - swh.objstorage._STORAGE_CLASSES['memory'] = lambda: objstorage - try: - indexer = OriginMetadataIndexer() - indexer.storage = storage - indexer.idx_storage = idx_storage - indexer.run(["git+https://github.com/librariesio/yarn-parser"]) - finally: - swh.objstorage._STORAGE_CLASSES['memory'] = old_inmem_objstorage +def origin_metadata_indexer_test(f): + @mock.patch( + 'swh.indexer.metadata.RevisionMetadataIndexer.parse_config_file') + @mock.patch( + 'swh.indexer.origin_head.OriginHeadIndexer.parse_config_file') + @mock.patch('swh.indexer.storage.in_memory.IndexerStorage') + @mock.patch('swh.storage.in_memory.Storage') + @functools.wraps(f) + def newf(storage_mock, idx_storage_mock, origin_head_parse_config, + revision_metadata_parse_config): + # Always returns the same instance of the idx storage, because + # this function is called by each of the three indexers. + objstorage = InMemoryObjStorage() + storage = Storage() + idx_storage = IndexerStorage() + + origin_head_parse_config.return_value = ORIGIN_HEAD_CONFIG + revision_metadata_parse_config.return_value = REVISION_METADATA_CONFIG + storage_mock.return_value = storage + idx_storage_mock.return_value = idx_storage + + fill_obj_storage(objstorage) + fill_storage(storage) + + # TODO: find a better way to share the ContentMetadataIndexer use + # the same objstorage instance. + import swh.objstorage + old_inmem_objstorage = swh.objstorage._STORAGE_CLASSES['memory'] + swh.objstorage._STORAGE_CLASSES['memory'] = lambda: objstorage + try: + f(storage, idx_storage) + finally: + swh.objstorage._STORAGE_CLASSES['memory'] = old_inmem_objstorage + + return newf + + +@origin_metadata_indexer_test +def test_origin_metadata_indexer(storage, idx_storage): + indexer = OriginMetadataIndexer() + indexer.storage = storage + indexer.idx_storage = idx_storage + indexer.run(["git+https://github.com/librariesio/yarn-parser"]) origin = storage.origin_get({ 'type': 'git', 'url': 'https://github.com/librariesio/yarn-parser'}) rev_id = hash_to_bytes('8dbb6aeb036e7fd80664eb8bfd1507881af1ba9f') - metadata = { - '@context': 'https://doi.org/10.5063/schema/codemeta-2.0', - 'url': - 'https://github.com/librariesio/yarn-parser#readme', - 'codeRepository': - 'git+git+https://github.com/librariesio/yarn-parser.git', - 'author': [{ - 'type': 'Person', - 'name': 'Andrew Nesbitt' - }], - 'license': 'https://spdx.org/licenses/AGPL-3.0', - 'version': '1.0.0', - 'description': - 'Tiny web service for parsing yarn.lock files', - 'issueTracker': - 'https://github.com/librariesio/yarn-parser/issues', - 'name': 'yarn-parser', - 'keywords': ['yarn', 'parse', 'lock', 'dependencies'], - } rev_metadata = { 'id': rev_id, - 'translated_metadata': metadata, + 'translated_metadata': EXPECTED_METADATA, 'mappings': ['npm'], } origin_metadata = { 'origin_id': origin['id'], 'from_revision': rev_id, - 'metadata': metadata, + 'metadata': EXPECTED_METADATA, 'mappings': ['npm'], }