See #170: expose/store actor URL over federation

This commit is contained in:
Eliot Berriot 2020-02-07 10:48:17 +01:00
commit b351ea67e2
10 changed files with 160 additions and 14 deletions

View file

@ -1,3 +1,8 @@
from django.urls import reverse
from funkwhale_api.federation import utils as federation_utils
def test_channel(factories, now):
channel = factories["audio.Channel"]()
assert channel.artist is not None
@ -5,3 +10,16 @@ def test_channel(factories, now):
assert channel.attributed_to is not None
assert channel.library is not None
assert channel.creation_date >= now
def test_channel_get_rss_url_local(factories):
channel = factories["audio.Channel"](artist__local=True)
expected = federation_utils.full_url(
reverse("api:v1:channels-rss", kwargs={"uuid": channel.uuid})
)
assert channel.get_rss_url() == expected
def test_channel_get_rss_url_remote(factories):
channel = factories["audio.Channel"]()
assert channel.get_rss_url() == channel.rss_url

View file

@ -134,6 +134,7 @@ def test_channel_serializer_representation(factories, to_api_date):
channel.attributed_to
).data,
"metadata": {},
"rss_url": channel.get_rss_url(),
}
expected["artist"]["description"] = common_serializers.ContentSerializer(
content

View file

@ -30,6 +30,7 @@ def test_actor_serializer_from_ap(db):
"name": "Test",
"summary": "Hello world",
"manuallyApprovesFollowers": True,
"url": "http://hello.world/path",
"publicKey": {
"publicKeyPem": public.decode("utf-8"),
"owner": actor_url,
@ -48,7 +49,7 @@ def test_actor_serializer_from_ap(db):
actor = serializer.save()
assert actor.fid == actor_url
assert actor.url is None
assert actor.url == payload["url"]
assert actor.inbox_url == payload["inbox"]
assert actor.shared_inbox_url == payload["endpoints"]["sharedInbox"]
assert actor.outbox_url == payload["outbox"]
@ -108,6 +109,7 @@ def test_actor_serializer_to_ap(factories):
"outbox": "https://test.federation/user/outbox",
"preferredUsername": "user",
"name": "Real User",
"url": [{"type": "Link", "href": "https://test.url", "mediaType": "text/html"}],
"manuallyApprovesFollowers": False,
"publicKey": {
"id": "https://test.federation/user#main-key",
@ -120,13 +122,14 @@ def test_actor_serializer_to_ap(factories):
fid=expected["id"],
inbox_url=expected["inbox"],
outbox_url=expected["outbox"],
url=expected["url"][0]["href"],
shared_inbox_url=expected["endpoints"]["sharedInbox"],
followers_url=expected["followers"],
following_url=expected["following"],
public_key=expected["publicKey"]["publicKeyPem"],
preferred_username=expected["preferredUsername"],
name=expected["name"],
domain=models.Domain.objects.create(pk="test.federation"),
domain=models.Domain.objects.create(pk="test.domain"),
type="Person",
manually_approves_followers=False,
attachment_icon=factories["common.Attachment"](),
@ -1112,7 +1115,7 @@ def test_activity_pub_audio_serializer_to_ap(factories):
assert serializer.data == expected
def test_local_actor_serializer_to_ap(factories):
def test_local_actor_serializer_to_ap(factories, settings):
expected = {
"@context": jsonld.get_default_context(),
"id": "https://test.federation/user",
@ -1155,6 +1158,15 @@ def test_local_actor_serializer_to_ap(factories):
user.save()
ac.refresh_from_db()
expected["summary"] = content.rendered
expected["url"] = [
{
"type": "Link",
"href": "https://{}/@{}".format(
settings.FUNKWHALE_HOSTNAME, ac.preferred_username
),
"mediaType": "text/html",
}
]
expected["icon"] = {
"type": "Image",
"mediaType": "image/jpeg",
@ -1197,6 +1209,25 @@ def test_track_serializer_update_license(factories):
assert obj.license_id == "cc-by-2.0"
def test_channel_actor_serializer(factories):
channel = factories["audio.Channel"]()
serializer = serializers.ActorSerializer(channel.actor)
expected_url = [
{
"type": "Link",
"href": channel.actor.get_absolute_url(),
"mediaType": "text/html",
},
{
"type": "Link",
"href": channel.get_rss_url(),
"mediaType": "application/rss+xml",
},
]
assert serializer.data["url"] == expected_url
def test_channel_actor_outbox_serializer(factories):
channel = factories["audio.Channel"]()
uploads = factories["music.Upload"].create_batch(