Detail library view with settings update

This commit is contained in:
Eliot Berriot 2018-04-11 21:58:41 +02:00
commit 472cc7e26a
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
7 changed files with 228 additions and 11 deletions

View file

@ -112,6 +112,8 @@ class APIActorSerializer(serializers.ModelSerializer):
'manually_approves_followers',
]
class LibraryActorSerializer(ActorSerializer):
url = serializers.ListField(
child=serializers.JSONField())
@ -137,33 +139,52 @@ class LibraryActorSerializer(ActorSerializer):
return validated_data
class APIFollowSerializer(serializers.ModelSerializer):
class Meta:
model = models.Follow
fields = [
'uuid',
'actor',
'target',
'approved',
'creation_date',
'modification_date',
]
class APILibrarySerializer(serializers.ModelSerializer):
actor = APIActorSerializer
actor = APIActorSerializer()
follow = APIFollowSerializer()
class Meta:
model = models.Library
fields = [
read_only_fields = [
'actor',
'autoimport',
'federation_enabled',
'download_files',
'tracks_count',
'url',
'uuid',
'creation_date',
'url',
'tracks_count',
'follow',
'fetched_date',
'modification_date',
'creation_date',
]
fields = [
'autoimport',
'federation_enabled',
'download_files',
] + read_only_fields
class APILibraryCreateSerializer(serializers.ModelSerializer):
actor = serializers.URLField()
federation_enabled = serializers.BooleanField()
uuid = serializers.UUIDField(read_only=True)
class Meta:
model = models.Library
fields = [
'uuid',
'actor',
'autoimport',
'federation_enabled',

View file

@ -166,6 +166,8 @@ class MusicFilesViewSet(FederationMixin, viewsets.GenericViewSet):
class LibraryViewSet(
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
permission_classes = [rest_permissions.DjangoModelPermissions]
@ -173,6 +175,7 @@ class LibraryViewSet(
'actor',
'follow',
)
lookup_field = 'uuid'
filter_class = filters.LibraryFilter
serializer_class = serializers.APILibrarySerializer
ordering_fields = (

View file

@ -275,3 +275,34 @@ def test_can_list_libraries(factories, superuser_api_client):
serializers.APILibrarySerializer(library1).data,
serializers.APILibrarySerializer(library2).data,
]
def test_can_detail_library(factories, superuser_api_client):
library = factories['federation.Library']()
url = reverse(
'api:v1:federation:libraries-detail',
kwargs={'uuid': str(library.uuid)})
response = superuser_api_client.get(url)
assert response.status_code == 200
assert response.data == serializers.APILibrarySerializer(library).data
def test_can_patch_library(factories, superuser_api_client):
library = factories['federation.Library']()
data = {
'federation_enabled': not library.federation_enabled,
'download_files': not library.download_files,
'autoimport': not library.autoimport,
}
url = reverse(
'api:v1:federation:libraries-detail',
kwargs={'uuid': str(library.uuid)})
response = superuser_api_client.patch(url, data)
assert response.status_code == 200
library.refresh_from_db()
for k, v in data.items():
assert getattr(library, k) == v