diff --git a/swh/deposit/tests/cli/test_client.py b/swh/deposit/tests/cli/test_client.py --- a/swh/deposit/tests/cli/test_client.py +++ b/swh/deposit/tests/cli/test_client.py @@ -4,6 +4,7 @@ # See top-level LICENSE file for more information import contextlib +import json import logging import os from unittest.mock import MagicMock @@ -42,19 +43,6 @@ return generate_slug() -@pytest.fixture -def client_mock(mocker, slug): - """A successful deposit client with hard-coded default values - - """ - mocker.patch("swh.deposit.cli.client.generate_slug", return_value=slug) - mock_client = MagicMock() - mocker.patch("swh.deposit.cli.client._client", return_value=mock_client) - mock_client.service_document.return_value = EXAMPLE_SERVICE_DOCUMENT - mock_client.deposit_create.return_value = '{"foo": "bar"}' - return mock_client - - @pytest.fixture def client_mock_api_down(mocker, slug): """A mock client whose connection with api fails due to maintenance issue @@ -383,17 +371,11 @@ assert actual_metadata["codemeta:identifier"] is not None -def test_multisteps_deposit( - sample_archive, atom_dataset, mocker, caplog, datadir, client_mock, slug -): - """ from: +def test_multisteps_deposit(sample_archive, datadir, slug, requests_mock_datadir): + """ First deposit a partial deposit (no metadata, only archive), then update the metadata part. https://docs.softwareheritage.org/devel/swh-deposit/getting-started.html#multisteps-deposit """ # noqa - slug = generate_slug() - mocker.patch("swh.deposit.cli.client.generate_slug", return_value=slug) - - # https://docs.softwareheritage.org/devel/swh-deposit/getting-started.html#create-an-incomplete-deposit - client_mock.deposit_create.return_value = '{"deposit_id": "42"}' + api_url = "https://deposit.test.metadata/1" runner = CliRunner() result = runner.invoke( @@ -401,7 +383,7 @@ [ "upload", "--url", - "mock://deposit.swh/1", + api_url, "--username", TEST_USER["username"], "--password", @@ -409,60 +391,52 @@ "--archive", sample_archive["path"], "--partial", + "--slug", + slug, + "--format", + "json", ], ) - assert result.exit_code == 0, result.output - assert result.output == "" - assert caplog.record_tuples == [ - ("swh.deposit.cli.client", logging.INFO, '{"deposit_id": "42"}'), - ] - - client_mock.deposit_create.assert_called_once_with( - archive=sample_archive["path"], - collection="softcol", - in_progress=True, - metadata=None, - slug=slug, - ) - - # Clear mocking state - caplog.clear() - client_mock.reset_mock() + assert result.exit_code == 0, f"unexpected output: {result.output}" + actual_deposit = json.loads(result.output) + assert actual_deposit == { + "deposit_id": "666", + "deposit_status": "partial", + "deposit_status_detail": None, + "deposit_date": "Oct. 8, 2020, 4:57 p.m.", + } # https://docs.softwareheritage.org/devel/swh-deposit/getting-started.html#add-content-or-metadata-to-the-deposit - metadata_path = os.path.join(datadir, "atom", "entry-data-deposit-binary.xml") + # Update deposit with metadata result = runner.invoke( cli, [ "upload", "--url", - "mock://deposit.swh/1", + api_url, "--username", TEST_USER["username"], "--password", TEST_USER["password"], "--metadata", metadata_path, + "--deposit-id", + 666, + "--slug", + slug, + "--format", + "json", ], ) - assert result.exit_code == 0, result.output - assert result.output == "" - assert caplog.record_tuples == [ - ("swh.deposit.cli.client", logging.INFO, '{"deposit_id": "42"}'), - ] - - client_mock.deposit_create.assert_called_once_with( - archive=None, - collection="softcol", - in_progress=False, - metadata=metadata_path, - slug=slug, - ) - - # Clear mocking state - caplog.clear() - client_mock.reset_mock() + assert result.exit_code == 0, f"unexpected output: {result.output}" + assert result.output is not None + actual_deposit = json.loads(result.output) + # deposit update scenario actually returns a deposit status dict + assert actual_deposit["deposit_id"] == "666" + # FIXME: should be "deposited" but current limitation in the + # requests_mock_datadir_visits use, cannot find a way to make it work right now + assert actual_deposit["deposit_status"] == "partial" diff --git a/swh/deposit/tests/data/https_deposit.test.metadata/1_servicedocument b/swh/deposit/tests/data/https_deposit.test.metadata/1_servicedocument new file mode 100644 --- /dev/null +++ b/swh/deposit/tests/data/https_deposit.test.metadata/1_servicedocument @@ -0,0 +1,26 @@ + + + + 2.0 + 209715200 + + + The Software Heritage (SWH) Archive + + test Software Collection + application/zip + application/x-tar + Collection Policy + Software Heritage Archive + Collect, Preserve, Share + false + false + http://purl.org/net/sword/package/SimpleZip + https://deposit.test.metadata/1/test/ + test + + + diff --git a/swh/deposit/tests/data/https_deposit.test.metadata/1_test b/swh/deposit/tests/data/https_deposit.test.metadata/1_test new file mode 100644 --- /dev/null +++ b/swh/deposit/tests/data/https_deposit.test.metadata/1_test @@ -0,0 +1,19 @@ + + 666 + Oct. 8, 2020, 4:57 p.m. + hardcoded_sample_archive_path + partial + + + + + + + + + + + http://purl.org/net/sword/package/SimpleZip + diff --git a/swh/deposit/tests/data/https_deposit.test.metadata/1_test_666_metadata b/swh/deposit/tests/data/https_deposit.test.metadata/1_test_666_metadata new file mode 100644 --- /dev/null +++ b/swh/deposit/tests/data/https_deposit.test.metadata/1_test_666_metadata @@ -0,0 +1,19 @@ + + 666 + Oct. 9, 2020, 8:44 p.m. + something + deposited + + + + + + + + + + + http://purl.org/net/sword/package/SimpleZip + diff --git a/swh/deposit/tests/data/https_deposit.test.metadata/1_test_666_status b/swh/deposit/tests/data/https_deposit.test.metadata/1_test_666_status new file mode 100644 --- /dev/null +++ b/swh/deposit/tests/data/https_deposit.test.metadata/1_test_666_status @@ -0,0 +1,8 @@ + + 666 + partial + Deposit is partially received. To finalize it, In-Progress header should be false + external-id +