kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
84 wiersze
2.5 KiB
Python
84 wiersze
2.5 KiB
Python
![]() |
from rest_framework import viewsets
|
||
|
|
||
|
from funkwhale_api.music import models as music_models
|
||
|
|
||
|
from funkwhale_api.federation import api_serializers
|
||
|
from funkwhale_api.federation import decorators
|
||
|
from funkwhale_api.federation import models
|
||
|
from funkwhale_api.federation import tasks
|
||
|
|
||
|
|
||
|
class V(viewsets.ModelViewSet):
|
||
|
queryset = music_models.Track.objects.all()
|
||
|
fetches = decorators.fetches_route()
|
||
|
permission_classes = []
|
||
|
|
||
|
|
||
|
def test_fetches_route_create(factories, api_request, mocker):
|
||
|
on_commit = mocker.patch("funkwhale_api.common.utils.on_commit")
|
||
|
user = factories["users.User"]()
|
||
|
actor = user.create_actor()
|
||
|
track = factories["music.Track"]()
|
||
|
view = V.as_view({"post": "fetches"})
|
||
|
|
||
|
request = api_request.post("/", format="json")
|
||
|
setattr(request, "user", user)
|
||
|
setattr(request, "session", {})
|
||
|
response = view(request, pk=track.pk)
|
||
|
|
||
|
assert response.status_code == 201
|
||
|
|
||
|
fetch = models.Fetch.objects.get_for_object(track).latest("id")
|
||
|
on_commit.assert_called_once_with(tasks.fetch.delay, fetch_id=fetch.pk)
|
||
|
|
||
|
assert fetch.url == track.fid
|
||
|
assert fetch.object == track
|
||
|
assert fetch.status == "pending"
|
||
|
assert fetch.actor == actor
|
||
|
|
||
|
expected = api_serializers.FetchSerializer(fetch).data
|
||
|
assert response.data == expected
|
||
|
|
||
|
|
||
|
def test_fetches_route_create_local(factories, api_request, mocker, settings):
|
||
|
user = factories["users.User"]()
|
||
|
user.create_actor()
|
||
|
track = factories["music.Track"](
|
||
|
fid="https://{}/test".format(settings.FEDERATION_HOSTNAME)
|
||
|
)
|
||
|
view = V.as_view({"post": "fetches"})
|
||
|
|
||
|
request = api_request.post("/", format="json")
|
||
|
setattr(request, "user", user)
|
||
|
setattr(request, "session", {})
|
||
|
response = view(request, pk=track.pk)
|
||
|
|
||
|
assert response.status_code == 400
|
||
|
|
||
|
|
||
|
def test_fetches_route_list(factories, api_request, mocker):
|
||
|
user = factories["users.User"]()
|
||
|
user.create_actor()
|
||
|
track = factories["music.Track"]()
|
||
|
fetches = [
|
||
|
factories["federation.Fetch"](object=track),
|
||
|
factories["federation.Fetch"](object=track),
|
||
|
]
|
||
|
view = V.as_view({"get": "fetches"})
|
||
|
|
||
|
request = api_request.get("/", format="json")
|
||
|
setattr(request, "user", user)
|
||
|
setattr(request, "session", {})
|
||
|
expected = {
|
||
|
"next": None,
|
||
|
"previous": None,
|
||
|
"count": 2,
|
||
|
"results": api_serializers.FetchSerializer(reversed(fetches), many=True).data,
|
||
|
}
|
||
|
|
||
|
request = api_request.get("/")
|
||
|
response = view(request, pk=track.pk)
|
||
|
|
||
|
assert response.status_code == 200
|
||
|
assert response.data == expected
|