diff --git a/swh/loader/package/deposit/loader.py b/swh/loader/package/deposit/loader.py --- a/swh/loader/package/deposit/loader.py +++ b/swh/loader/package/deposit/loader.py @@ -171,6 +171,7 @@ status="done", revision_id=hash_to_hex(rev_id), directory_id=hash_to_hex(dir_id), + snapshot_id=r["snapshot_id"], origin_url=self.url, ) except Exception: @@ -246,6 +247,7 @@ status: str, revision_id: Optional[str] = None, directory_id: Optional[str] = None, + snapshot_id: Optional[str] = None, origin_url: Optional[str] = None, ): """Update deposit's information including status, and persistent @@ -258,6 +260,8 @@ payload["revision_id"] = revision_id if directory_id: payload["directory_id"] = directory_id + if snapshot_id: + payload["snapshot_id"] = snapshot_id if origin_url: payload["origin_url"] = origin_url diff --git a/swh/loader/package/deposit/tests/test_deposit.py b/swh/loader/package/deposit/tests/test_deposit.py --- a/swh/loader/package/deposit/tests/test_deposit.py +++ b/swh/loader/package/deposit/tests/test_deposit.py @@ -7,7 +7,7 @@ import pytest -from swh.model.hashutil import hash_to_bytes +from swh.model.hashutil import hash_to_bytes, hash_to_hex from swh.loader.package.deposit.loader import DepositLoader from swh.loader.package.tests.common import ( @@ -19,6 +19,9 @@ from swh.core.pytest_plugin import requests_mock_datadir_factory +DEPOSIT_URL = "https://deposit.softwareheritage.org/1/private" + + @pytest.fixture def requests_mock_datadir(requests_mock_datadir): """Enhance default mock data to mock put requests as the loader does some @@ -68,7 +71,7 @@ requests_mock_datadir_missing_one = requests_mock_datadir_factory( - ignore_urls=["https://deposit.softwareheritage.org/1/private/666/raw/",] + ignore_urls=[f"{DEPOSIT_URL}/666/raw/",] ) @@ -167,11 +170,9 @@ assert origin_visit["status"] == "full" assert origin_visit["type"] == "deposit" + revision_id = "637318680351f5d78856d13264faebbd91efe9bb" expected_branches = { - "HEAD": { - "target": "637318680351f5d78856d13264faebbd91efe9bb", - "target_type": "revision", - }, + "HEAD": {"target": revision_id, "target_type": "revision",}, } expected_snapshot = { @@ -180,6 +181,9 @@ } check_snapshot(expected_snapshot, storage=loader.storage) + revision = next(loader.storage.revision_get([hash_to_bytes(revision_id)])) + assert revision + # check metadata tool = { @@ -215,6 +219,27 @@ assert metadata0["provider_type"] == "deposit_client" assert metadata0["tool_id"] == tool["id"] + # Retrieve the information for deposit status update query to the deposit + urls = [ + m + for m in requests_mock_datadir.request_history + if m.url == f"{DEPOSIT_URL}/{deposit_id}/update/" + ] + + assert len(urls) == 1 + update_query = urls[0] + + body = update_query.json() + expected_body = { + "status": "done", + "revision_id": revision_id, + "directory_id": hash_to_hex(revision["directory"]), + "snapshot_id": expected_snapshot_id, + "origin_url": url, + } + + assert body == expected_body + def test_deposit_loading_ok_2(swh_config, requests_mock_datadir): """Field dates should be se appropriately @@ -257,7 +282,7 @@ assert revision["date"] == raw_meta["deposit"]["author_date"] assert revision["committer_date"] == raw_meta["deposit"]["committer_date"] - read_api = f"https://deposit.softwareheritage.org/1/private/{deposit_id}/meta/" + read_api = f"{DEPOSIT_URL}/{deposit_id}/meta/" assert revision["metadata"] == { "extrinsic": { @@ -327,3 +352,24 @@ "provider_url": "https://hal-test.archives-ouvertes.fr/", "tool_id": 1, } + + # Retrieve the information for deposit status update query to the deposit + urls = [ + m + for m in requests_mock_datadir.request_history + if m.url == f"{DEPOSIT_URL}/{deposit_id}/update/" + ] + + assert len(urls) == 1 + update_query = urls[0] + + body = update_query.json() + expected_body = { + "status": "done", + "revision_id": revision_id, + "directory_id": hash_to_hex(revision["directory"]), + "snapshot_id": expected_snapshot_id, + "origin_url": url, + } + + assert body == expected_body