Skip to content
Snippets Groups Projects
test_views.py 2.88 KiB
Newer Older
import pytest
from django.urls import reverse

Eliot Berriot's avatar
Eliot Berriot committed
from funkwhale_api.manage import serializers, views
Eliot Berriot's avatar
Eliot Berriot committed
@pytest.mark.parametrize(
Eliot Berriot's avatar
Eliot Berriot committed
    "view,permissions,operator",
    [
Eliot Berriot's avatar
Eliot Berriot committed
        (views.ManageUploadViewSet, ["library"], "and"),
Eliot Berriot's avatar
Eliot Berriot committed
        (views.ManageUserViewSet, ["settings"], "and"),
        (views.ManageInvitationViewSet, ["settings"], "and"),
        (views.ManageDomainViewSet, ["moderation"], "and"),
Eliot Berriot's avatar
Eliot Berriot committed
    ],
Eliot Berriot's avatar
Eliot Berriot committed
)
def test_permissions(assert_user_permission, view, permissions, operator):
    assert_user_permission(view, permissions, operator)


@pytest.mark.skip(reason="Refactoring in progress")
Eliot Berriot's avatar
Eliot Berriot committed
def test_upload_view(factories, superuser_api_client):
    uploads = factories["music.Upload"].create_batch(size=5)
    qs = uploads[0].__class__.objects.order_by("-creation_date")
    url = reverse("api:v1:manage:library:uploads-list")
Eliot Berriot's avatar
Eliot Berriot committed
    response = superuser_api_client.get(url, {"sort": "-creation_date"})
Eliot Berriot's avatar
Eliot Berriot committed
    expected = serializers.ManageUploadSerializer(
Eliot Berriot's avatar
Eliot Berriot committed
        qs, many=True, context={"request": response.wsgi_request}
    ).data
Eliot Berriot's avatar
Eliot Berriot committed
    assert response.data["count"] == len(uploads)
Eliot Berriot's avatar
Eliot Berriot committed
    assert response.data["results"] == expected
Eliot Berriot's avatar
Eliot Berriot committed


def test_user_view(factories, superuser_api_client, mocker):
    mocker.patch("funkwhale_api.users.models.User.record_activity")
    users = factories["users.User"].create_batch(size=5) + [superuser_api_client.user]
    qs = users[0].__class__.objects.order_by("-id")
    url = reverse("api:v1:manage:users:users-list")

    response = superuser_api_client.get(url, {"sort": "-id"})
    expected = serializers.ManageUserSerializer(
        qs, many=True, context={"request": response.wsgi_request}
    ).data

    assert response.data["count"] == len(users)
    assert response.data["results"] == expected


def test_invitation_view(factories, superuser_api_client, mocker):
    invitations = factories["users.Invitation"].create_batch(size=5)
    qs = invitations[0].__class__.objects.order_by("-id")
    url = reverse("api:v1:manage:users:invitations-list")

    response = superuser_api_client.get(url, {"sort": "-id"})
    expected = serializers.ManageInvitationSerializer(qs, many=True).data

    assert response.data["count"] == len(invitations)
    assert response.data["results"] == expected


def test_invitation_view_create(factories, superuser_api_client, mocker):
    url = reverse("api:v1:manage:users:invitations-list")
    response = superuser_api_client.post(url)

    assert response.status_code == 201
    assert superuser_api_client.user.invitations.latest("id") is not None


def test_domain_list(factories, superuser_api_client, settings):
    factories["federation.Domain"](pk=settings.FEDERATION_HOSTNAME)
    d = factories["federation.Domain"]()
    url = reverse("api:v1:manage:federation:domains-list")
    response = superuser_api_client.get(url)

    assert response.status_code == 200

    assert response.data["count"] == 1
    assert response.data["results"][0]["name"] == d.pk