funkwhale/api/tests/test_youtube.py

97 lines
3.5 KiB
Python

from collections import OrderedDict
from django.urls import reverse
from funkwhale_api.providers.youtube.client import client
from .data import youtube as api_data
def test_can_get_search_results_from_youtube(mocker):
mocker.patch(
"funkwhale_api.providers.youtube.client._do_search",
return_value=api_data.search["8 bit adventure"],
)
query = "8 bit adventure"
results = client.search(query)
assert results[0]["id"]["videoId"] == "0HxZn6CzOIo"
assert results[0]["snippet"]["title"] == "AdhesiveWombat - 8 Bit Adventure"
assert results[0]["full_url"] == "https://www.youtube.com/watch?v=0HxZn6CzOIo"
def test_can_get_search_results_from_funkwhale(preferences, mocker, api_client, db):
preferences["common__api_authentication_required"] = False
mocker.patch(
"funkwhale_api.providers.youtube.client._do_search",
return_value=api_data.search["8 bit adventure"],
)
query = "8 bit adventure"
url = reverse("api:v1:providers:youtube:search")
response = api_client.get(url, {"query": query})
# we should cast the youtube result to something more generic
expected = {
"id": "0HxZn6CzOIo",
"url": "https://www.youtube.com/watch?v=0HxZn6CzOIo",
"type": "youtube#video",
"description": "Description",
"channelId": "UCps63j3krzAG4OyXeEyuhFw",
"title": "AdhesiveWombat - 8 Bit Adventure",
"channelTitle": "AdhesiveWombat",
"publishedAt": "2012-08-22T18:41:03.000Z",
"cover": "https://i.ytimg.com/vi/0HxZn6CzOIo/hqdefault.jpg",
}
assert response.data[0] == expected
def test_can_send_multiple_queries_at_once(mocker):
mocker.patch(
"funkwhale_api.providers.youtube.client._do_search",
side_effect=[
api_data.search["8 bit adventure"],
api_data.search["system of a down toxicity"],
],
)
queries = OrderedDict()
queries["1"] = {"q": "8 bit adventure"}
queries["2"] = {"q": "system of a down toxicity"}
results = client.search_multiple(queries)
assert results["1"][0]["id"]["videoId"] == "0HxZn6CzOIo"
assert results["1"][0]["snippet"]["title"] == "AdhesiveWombat - 8 Bit Adventure"
assert results["1"][0]["full_url"] == "https://www.youtube.com/watch?v=0HxZn6CzOIo"
assert results["2"][0]["id"]["videoId"] == "BorYwGi2SJc"
assert results["2"][0]["snippet"]["title"] == "System of a Down: Toxicity"
assert results["2"][0]["full_url"] == "https://www.youtube.com/watch?v=BorYwGi2SJc"
def test_can_send_multiple_queries_at_once_from_funwkhale(
preferences, mocker, db, api_client
):
preferences["common__api_authentication_required"] = False
mocker.patch(
"funkwhale_api.providers.youtube.client._do_search",
return_value=api_data.search["8 bit adventure"],
)
queries = OrderedDict()
queries["1"] = {"q": "8 bit adventure"}
expected = {
"id": "0HxZn6CzOIo",
"url": "https://www.youtube.com/watch?v=0HxZn6CzOIo",
"type": "youtube#video",
"description": "Description",
"channelId": "UCps63j3krzAG4OyXeEyuhFw",
"title": "AdhesiveWombat - 8 Bit Adventure",
"channelTitle": "AdhesiveWombat",
"publishedAt": "2012-08-22T18:41:03.000Z",
"cover": "https://i.ytimg.com/vi/0HxZn6CzOIo/hqdefault.jpg",
}
url = reverse("api:v1:providers:youtube:searchs")
response = api_client.post(url, queries, format="json")
assert expected == response.data["1"][0]