tmp_path = '/tmp/pytest-of-jenkins/pytest-0/test_put_update_metadata_done_0'
authenticated_client = <rest_framework.test.APIClient object at 0x7f8ef3b2e2e8>
complete_deposit = <Deposit: {'id': 85, 'reception_date': datetime.datetime(2020, 11, 16, 17, 8, 47, 166995, tzinfo=<UTC>), 'collection': 'test', 'external_id': 'external-id-complete', 'client': 'test', 'status': 'done'}>
deposit_collection = <DepositCollection: {'id': 102, 'name': 'test'}>
atom_dataset = {'codemeta-sample': '<?xml version="1.0"?>\n <entry xmlns="http://www.w3.org/2005/Atom"\n xmlns:d...ntry>\n', 'entry-data-empty-body': '<?xml version="1.0"?>\n<entry xmlns="http://www.w3.org/2005/Atom"></entry>\n', ...}
sample_data = <swh.storage.tests.storage_data.StorageData object at 0x7f8ef32f7470>
swh_storage = <swh.storage.postgresql.storage.Storage object at 0x7f8ef3318f28>
def test_put_update_metadata_done_deposit_nominal(
tmp_path,
authenticated_client,
complete_deposit,
deposit_collection,
atom_dataset,
sample_data,
swh_storage,
):
"""Nominal scenario, client send an update of metadata on a deposit with status "done"
with an existing swhid. Such swhid has its metadata updated accordingly both in
the deposit backend and in the metadata storage.
Response: 204
"""
deposit_swhid = parse_swhid(complete_deposit.swhid)
assert deposit_swhid.object_type == "directory"
directory_id = hash_to_bytes(deposit_swhid.object_id)
# directory targeted by the complete_deposit does not exist in the storage
assert list(swh_storage.directory_missing([directory_id])) == [directory_id]
# so let's create a directory reference in the storage (current deposit targets an
# unknown swhid)
existing_directory = sample_data.directory
swh_storage.directory_add([existing_directory])
assert list(swh_storage.directory_missing([existing_directory.id])) == []
# and patch one complete deposit swhid so it targets said reference
complete_deposit.swhid = swhid("directory", existing_directory.id)
complete_deposit.save()
actual_existing_requests_archive = DepositRequest.objects.filter(
deposit=complete_deposit, type="archive"
)
nb_archives = len(actual_existing_requests_archive)
actual_existing_requests_metadata = DepositRequest.objects.filter(
deposit=complete_deposit, type="metadata"
)
nb_metadata = len(actual_existing_requests_metadata)
update_uri = reverse(
EDIT_SE_IRI, args=[deposit_collection.name, complete_deposit.id]
)
response = authenticated_client.put(
update_uri,
content_type="application/atom+xml;type=entry",
data=atom_dataset["entry-data1"],
HTTP_X_CHECK_SWHID=complete_deposit.swhid,
)
assert response.status_code == status.HTTP_204_NO_CONTENT
new_requests_meta = DepositRequest.objects.filter(
deposit=complete_deposit, type="metadata"
)
assert len(new_requests_meta) == nb_metadata + 1
request_meta1 = new_requests_meta[0]
raw_metadata1 = request_meta1.raw_metadata
assert raw_metadata1 == atom_dataset["entry-data1"]
# check we did not touch the other parts
requests_archive1 = DepositRequest.objects.filter(
deposit=complete_deposit, type="archive"
)
assert len(requests_archive1) == nb_archives
assert set(actual_existing_requests_archive) == set(requests_archive1)
# Ensure metadata stored in the metadata storage is consistent
metadata_authority = MetadataAuthority(
type=MetadataAuthorityType.DEPOSIT_CLIENT,
url=complete_deposit.client.provider_url,
metadata={"name": complete_deposit.client.last_name},
)
actual_authority = swh_storage.metadata_authority_get(
MetadataAuthorityType.DEPOSIT_CLIENT, url=complete_deposit.client.provider_url
)
assert actual_authority == metadata_authority
config = APIConfig()
metadata_fetcher = MetadataFetcher(
name=config.tool["name"],
version=config.tool["version"],
metadata=config.tool["configuration"],
)
actual_fetcher = swh_storage.metadata_fetcher_get(
config.tool["name"], config.tool["version"]
)
assert actual_fetcher == metadata_fetcher
directory_swhid = parse_swhid(complete_deposit.swhid)
page_results = swh_storage.raw_extrinsic_metadata_get(
MetadataTargetType.DIRECTORY, directory_swhid, metadata_authority
)
> assert page_results == PagedResult(
results=[
RawExtrinsicMetadata(
type=MetadataTargetType.DIRECTORY,
target=directory_swhid,
discovery_date=request_meta1.date,
authority=attr.evolve(metadata_authority, metadata=None),
fetcher=attr.evolve(metadata_fetcher, metadata=None),
format="sword-v2-atom-codemeta",
metadata=raw_metadata1.encode(),
origin=complete_deposit.origin_url,
)
],
next_page_token=None,
)
E AssertionError: assert PagedResult(r...ge_token=None) == PagedResult(r...ge_token=None)
E
E Omitting 1 identical items, use -vv to show
E Differing attributes:
E ['results']
E
E Drill down into differing attribute results:
E results: [RawExtrinsicMetadata(type=<MetadataTargetType.DIRECTORY: 'directory'>, target=SWHID(namespace='swh', scheme_version=1, object_type='directory', object_id='5256e856a0a0898966d6ba14feb4388b8b82d302', metadata=ImmutableDict({})), discovery_date=datetime.datetime(2020, 11, 16, 17, 8, 47, 262673, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)), authority=MetadataAuthority(type=<MetadataAuthorityType.DEPOSIT_CLIENT: 'deposit_client'>,...
E
E ...Full output truncated (7 lines hidden), use '-vv' to show
.tox/py3/lib/python3.7/site-packages/swh/deposit/tests/api/test_deposit_update.py:670: AssertionError
TEST RESULT
TEST RESULT
- Run At
- Nov 16 2020, 6:09 PM