diff --git a/swh/loader/package/tests/test_deposit.py b/swh/loader/package/tests/test_deposit.py index 826677e..00d4d42 100644 --- a/swh/loader/package/tests/test_deposit.py +++ b/swh/loader/package/tests/test_deposit.py @@ -1,77 +1,122 @@ # Copyright (C) 2019 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 from swh.loader.package.deposit import DepositLoader +from swh.model.hashutil import hash_to_bytes + +from swh.loader.package.tests.common import ( + check_snapshot, check_metadata_paths +) + def test_deposit_init_ok(swh_config): url = 'some-url' deposit_id = 999 loader = DepositLoader(url, deposit_id) # Something that does not exist assert loader.url == url assert loader.archive_url == '/%s/raw/' % deposit_id assert loader.metadata_url == '/%s/meta/' % deposit_id assert loader.deposit_update_url == '/%s/update/' % deposit_id assert loader.client is not None def test_deposit_loading_failure_to_retrieve_artifact(swh_config): """Error during fetching artifact ends us with partial visit """ # private api url form: 'https://deposit.s.o/1/private/hal/666/raw/' url = 'some-url' unknown_deposit_id = 666 loader = DepositLoader(url, unknown_deposit_id) # does not exist assert loader.archive_url actual_load_status = loader.load() assert actual_load_status == {'status': 'uneventful'} stats = loader.storage.stat_counters() assert { 'content': 0, 'directory': 0, 'origin': 1, 'origin_visit': 1, 'person': 0, 'release': 0, 'revision': 0, 'skipped_content': 0, 'snapshot': 0, } == stats origin_visit = next(loader.storage.origin_visit_get(url)) assert origin_visit['status'] == 'partial' +def test_revision_metadata_structure(swh_config, local_get): + url = 'https://hal-test.archives-ouvertes.fr/some-external-id' + deposit_id = 666 + loader = DepositLoader(url, deposit_id) + + assert loader.archive_url + actual_load_status = loader.load() + + assert actual_load_status == {'status': 'eventful'} + + expected_revision_id = hash_to_bytes( + '9471c606239bccb1f269564c9ea114e1eeab9eb4') + revision = list(loader.storage.revision_get([expected_revision_id]))[0] + + assert revision is not None + + check_metadata_paths(revision['metadata'], paths=[ + ('extrinsic.provider', str), + ('extrinsic.when', str), + ('extrinsic.raw', dict), + ('original_artifact.filename', str), + ('original_artifact.length', int), + ('original_artifact.checksums', dict), + ]) + + def test_deposit_loading_ok(swh_config, local_get): url = 'https://hal-test.archives-ouvertes.fr/some-external-id' deposit_id = 666 loader = DepositLoader(url, deposit_id) assert loader.archive_url actual_load_status = loader.load() assert actual_load_status == {'status': 'eventful'} stats = loader.storage.stat_counters() assert { 'content': 303, 'directory': 12, 'origin': 1, 'origin_visit': 1, 'person': 1, 'release': 0, 'revision': 1, 'skipped_content': 0, 'snapshot': 1, } == stats origin_visit = next(loader.storage.origin_visit_get(url)) assert origin_visit['status'] == 'full' + + expected_branches = { + 'HEAD': { + 'target': '9471c606239bccb1f269564c9ea114e1eeab9eb4', + 'target_type': 'revision', + }, + } + + expected_snapshot = { + 'id': '453f455d0efb69586143cd6b6e5897f9906b53a7', + 'branches': expected_branches, + } + check_snapshot(expected_snapshot, storage=loader.storage)