Skip to content
Snippets Groups Projects
test_views.py 5.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • import pytest
    from django.urls import reverse
    
    
    from funkwhale_api.federation import models as federation_models
    
    from funkwhale_api.federation import tasks as federation_tasks
    
    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"),
    
            (views.ManageActorViewSet, ["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
    
    
    
    def test_domain_detail(factories, superuser_api_client):
        d = factories["federation.Domain"]()
        url = reverse("api:v1:manage:federation:domains-detail", kwargs={"pk": d.name})
        response = superuser_api_client.get(url)
    
        assert response.status_code == 200
        assert response.data["name"] == d.pk
    
    
    
    def test_domain_create(superuser_api_client):
        url = reverse("api:v1:manage:federation:domains-list")
        response = superuser_api_client.post(url, {"name": "test.federation"})
    
        assert response.status_code == 201
        assert federation_models.Domain.objects.filter(pk="test.federation").exists()
    
    
    
    def test_domain_nodeinfo(factories, superuser_api_client, mocker):
        domain = factories["federation.Domain"]()
        url = reverse(
            "api:v1:manage:federation:domains-nodeinfo", kwargs={"pk": domain.name}
        )
        mocker.patch.object(
            federation_tasks, "fetch_nodeinfo", return_value={"hello": "world"}
        )
        update_domain_nodeinfo = mocker.spy(federation_tasks, "update_domain_nodeinfo")
        response = superuser_api_client.get(url)
        assert response.status_code == 200
        assert response.data == {"status": "ok", "payload": {"hello": "world"}}
    
        update_domain_nodeinfo.assert_called_once_with(domain_name=domain.name)
    
    
    
    def test_domain_stats(factories, superuser_api_client, mocker):
        domain = factories["federation.Domain"]()
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        mocker.patch.object(domain.__class__, "get_stats", return_value={"hello": "world"})
    
        url = reverse("api:v1:manage:federation:domains-stats", kwargs={"pk": domain.name})
        response = superuser_api_client.get(url)
        assert response.status_code == 200
        assert response.data == {"hello": "world"}
    
    
    
    def test_actor_list(factories, superuser_api_client, settings):
        actor = factories["federation.Actor"]()
        url = reverse("api:v1:manage:accounts-list")
        response = superuser_api_client.get(url)
    
        assert response.status_code == 200
    
        assert response.data["count"] == 1
        assert response.data["results"][0]["id"] == actor.id
    
    
    def test_actor_detail(factories, superuser_api_client):
        actor = factories["federation.Actor"]()
        url = reverse("api:v1:manage:accounts-detail", kwargs={"pk": actor.full_username})
        response = superuser_api_client.get(url)
    
        assert response.status_code == 200
        assert response.data["id"] == actor.id