Skip to content
Snippets Groups Projects
test_api.py 1.6 KiB
Newer Older
Eliot Berriot's avatar
Eliot Berriot committed
import os
import pytest
from django.urls import reverse

Eliot Berriot's avatar
Eliot Berriot committed
DATA_DIR = os.path.dirname(os.path.abspath(__file__))

Eliot Berriot's avatar
Eliot Berriot committed
@pytest.mark.parametrize(
    "route,method",
    [
        ("api:v1:tags-list", "get"),
        ("api:v1:tracks-list", "get"),
        ("api:v1:artists-list", "get"),
        ("api:v1:albums-list", "get"),
    ],
)
def test_can_restrict_api_views_to_authenticated_users(
Eliot Berriot's avatar
Eliot Berriot committed
    db, route, method, preferences, client
):
    url = reverse(route)
Eliot Berriot's avatar
Eliot Berriot committed
    preferences["common__api_authentication_required"] = True
    response = getattr(client, method)(url)
    assert response.status_code == 401


Eliot Berriot's avatar
Eliot Berriot committed
def test_upload_url_is_restricted_to_authenticated_users(
Eliot Berriot's avatar
Eliot Berriot committed
    api_client, factories, preferences
):
    preferences["common__api_authentication_required"] = True
Eliot Berriot's avatar
Eliot Berriot committed
    upload = factories["music.Upload"](library__privacy_level="instance")
    assert upload.audio_file is not None
    url = upload.track.listen_url
    response = api_client.get(url)
    assert response.status_code == 401

Eliot Berriot's avatar
Eliot Berriot committed
def test_upload_url_is_accessible_to_authenticated_users(
Eliot Berriot's avatar
Eliot Berriot committed
    logged_in_api_client, factories, preferences
):
    actor = logged_in_api_client.user.create_actor()
Eliot Berriot's avatar
Eliot Berriot committed
    preferences["common__api_authentication_required"] = True
    upload = factories["music.Upload"](library__actor=actor, import_status="finished")
Eliot Berriot's avatar
Eliot Berriot committed
    assert upload.audio_file is not None
    url = upload.track.listen_url
    response = logged_in_api_client.get(url)

    assert response.status_code == 200
    assert response["X-Accel-Redirect"] == "/_protected{}".format(
        views.strip_absolute_media_url(upload.audio_file.url)
    )