change url routing to /sessions/pk/tracks
This commit is contained in:
parent
8bc1452464
commit
06877d8bdf
|
@ -4,7 +4,7 @@ from . import views
|
||||||
|
|
||||||
router = routers.OptionalSlashRouter()
|
router = routers.OptionalSlashRouter()
|
||||||
|
|
||||||
router.register(r"sessions", views.V2_RadioSessionViewSet, "tracks")
|
router.register(r"sessions", views.V2_RadioSessionViewSet, "sessions")
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = router.urls
|
urlpatterns = router.urls
|
||||||
|
|
|
@ -165,17 +165,19 @@ class V1_RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewS
|
||||||
return super().get_serializer_class(*args, **kwargs)
|
return super().get_serializer_class(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class V2_RadioSessionViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
class V2_RadioSessionViewSet(
|
||||||
|
mixins.CreateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
|
||||||
|
):
|
||||||
"""Returns a list of RadioSessions"""
|
"""Returns a list of RadioSessions"""
|
||||||
|
|
||||||
serializer_class = serializers.RadioSessionSerializer
|
serializer_class = serializers.RadioSessionSerializer
|
||||||
queryset = models.RadioSession.objects.all()
|
queryset = models.RadioSession.objects.all()
|
||||||
permission_classes = []
|
permission_classes = []
|
||||||
|
|
||||||
@action(detail=True, serializer_class=serializers.RadioSessionTrackSerializer)
|
@action(detail=True, serializer_class=serializers.RadioSessionTrackSerializerCreate)
|
||||||
def tracks(self, request, *args, **kwargs):
|
def tracks(self, request, pk, *args, **kwargs):
|
||||||
"""Returns tracks for the given radio session"""
|
data = request.query_params
|
||||||
serializer = self.get_serializer(data=request.query_params)
|
serializer = serializers.RadioSessionTrackSerializerCreate(data=data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
session = serializer.validated_data["session"]
|
session = serializer.validated_data["session"]
|
||||||
|
|
||||||
|
@ -210,9 +212,8 @@ class V2_RadioSessionViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
||||||
cache.get(f"radiosessiontracks{session.id}")
|
cache.get(f"radiosessiontracks{session.id}")
|
||||||
)
|
)
|
||||||
batch = evaluated_radio_tracks[:count]
|
batch = evaluated_radio_tracks[:count]
|
||||||
serializer = self.serializer_class(
|
serializer = serializers.RadioSessionTrackSerializer(
|
||||||
data=batch,
|
data=batch,
|
||||||
context=self.get_serializer_context(),
|
|
||||||
many="true",
|
many="true",
|
||||||
)
|
)
|
||||||
serializer.is_valid()
|
serializer.is_valid()
|
||||||
|
@ -227,8 +228,3 @@ class V2_RadioSessionViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
|
||||||
serializer.data,
|
serializer.data,
|
||||||
status=status.HTTP_201_CREATED,
|
status=status.HTTP_201_CREATED,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_serializer_class(self, *args, **kwargs):
|
|
||||||
if self.action == "list":
|
|
||||||
return serializers.RadioSessionTrackSerializerCreate
|
|
||||||
return super().get_serializer_class(*args, **kwargs)
|
|
||||||
|
|
|
@ -150,6 +150,21 @@ def test_can_use_radio_session_to_filter_choices(factories):
|
||||||
assert len(set(tracks_id)) == 10
|
assert len(set(tracks_id)) == 10
|
||||||
|
|
||||||
|
|
||||||
|
def test_can_use_radio_session_to_filter_choices_v2(factories):
|
||||||
|
factories["music.Upload"].create_batch(10)
|
||||||
|
user = factories["users.User"]()
|
||||||
|
radio = radios.RandomRadio()
|
||||||
|
session = radio.start_session(user)
|
||||||
|
|
||||||
|
radio.pick_many_v2(quantity=10, filter_playable=False)
|
||||||
|
|
||||||
|
# ensure 10 different tracks have been suggested
|
||||||
|
tracks_id = [
|
||||||
|
session_track.track.pk for session_track in session.session_tracks.all()
|
||||||
|
]
|
||||||
|
assert len(set(tracks_id)) == 10
|
||||||
|
|
||||||
|
|
||||||
def test_can_restore_radio_from_previous_session(factories):
|
def test_can_restore_radio_from_previous_session(factories):
|
||||||
user = factories["users.User"]()
|
user = factories["users.User"]()
|
||||||
radio = radios.RandomRadio()
|
radio = radios.RandomRadio()
|
||||||
|
@ -202,7 +217,7 @@ def test_can_get_track_for_session_from_api_v2(factories, logged_in_api_client):
|
||||||
response = logged_in_api_client.post(url, {"radio_type": "random"})
|
response = logged_in_api_client.post(url, {"radio_type": "random"})
|
||||||
session = models.RadioSession.objects.latest("id")
|
session = models.RadioSession.objects.latest("id")
|
||||||
|
|
||||||
url = reverse("api:v2:radios:tracks-list")
|
url = reverse("api:v2:radios:sessions-tracks", kwargs={"pk": session.pk})
|
||||||
response = logged_in_api_client.get(url, {"session": session.pk})
|
response = logged_in_api_client.get(url, {"session": session.pk})
|
||||||
data = json.loads(response.content.decode("utf-8"))
|
data = json.loads(response.content.decode("utf-8"))
|
||||||
|
|
||||||
|
@ -465,7 +480,7 @@ def test_session_radio_excludes_previous_picks_v2(factories, logged_in_api_clien
|
||||||
url = reverse("api:v1:radios:sessions-list")
|
url = reverse("api:v1:radios:sessions-list")
|
||||||
response = logged_in_api_client.post(url, {"radio_type": "random"})
|
response = logged_in_api_client.post(url, {"radio_type": "random"})
|
||||||
session = models.RadioSession.objects.latest("id")
|
session = models.RadioSession.objects.latest("id")
|
||||||
url = reverse("api:v2:radios:tracks-list")
|
url = reverse("api:v2:radios:sessions-tracks", kwargs={"pk": session.pk})
|
||||||
|
|
||||||
previous_choices = []
|
previous_choices = []
|
||||||
|
|
||||||
|
@ -541,7 +556,7 @@ def test_regenerate_cache_if_not_enought_tracks_in_it(
|
||||||
url = reverse("api:v1:radios:sessions-list")
|
url = reverse("api:v1:radios:sessions-list")
|
||||||
response = logged_in_api_client.post(url, {"radio_type": "random"})
|
response = logged_in_api_client.post(url, {"radio_type": "random"})
|
||||||
session = models.RadioSession.objects.latest("id")
|
session = models.RadioSession.objects.latest("id")
|
||||||
url = reverse("api:v2:radios:tracks-list")
|
url = reverse("api:v2:radios:sessions-tracks", kwargs={"pk": session.pk})
|
||||||
logged_in_api_client.get(
|
logged_in_api_client.get(
|
||||||
url, {"session": session.pk, "count": 9, "filter_playable": False}
|
url, {"session": session.pk, "count": 9, "filter_playable": False}
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue