Skip to content

Commit a76c67b

Browse files
committed
Add tests to test updating a DataSet
1 parent e9f80e7 commit a76c67b

2 files changed

Lines changed: 64 additions & 5 deletions

File tree

sasdata/fair_database/data/serializers.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66

77
# TODO: more custom validation, particularly for specific nested dictionary structures
8+
# TODO: custom update methods for nested structures
89

910

1011
class DataFileSerializer(serializers.ModelSerializer):
@@ -333,7 +334,7 @@ def validate(self, data):
333334
and not data["is_public"]
334335
):
335336
raise serializers.ValidationError("private data must have an owner")
336-
if "current_user" in data and data["current_user"] is None:
337+
if "current_user" in data and data["current_user"] == "":
337338
if "is_public" in data:
338339
if not "is_public":
339340
raise serializers.ValidationError("private data must have an owner")
@@ -364,7 +365,6 @@ def create(self, validated_data):
364365
return dataset
365366

366367
# TODO: account for updating other attributes
367-
# TODO: account for metadata potentially being null
368368
# Update a DataSet instance
369369
def update(self, instance, validated_data):
370370
if "metadata" in validated_data:
@@ -379,8 +379,6 @@ def update(self, instance, validated_data):
379379
instance.save()
380380
return instance
381381

382-
# TODO: custom method for database to serializer representation
383-
384382

385383
class PublishedStateSerializer(serializers.ModelSerializer):
386384
"""Serialization, deserialization, and validation for the PublishedState model."""
@@ -419,7 +417,7 @@ def validate(self, data):
419417
and not data["is_public"]
420418
):
421419
raise serializers.ValidationError("private sessions must have an owner")
422-
if "current_user" in data and data["current_user"] is None:
420+
if "current_user" in data and data["current_user"] == "":
423421
if "is_public" in data:
424422
if not "is_public":
425423
raise serializers.ValidationError(

sasdata/fair_database/data/test/test_dataset.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,67 @@ def test_update_unowned_dataset(self):
478478
self.assertEqual(request1.status_code, status.HTTP_403_FORBIDDEN)
479479
self.assertEqual(request2.status_code, status.HTTP_401_UNAUTHORIZED)
480480

481+
# Test updating metadata
482+
def test_update_dataset_metadata(self):
483+
new_metadata = {
484+
"title": "Updated Metadata",
485+
"run": ["X"],
486+
"definition": "update test",
487+
"instrument": "none",
488+
"process": "none",
489+
"sample": "none",
490+
}
491+
request = self.auth_client1.put(
492+
"/v1/data/set/1/", data={"metadata": new_metadata}, format="json"
493+
)
494+
dataset = DataSet.objects.get(id=1)
495+
self.assertEqual(request.status_code, status.HTTP_200_OK)
496+
self.assertEqual(dataset.metadata.title, "Updated Metadata")
497+
self.assertEqual(dataset.metadata.id, 1)
498+
self.assertEqual(len(MetaData.objects.all()), 1)
499+
dataset.metadata.delete()
500+
self.metadata = MetaData.objects.create(
501+
id=1,
502+
title="Metadata",
503+
run=0,
504+
definition="test",
505+
instrument="none",
506+
process="none",
507+
sample="none",
508+
dataset=self.public_dataset,
509+
)
510+
511+
# Test partially updating metadata
512+
def test_update_dataset_partial_metadata(self):
513+
request = self.auth_client1.put(
514+
"/v1/data/set/1/",
515+
data={"metadata": {"title": "Different Title"}},
516+
format="json",
517+
)
518+
dataset = DataSet.objects.get(id=1)
519+
metadata = dataset.metadata
520+
self.assertEqual(request.status_code, status.HTTP_200_OK)
521+
self.assertEqual(metadata.title, "Different Title")
522+
self.assertEqual(metadata.definition, "test")
523+
self.assertEqual(metadata.id, 1)
524+
metadata.title = "Metadata"
525+
metadata.save()
526+
527+
# Test that a dataset cannot be updated to be private and unowned
528+
def test_update_dataset_no_private_unowned(self):
529+
request1 = self.auth_client1.put("/v1/data/set/2/", data={"current_user": ""})
530+
request2 = self.auth_client1.put(
531+
"/v1/data/set/1/", data={"current_user": "", "is_public": False}
532+
)
533+
public_dataset = DataSet.objects.get(id=1)
534+
self.assertEqual(request1.status_code, status.HTTP_200_OK)
535+
self.assertEqual(request2.status_code, status.HTTP_200_OK)
536+
self.assertEqual(DataSet.objects.get(id=2).current_user, self.user1)
537+
self.assertEqual(public_dataset.current_user, self.user1)
538+
self.assertFalse(public_dataset.is_public)
539+
public_dataset.is_public = True
540+
public_dataset.save()
541+
481542
# Test deleting a dataset
482543
def test_delete_dataset(self):
483544
quantity = Quantity.objects.create(

0 commit comments

Comments
 (0)