Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions dakara_server/dakara_server/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@
library_views.SongView.as_view(),
name="library-song",
),
path(
"api/library/songs/lyrics/<int:pk>/",
library_views.SongLyricsView.as_view(),
name="library-song-lyrics",
),
path(
"api/library/songs/retrieve/",
library_views.SongRetrieveListView.as_view(),
Expand Down
8 changes: 8 additions & 0 deletions dakara_server/library/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,14 @@ def update(self, song, validated_data):
return song


class SongLyricsSerializer(serializers.ModelSerializer):
"""Song lyrics field serializer."""

class Meta:
model = Song
fields = ("id", "lyrics")


class SongForPlayerSerializer(serializers.ModelSerializer):
"""Song serializer.

Expand Down
34 changes: 34 additions & 0 deletions dakara_server/library/tests/test_song.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ def test_get_song_long_lyrics(self):
self.assertEqual(len(response.data["results"]), 2)

# check lyrics
self.assertNotEqual(
response.data["results"][1]["lyrics_preview"]["text"], self.song2.lyrics
)
self.assertDictEqual(
response.data["results"][1]["lyrics_preview"],
{
Expand Down Expand Up @@ -936,3 +939,34 @@ def test_put_song_embedded_work_subtitle(self):
self.assertEqual(Work.objects.count(), 4)
workNew = Work.objects.get(title="Work1", subtitle="", work_type=self.wt1)
self.assertIsNotNone(workNew)


class SongLyricsViewTestCase(LibraryAPITestCase):
def setUp(self):
# create a user without any rights
self.user = self.create_user("TestUser")

# create test data
self.create_test_data()

# add lyrics to one song
self.song2.lyrics = """Mary had a little lamb
Little lamb, little lamb
Mary had a little lamb
Its fleece was white as snow
And everywhere that Mary went
Mary went, Mary."""
self.song2.save()

# Create urls to access these playlist entries
self.url_song2 = reverse("library-song-lyrics", kwargs={"pk": self.song2.id})

def test_get_lyrics(self):
"""Get a song lyrics."""
self.authenticate(self.user)

response = self.client.get(self.url_song2)

self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["id"], self.song2.id)
self.assertEqual(response.data["lyrics"], self.song2.lyrics)
12 changes: 12 additions & 0 deletions dakara_server/library/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from rest_framework.generics import (
ListAPIView,
ListCreateAPIView,
RetrieveAPIView,
RetrieveUpdateDestroyAPIView,
)
from rest_framework.permissions import IsAuthenticated
Expand Down Expand Up @@ -194,6 +195,17 @@ class SongView(RetrieveUpdateDestroyAPIView):
serializer_class = serializers.SongSerializer


class SongLyricsView(RetrieveAPIView):
"""List of songs."""

permission_classes = [
IsAuthenticated,
permissions.IsLibraryManager | internal_permissions.IsReadOnly,
]
queryset = models.Song.objects.all()
serializer_class = serializers.SongLyricsSerializer


class SongRetrieveListView(ListAPIView):
"""List of all songs.

Expand Down