mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-06 01:59:55 +02:00
See #170: now record downloads count on tracks/uploads
This commit is contained in:
parent
3674d1235d
commit
b22b9c83b0
12 changed files with 161 additions and 18 deletions
|
@ -10,15 +10,14 @@ def test_get_ident_anonymous(api_request):
|
|||
|
||||
expected = {"id": ip, "type": "anonymous"}
|
||||
|
||||
assert throttling.get_ident(request) == expected
|
||||
assert throttling.get_ident(None, request) == expected
|
||||
|
||||
|
||||
def test_get_ident_authenticated(api_request, factories):
|
||||
user = factories["users.User"]()
|
||||
request = api_request.get("/")
|
||||
setattr(request, "user", user)
|
||||
expected = {"id": user.pk, "type": "authenticated"}
|
||||
assert throttling.get_ident(request) == expected
|
||||
assert throttling.get_ident(user, request) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
|
|
@ -45,3 +45,49 @@ def test_guess_mimetype_dont_crash_with_s3(factories, mocker, settings):
|
|||
f = factories["music.Upload"].build(audio_file__filename="test.mp3")
|
||||
|
||||
assert utils.guess_mimetype(f.audio_file) == "audio/mpeg"
|
||||
|
||||
|
||||
def test_increment_downloads_count(factories, mocker, cache, anonymous_user, settings):
|
||||
ident = {"type": "anonymous", "id": "noop"}
|
||||
get_ident = mocker.patch(
|
||||
"funkwhale_api.common.throttling.get_ident", return_value=ident
|
||||
)
|
||||
cache_set = mocker.spy(utils.cache, "set")
|
||||
wsgi_request = mocker.Mock(META={})
|
||||
upload = factories["music.Upload"]()
|
||||
utils.increment_downloads_count(
|
||||
upload=upload, user=anonymous_user, wsgi_request=wsgi_request
|
||||
)
|
||||
|
||||
upload.refresh_from_db()
|
||||
get_ident.assert_called_once_with(user=anonymous_user, request=wsgi_request)
|
||||
|
||||
assert upload.downloads_count == 1
|
||||
assert upload.track.downloads_count == 1
|
||||
cache_set.assert_called_once_with(
|
||||
"downloads_count:upload-{}:{}-{}".format(upload.pk, ident["type"], ident["id"]),
|
||||
1,
|
||||
settings.MIN_DELAY_BETWEEN_DOWNLOADS_COUNT,
|
||||
)
|
||||
|
||||
|
||||
def test_increment_downloads_count_already_tracked(
|
||||
factories, mocker, cache, anonymous_user
|
||||
):
|
||||
ident = {"type": "anonymous", "id": "noop"}
|
||||
mocker.patch("funkwhale_api.common.throttling.get_ident", return_value=ident)
|
||||
wsgi_request = mocker.Mock(META={})
|
||||
upload = factories["music.Upload"]()
|
||||
cache.set(
|
||||
"downloads_count:upload-{}:{}-{}".format(upload.pk, ident["type"], ident["id"]),
|
||||
1,
|
||||
)
|
||||
|
||||
utils.increment_downloads_count(
|
||||
upload=upload, user=anonymous_user, wsgi_request=wsgi_request
|
||||
)
|
||||
|
||||
upload.refresh_from_db()
|
||||
|
||||
assert upload.downloads_count == 0
|
||||
assert upload.track.downloads_count == 0
|
||||
|
|
|
@ -352,11 +352,16 @@ def test_serve_updates_access_date(factories, settings, api_client, preferences)
|
|||
assert upload.accessed_date > now
|
||||
|
||||
|
||||
def test_listen_no_track(factories, logged_in_api_client):
|
||||
def test_listen_no_track(factories, logged_in_api_client, mocker):
|
||||
increment_downloads_count = mocker.patch(
|
||||
"funkwhale_api.music.utils.increment_downloads_count"
|
||||
)
|
||||
|
||||
url = reverse("api:v1:listen-detail", kwargs={"uuid": "noop"})
|
||||
response = logged_in_api_client.get(url)
|
||||
|
||||
assert response.status_code == 404
|
||||
increment_downloads_count.call_count == 0
|
||||
|
||||
|
||||
def test_listen_no_file(factories, logged_in_api_client):
|
||||
|
@ -375,7 +380,10 @@ def test_listen_no_available_file(factories, logged_in_api_client):
|
|||
assert response.status_code == 404
|
||||
|
||||
|
||||
def test_listen_correct_access(factories, logged_in_api_client):
|
||||
def test_listen_correct_access(factories, logged_in_api_client, mocker):
|
||||
increment_downloads_count = mocker.patch(
|
||||
"funkwhale_api.music.utils.increment_downloads_count"
|
||||
)
|
||||
logged_in_api_client.user.create_actor()
|
||||
upload = factories["music.Upload"](
|
||||
library__actor=logged_in_api_client.user.actor,
|
||||
|
@ -391,6 +399,12 @@ def test_listen_correct_access(factories, logged_in_api_client):
|
|||
urllib.parse.quote(expected_filename)
|
||||
)
|
||||
|
||||
increment_downloads_count.assert_called_once_with(
|
||||
upload=upload,
|
||||
user=logged_in_api_client.user,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
|
||||
|
||||
def test_listen_correct_access_download_false(factories, logged_in_api_client):
|
||||
logged_in_api_client.user.create_actor()
|
||||
|
@ -419,12 +433,13 @@ def test_listen_explicit_file(factories, logged_in_api_client, mocker, settings)
|
|||
|
||||
assert response.status_code == 200
|
||||
mocked_serve.assert_called_once_with(
|
||||
upload2,
|
||||
upload=upload2,
|
||||
user=logged_in_api_client.user,
|
||||
format=None,
|
||||
max_bitrate=None,
|
||||
proxy_media=settings.PROXY_MEDIA,
|
||||
download=True,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
|
||||
|
||||
|
@ -484,10 +499,13 @@ def test_should_transcode_according_to_preference(value, preferences, factories)
|
|||
assert views.should_transcode(upload, "mp3") is expected
|
||||
|
||||
|
||||
def test_handle_serve_create_mp3_version(factories, now):
|
||||
def test_handle_serve_create_mp3_version(factories, now, mocker):
|
||||
mocker.patch("funkwhale_api.music.utils.increment_downloads_count")
|
||||
user = factories["users.User"]()
|
||||
upload = factories["music.Upload"](bitrate=42)
|
||||
response = views.handle_serve(upload, user, format="mp3")
|
||||
response = views.handle_serve(
|
||||
upload=upload, user=user, format="mp3", wsgi_request=None
|
||||
)
|
||||
expected_filename = upload.track.full_name + ".mp3"
|
||||
version = upload.versions.latest("id")
|
||||
|
||||
|
@ -514,12 +532,13 @@ def test_listen_transcode(factories, now, logged_in_api_client, mocker, settings
|
|||
assert response.status_code == 200
|
||||
|
||||
handle_serve.assert_called_once_with(
|
||||
upload,
|
||||
upload=upload,
|
||||
user=logged_in_api_client.user,
|
||||
format="mp3",
|
||||
max_bitrate=None,
|
||||
proxy_media=settings.PROXY_MEDIA,
|
||||
download=True,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
|
||||
|
||||
|
@ -547,12 +566,13 @@ def test_listen_transcode_bitrate(
|
|||
assert response.status_code == 200
|
||||
|
||||
handle_serve.assert_called_once_with(
|
||||
upload,
|
||||
upload=upload,
|
||||
user=logged_in_api_client.user,
|
||||
format=None,
|
||||
max_bitrate=expected,
|
||||
proxy_media=settings.PROXY_MEDIA,
|
||||
download=True,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
|
||||
|
||||
|
@ -578,12 +598,13 @@ def test_listen_transcode_in_place(
|
|||
assert response.status_code == 200
|
||||
|
||||
handle_serve.assert_called_once_with(
|
||||
upload,
|
||||
upload=upload,
|
||||
user=logged_in_api_client.user,
|
||||
format="mp3",
|
||||
max_bitrate=None,
|
||||
proxy_media=settings.PROXY_MEDIA,
|
||||
download=True,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -236,6 +236,7 @@ def test_stream(
|
|||
format=None,
|
||||
max_bitrate=None,
|
||||
proxy_media=True,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
assert response.status_code == 200
|
||||
playable_by.assert_called_once_with(music_models.Track.objects.all(), None)
|
||||
|
@ -256,6 +257,7 @@ def test_stream_format(format, expected, logged_in_api_client, factories, mocker
|
|||
format=expected,
|
||||
max_bitrate=None,
|
||||
proxy_media=True,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
|
@ -305,6 +307,7 @@ def test_stream_transcode(
|
|||
format=expected_format,
|
||||
max_bitrate=expected_bitrate,
|
||||
proxy_media=True,
|
||||
wsgi_request=response.wsgi_request,
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue