funkwhale/api/tests/federation/test_decorators.py

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