Added validation on collection serializers
This commit is contained in:
parent
33972f1f40
commit
4320fc77b2
|
@ -21,6 +21,7 @@ AP_CONTEXT = [
|
|||
{},
|
||||
]
|
||||
|
||||
|
||||
class ActorSerializer(serializers.ModelSerializer):
|
||||
# left maps to activitypub fields, right to our internal models
|
||||
id = serializers.URLField(source='url')
|
||||
|
@ -206,6 +207,11 @@ OBJECT_SERIALIZERS = {
|
|||
|
||||
|
||||
class PaginatedCollectionSerializer(serializers.Serializer):
|
||||
type = serializers.ChoiceField(choices=['Collection'])
|
||||
totalItems = serializers.IntegerField(min_value=0)
|
||||
items = serializers.ListField()
|
||||
actor = serializers.URLField()
|
||||
id = serializers.URLField()
|
||||
|
||||
def to_representation(self, conf):
|
||||
paginator = Paginator(
|
||||
|
@ -230,6 +236,14 @@ class PaginatedCollectionSerializer(serializers.Serializer):
|
|||
|
||||
|
||||
class CollectionPageSerializer(serializers.Serializer):
|
||||
type = serializers.ChoiceField(choices=['CollectionPage'])
|
||||
totalItems = serializers.IntegerField(min_value=0)
|
||||
items = serializers.ListField()
|
||||
actor = serializers.URLField()
|
||||
id = serializers.URLField()
|
||||
prev = serializers.URLField(required=False)
|
||||
next = serializers.URLField(required=False)
|
||||
partOf = serializers.URLField()
|
||||
|
||||
def to_representation(self, conf):
|
||||
page = conf['page']
|
||||
|
|
|
@ -34,7 +34,7 @@ def test_actor_serializer_from_ap(db):
|
|||
}
|
||||
|
||||
serializer = serializers.ActorSerializer(data=payload)
|
||||
assert serializer.is_valid()
|
||||
assert serializer.is_valid(raise_exception=True)
|
||||
|
||||
actor = serializer.build()
|
||||
|
||||
|
@ -65,7 +65,7 @@ def test_actor_serializer_only_mandatory_field_from_ap(db):
|
|||
}
|
||||
|
||||
serializer = serializers.ActorSerializer(data=payload)
|
||||
assert serializer.is_valid()
|
||||
assert serializer.is_valid(raise_exception=True)
|
||||
|
||||
actor = serializer.build()
|
||||
|
||||
|
@ -201,6 +201,53 @@ def test_paginated_collection_serializer(factories):
|
|||
assert serializer.data == expected
|
||||
|
||||
|
||||
def test_paginated_collection_serializer_validation():
|
||||
data = {
|
||||
'type': 'Collection',
|
||||
'id': 'https://test.federation/test',
|
||||
'totalItems': 5,
|
||||
'actor': 'http://test.actor',
|
||||
'items': []
|
||||
}
|
||||
|
||||
serializer = serializers.PaginatedCollectionSerializer(
|
||||
data=data
|
||||
)
|
||||
|
||||
assert serializer.is_valid(raise_exception=True) is True
|
||||
assert serializer.validated_data['totalItems'] == 5
|
||||
assert serializer.validated_data['id'] == data['id']
|
||||
assert serializer.validated_data['actor'] == data['actor']
|
||||
assert serializer.validated_data['items'] == []
|
||||
|
||||
|
||||
def test_collection_page_serializer_validdation():
|
||||
base = 'https://test.federation/test'
|
||||
data = {
|
||||
'type': 'CollectionPage',
|
||||
'id': base + '?page=2',
|
||||
'totalItems': 5,
|
||||
'actor': 'https://test.actor',
|
||||
'items': [],
|
||||
'prev': base + '?page=1',
|
||||
'next': base + '?page=3',
|
||||
'partOf': base,
|
||||
}
|
||||
|
||||
serializer = serializers.CollectionPageSerializer(
|
||||
data=data
|
||||
)
|
||||
|
||||
assert serializer.is_valid(raise_exception=True) is True
|
||||
assert serializer.validated_data['totalItems'] == 5
|
||||
assert serializer.validated_data['id'] == data['id']
|
||||
assert serializer.validated_data['actor'] == data['actor']
|
||||
assert serializer.validated_data['items'] == []
|
||||
assert serializer.validated_data['prev'] == data['prev']
|
||||
assert serializer.validated_data['next'] == data['next']
|
||||
assert serializer.validated_data['partOf'] == data['partOf']
|
||||
|
||||
|
||||
def test_collection_page_serializer(factories):
|
||||
tfs = factories['music.TrackFile'].create_batch(size=5)
|
||||
actor = factories['federation.Actor'](local=True)
|
||||
|
|
|
@ -116,6 +116,7 @@ def test_audio_file_list_actor_page(
|
|||
assert response.status_code == 200
|
||||
assert response.data == expected
|
||||
|
||||
|
||||
def test_audio_file_list_actor_page_exclude_federated_files(
|
||||
db, settings, api_client, factories):
|
||||
settings.FEDERATION_MUSIC_NEEDS_APPROVAL = False
|
||||
|
|
Loading…
Reference in New Issue