See #578: added opengraph and oembed data on artist / album / track urls
This commit is contained in:
parent
815d729367
commit
9220b2f0f1
14 changed files with 867 additions and 21 deletions
148
api/tests/music/test_spa_views.py
Normal file
148
api/tests/music/test_spa_views.py
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
from django.urls import reverse
|
||||
|
||||
from funkwhale_api.common import utils
|
||||
|
||||
|
||||
def test_library_track(spa_html, no_api_auth, client, factories, settings):
|
||||
track = factories["music.Upload"](playable=True, track__disc_number=1).track
|
||||
url = "/library/tracks/{}".format(track.pk)
|
||||
|
||||
response = client.get(url)
|
||||
|
||||
expected_metas = [
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "og:url",
|
||||
"content": utils.join_url(settings.FUNKWHALE_URL, url),
|
||||
},
|
||||
{"tag": "meta", "property": "og:title", "content": track.title},
|
||||
{"tag": "meta", "property": "og:type", "content": "music.song"},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "music:album:disc",
|
||||
"content": str(track.disc_number),
|
||||
},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "music:album:track",
|
||||
"content": str(track.position),
|
||||
},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "music:musician",
|
||||
"content": utils.join_url(
|
||||
settings.FUNKWHALE_URL,
|
||||
utils.spa_reverse("library_artist", kwargs={"pk": track.artist.pk}),
|
||||
),
|
||||
},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "music:album",
|
||||
"content": utils.join_url(
|
||||
settings.FUNKWHALE_URL,
|
||||
utils.spa_reverse("library_album", kwargs={"pk": track.album.pk}),
|
||||
),
|
||||
},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "og:image",
|
||||
"content": utils.join_url(settings.FUNKWHALE_URL, track.album.cover.url),
|
||||
},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "og:audio",
|
||||
"content": utils.join_url(settings.FUNKWHALE_URL, track.listen_url),
|
||||
},
|
||||
{
|
||||
"tag": "link",
|
||||
"rel": "alternate",
|
||||
"type": "application/json+oembed",
|
||||
"href": (
|
||||
utils.join_url(settings.FUNKWHALE_URL, reverse("api:v1:oembed"))
|
||||
+ "?url={}".format(utils.join_url(settings.FUNKWHALE_URL, url))
|
||||
),
|
||||
},
|
||||
]
|
||||
|
||||
metas = utils.parse_meta(response.content.decode())
|
||||
|
||||
# we only test our custom metas, not the default ones
|
||||
assert metas[: len(expected_metas)] == expected_metas
|
||||
|
||||
|
||||
def test_library_album(spa_html, no_api_auth, client, factories, settings):
|
||||
track = factories["music.Upload"](playable=True, track__disc_number=1).track
|
||||
album = track.album
|
||||
url = "/library/albums/{}".format(album.pk)
|
||||
|
||||
response = client.get(url)
|
||||
|
||||
expected_metas = [
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "og:url",
|
||||
"content": utils.join_url(settings.FUNKWHALE_URL, url),
|
||||
},
|
||||
{"tag": "meta", "property": "og:title", "content": album.title},
|
||||
{"tag": "meta", "property": "og:type", "content": "music.album"},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "music:musician",
|
||||
"content": utils.join_url(
|
||||
settings.FUNKWHALE_URL,
|
||||
utils.spa_reverse("library_artist", kwargs={"pk": album.artist.pk}),
|
||||
),
|
||||
},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "music:release_date",
|
||||
"content": str(album.release_date),
|
||||
},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "og:image",
|
||||
"content": utils.join_url(settings.FUNKWHALE_URL, album.cover.url),
|
||||
},
|
||||
{
|
||||
"tag": "link",
|
||||
"rel": "alternate",
|
||||
"type": "application/json+oembed",
|
||||
"href": (
|
||||
utils.join_url(settings.FUNKWHALE_URL, reverse("api:v1:oembed"))
|
||||
+ "?url={}".format(utils.join_url(settings.FUNKWHALE_URL, url))
|
||||
),
|
||||
},
|
||||
]
|
||||
|
||||
metas = utils.parse_meta(response.content.decode())
|
||||
|
||||
# we only test our custom metas, not the default ones
|
||||
assert metas[: len(expected_metas)] == expected_metas
|
||||
|
||||
|
||||
def test_library_artist(spa_html, no_api_auth, client, factories, settings):
|
||||
album = factories["music.Album"]()
|
||||
artist = album.artist
|
||||
url = "/library/artists/{}".format(artist.pk)
|
||||
|
||||
response = client.get(url)
|
||||
|
||||
expected_metas = [
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "og:url",
|
||||
"content": utils.join_url(settings.FUNKWHALE_URL, url),
|
||||
},
|
||||
{"tag": "meta", "property": "og:title", "content": artist.name},
|
||||
{"tag": "meta", "property": "og:type", "content": "profile"},
|
||||
{
|
||||
"tag": "meta",
|
||||
"property": "og:image",
|
||||
"content": utils.join_url(settings.FUNKWHALE_URL, album.cover.url),
|
||||
},
|
||||
]
|
||||
|
||||
metas = utils.parse_meta(response.content.decode())
|
||||
|
||||
# we only test our custom metas, not the default ones
|
||||
assert metas[: len(expected_metas)] == expected_metas
|
||||
|
|
@ -6,8 +6,10 @@ import pytest
|
|||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
from funkwhale_api.music import licenses, models, serializers, tasks, views
|
||||
from funkwhale_api.common import utils
|
||||
from funkwhale_api.federation import api_serializers as federation_api_serializers
|
||||
from funkwhale_api.federation import utils as federation_utils
|
||||
from funkwhale_api.music import licenses, models, serializers, tasks, views
|
||||
|
||||
DATA_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
|
@ -570,3 +572,74 @@ def test_detail_license(api_client, preferences):
|
|||
response = api_client.get(url)
|
||||
|
||||
assert response.data == expected
|
||||
|
||||
|
||||
def test_oembed_track(factories, no_api_auth, api_client, settings, preferences):
|
||||
settings.FUNKWHALE_URL = "http://test"
|
||||
settings.FUNKWHALE_EMBED_URL = "http://embed"
|
||||
preferences["instance__name"] = "Hello"
|
||||
track = factories["music.Track"]()
|
||||
url = reverse("api:v1:oembed")
|
||||
track_url = "https://test.com/library/tracks/{}".format(track.pk)
|
||||
iframe_src = "http://embed?type=track&id={}".format(track.pk)
|
||||
expected = {
|
||||
"version": 1.0,
|
||||
"type": "rich",
|
||||
"provider_name": "{} - {}".format(
|
||||
preferences["instance__name"], settings.APP_NAME
|
||||
),
|
||||
"provider_url": settings.FUNKWHALE_URL,
|
||||
"height": 150,
|
||||
"width": 600,
|
||||
"title": "{} by {}".format(track.title, track.artist.name),
|
||||
"description": track.full_name,
|
||||
"thumbnail_url": federation_utils.full_url(
|
||||
track.album.cover.crop["400x400"].url
|
||||
),
|
||||
"html": '<iframe width="600" height="150" scrolling="no" frameborder="no" src="{}"></iframe>'.format(
|
||||
iframe_src
|
||||
),
|
||||
"author_name": track.artist.name,
|
||||
"author_url": federation_utils.full_url(
|
||||
utils.spa_reverse("library_artist", kwargs={"pk": track.artist.pk})
|
||||
),
|
||||
}
|
||||
|
||||
response = api_client.get(url, {"url": track_url, "format": "json"})
|
||||
|
||||
assert response.data == expected
|
||||
|
||||
|
||||
def test_oembed_album(factories, no_api_auth, api_client, settings, preferences):
|
||||
settings.FUNKWHALE_URL = "http://test"
|
||||
settings.FUNKWHALE_EMBED_URL = "http://embed"
|
||||
preferences["instance__name"] = "Hello"
|
||||
track = factories["music.Track"]()
|
||||
album = track.album
|
||||
url = reverse("api:v1:oembed")
|
||||
album_url = "https://test.com/library/albums/{}".format(album.pk)
|
||||
iframe_src = "http://embed?type=album&id={}".format(album.pk)
|
||||
expected = {
|
||||
"version": 1.0,
|
||||
"type": "rich",
|
||||
"provider_name": "{} - {}".format(
|
||||
preferences["instance__name"], settings.APP_NAME
|
||||
),
|
||||
"provider_url": settings.FUNKWHALE_URL,
|
||||
"height": 400,
|
||||
"width": 600,
|
||||
"title": "{} by {}".format(album.title, album.artist.name),
|
||||
"description": "{} by {}".format(album.title, album.artist.name),
|
||||
"thumbnail_url": federation_utils.full_url(album.cover.crop["400x400"].url),
|
||||
"html": '<iframe width="600" height="400" scrolling="no" frameborder="no" src="{}"></iframe>'.format(
|
||||
iframe_src
|
||||
),
|
||||
"author_name": album.artist.name,
|
||||
"author_url": federation_utils.full_url(
|
||||
utils.spa_reverse("library_artist", kwargs={"pk": album.artist.pk})
|
||||
),
|
||||
}
|
||||
|
||||
response = api_client.get(url, {"url": album_url, "format": "json"})
|
||||
|
||||
assert response.data == expected
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue