166 lines
5.3 KiB
Python
166 lines
5.3 KiB
Python
from django.urls import reverse
|
|
|
|
from funkwhale_api.federation import keys
|
|
from funkwhale_api.federation import models
|
|
from funkwhale_api.federation import serializers
|
|
|
|
|
|
def test_actor_serializer_from_ap(db):
|
|
payload = {
|
|
'id': 'https://test.federation/user',
|
|
'type': 'Person',
|
|
'following': 'https://test.federation/user/following',
|
|
'followers': 'https://test.federation/user/followers',
|
|
'inbox': 'https://test.federation/user/inbox',
|
|
'outbox': 'https://test.federation/user/outbox',
|
|
'preferredUsername': 'user',
|
|
'name': 'Real User',
|
|
'summary': 'Hello world',
|
|
'url': 'https://test.federation/@user',
|
|
'manuallyApprovesFollowers': False,
|
|
'publicKey': {
|
|
'id': 'https://test.federation/user#main-key',
|
|
'owner': 'https://test.federation/user',
|
|
'publicKeyPem': 'yolo'
|
|
},
|
|
'endpoints': {
|
|
'sharedInbox': 'https://test.federation/inbox'
|
|
},
|
|
}
|
|
|
|
serializer = serializers.ActorSerializer(data=payload)
|
|
assert serializer.is_valid()
|
|
|
|
actor = serializer.build()
|
|
|
|
assert actor.url == payload['id']
|
|
assert actor.inbox_url == payload['inbox']
|
|
assert actor.outbox_url == payload['outbox']
|
|
assert actor.shared_inbox_url == payload['endpoints']['sharedInbox']
|
|
assert actor.followers_url == payload['followers']
|
|
assert actor.following_url == payload['following']
|
|
assert actor.public_key == payload['publicKey']['publicKeyPem']
|
|
assert actor.preferred_username == payload['preferredUsername']
|
|
assert actor.name == payload['name']
|
|
assert actor.domain == 'test.federation'
|
|
assert actor.summary == payload['summary']
|
|
assert actor.type == 'Person'
|
|
assert actor.manually_approves_followers == payload['manuallyApprovesFollowers']
|
|
|
|
|
|
def test_actor_serializer_only_mandatory_field_from_ap(db):
|
|
payload = {
|
|
'id': 'https://test.federation/user',
|
|
'type': 'Person',
|
|
'following': 'https://test.federation/user/following',
|
|
'followers': 'https://test.federation/user/followers',
|
|
'inbox': 'https://test.federation/user/inbox',
|
|
'outbox': 'https://test.federation/user/outbox',
|
|
'preferredUsername': 'user',
|
|
}
|
|
|
|
serializer = serializers.ActorSerializer(data=payload)
|
|
assert serializer.is_valid()
|
|
|
|
actor = serializer.build()
|
|
|
|
assert actor.url == payload['id']
|
|
assert actor.inbox_url == payload['inbox']
|
|
assert actor.outbox_url == payload['outbox']
|
|
assert actor.followers_url == payload['followers']
|
|
assert actor.following_url == payload['following']
|
|
assert actor.preferred_username == payload['preferredUsername']
|
|
assert actor.domain == 'test.federation'
|
|
assert actor.type == 'Person'
|
|
assert actor.manually_approves_followers is None
|
|
|
|
|
|
def test_actor_serializer_to_ap():
|
|
expected = {
|
|
'@context': [
|
|
'https://www.w3.org/ns/activitystreams',
|
|
'https://w3id.org/security/v1',
|
|
{},
|
|
],
|
|
'id': 'https://test.federation/user',
|
|
'type': 'Person',
|
|
'following': 'https://test.federation/user/following',
|
|
'followers': 'https://test.federation/user/followers',
|
|
'inbox': 'https://test.federation/user/inbox',
|
|
'outbox': 'https://test.federation/user/outbox',
|
|
'preferredUsername': 'user',
|
|
'name': 'Real User',
|
|
'summary': 'Hello world',
|
|
'manuallyApprovesFollowers': False,
|
|
'publicKey': {
|
|
'id': 'https://test.federation/user#main-key',
|
|
'owner': 'https://test.federation/user',
|
|
'publicKeyPem': 'yolo'
|
|
},
|
|
'endpoints': {
|
|
'sharedInbox': 'https://test.federation/inbox'
|
|
},
|
|
}
|
|
ac = models.Actor(
|
|
url=expected['id'],
|
|
inbox_url=expected['inbox'],
|
|
outbox_url=expected['outbox'],
|
|
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='test.federation',
|
|
summary=expected['summary'],
|
|
type='Person',
|
|
manually_approves_followers=False,
|
|
|
|
)
|
|
serializer = serializers.ActorSerializer(ac)
|
|
|
|
assert serializer.data == expected
|
|
|
|
|
|
def test_webfinger_serializer():
|
|
expected = {
|
|
'subject': 'acct:service@test.federation',
|
|
'links': [
|
|
{
|
|
'rel': 'self',
|
|
'href': 'https://test.federation/federation/instance/actor',
|
|
'type': 'application/activity+json',
|
|
}
|
|
],
|
|
'aliases': [
|
|
'https://test.federation/federation/instance/actor',
|
|
]
|
|
}
|
|
actor = models.Actor(
|
|
url=expected['links'][0]['href'],
|
|
preferred_username='service',
|
|
domain='test.federation',
|
|
)
|
|
serializer = serializers.ActorWebfingerSerializer(actor)
|
|
|
|
assert serializer.data == expected
|
|
|
|
|
|
def test_follow_serializer_to_ap(factories):
|
|
follow = factories['federation.Follow'](local=True)
|
|
serializer = serializers.FollowSerializer(follow)
|
|
|
|
expected = {
|
|
'@context': [
|
|
'https://www.w3.org/ns/activitystreams',
|
|
'https://w3id.org/security/v1',
|
|
{},
|
|
],
|
|
'id': follow.get_federation_url(),
|
|
'type': 'Follow',
|
|
'actor': follow.actor.url,
|
|
'object': follow.target.url,
|
|
}
|
|
|
|
assert serializer.data == expected
|