Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7124027
D4048.id14322.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
D4048.id14322.diff
View Options
diff --git a/swh/deposit/api/deposit_update.py b/swh/deposit/api/deposit_update.py
--- a/swh/deposit/api/deposit_update.py
+++ b/swh/deposit/api/deposit_update.py
@@ -109,13 +109,13 @@
"""Replace existing deposit's metadata/archive with new ones.
source:
- - http://swordapp.github.io/SWORDv2-Profile/SWORDProfile.html#protocoloperations_editingcontent_metadata # noqa
- - http://swordapp.github.io/SWORDv2-Profile/SWORDProfile.html#protocoloperations_editingcontent_multipart # noqa
+ - http://swordapp.github.io/SWORDv2-Profile/SWORDProfile.html#protocoloperations_editingcontent_metadata
+ - http://swordapp.github.io/SWORDv2-Profile/SWORDProfile.html#protocoloperations_editingcontent_multipart
Returns:
204 No content
- """
+ """ # noqa
if req.content_type.startswith("multipart/"):
return self._multipart_upload(
req,
diff --git a/swh/deposit/tests/api/test_deposit_update.py b/swh/deposit/tests/api/test_deposit_update.py
--- a/swh/deposit/tests/api/test_deposit_update.py
+++ b/swh/deposit/tests/api/test_deposit_update.py
@@ -3,6 +3,9 @@
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
+from io import BytesIO
+
+from django.core.files.uploadedfile import InMemoryUploadedFile
from django.urls import reverse
from rest_framework import status
@@ -392,3 +395,71 @@
+ "application/zip, application/x-tar"
)
assert msg == response_content["sword:error"]["summary"]
+
+
+def test_put_update_metadata_and_archive_deposit_partial_nominal(
+ tmp_path,
+ authenticated_client,
+ partial_deposit_with_metadata,
+ deposit_collection,
+ atom_dataset,
+ sample_archive,
+):
+ """Scenario: Replace metadata and archive(s) with new ones should be ok
+
+ Response: 204
+
+ """
+ # given
+ deposit = partial_deposit_with_metadata
+ raw_metadata0 = atom_dataset["entry-data0"] % deposit.external_id.encode("utf-8")
+
+ requests_meta = DepositRequest.objects.filter(deposit=deposit, type="metadata")
+ assert len(requests_meta) == 1
+ request_meta0 = requests_meta[0]
+ assert request_meta0.raw_metadata == raw_metadata0
+
+ requests_archive0 = DepositRequest.objects.filter(deposit=deposit, type="archive")
+ assert len(requests_archive0) == 1
+
+ archive = InMemoryUploadedFile(
+ BytesIO(sample_archive["data"]),
+ field_name=sample_archive["name"],
+ name=sample_archive["name"],
+ content_type="application/x-tar",
+ size=sample_archive["length"],
+ charset=None,
+ )
+
+ data_atom_entry = atom_dataset["entry-data1"]
+ atom_entry = InMemoryUploadedFile(
+ BytesIO(data_atom_entry.encode("utf-8")),
+ field_name="atom0",
+ name="atom0",
+ content_type='application/atom+xml; charset="utf-8"',
+ size=len(data_atom_entry),
+ charset="utf-8",
+ )
+
+ update_uri = reverse(EDIT_SE_IRI, args=[deposit_collection.name, deposit.id])
+ response = authenticated_client.put(
+ update_uri,
+ format="multipart",
+ data={"archive": archive, "atom_entry": atom_entry,},
+ )
+
+ assert response.status_code == status.HTTP_204_NO_CONTENT
+
+ # check we updated the metadata part
+ requests_meta = DepositRequest.objects.filter(deposit=deposit, type="metadata")
+ assert len(requests_meta) == 1
+ request_meta1 = requests_meta[0]
+ raw_metadata1 = request_meta1.raw_metadata
+ assert raw_metadata1 == data_atom_entry
+ assert raw_metadata0 != raw_metadata1
+ assert request_meta0 != request_meta1
+
+ # and the archive part
+ requests_archive1 = DepositRequest.objects.filter(deposit=deposit, type="archive")
+ assert len(requests_archive1) == 1
+ assert set(requests_archive0) != set(requests_archive1)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Dec 20 2024, 9:49 AM (11 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3229059
Attached To
D4048: test: Update missing scenario on update metadata with multipart (put)
Event Timeline
Log In to Comment