mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-06 05:19:56 +02:00
Removed too complex FollowRequest model, we now use an aproved field on Follow
This commit is contained in:
parent
c97db31cb1
commit
0b2fe8439a
14 changed files with 480 additions and 306 deletions
|
@ -1,4 +1,5 @@
|
|||
import arrow
|
||||
import pytest
|
||||
|
||||
from django.urls import reverse
|
||||
from django.core.paginator import Paginator
|
||||
|
@ -170,6 +171,184 @@ def test_follow_serializer_to_ap(factories):
|
|||
assert serializer.data == expected
|
||||
|
||||
|
||||
def test_follow_serializer_save(factories):
|
||||
actor = factories['federation.Actor']()
|
||||
target = factories['federation.Actor']()
|
||||
|
||||
data = expected = {
|
||||
'id': 'https://test.follow',
|
||||
'type': 'Follow',
|
||||
'actor': actor.url,
|
||||
'object': target.url,
|
||||
}
|
||||
serializer = serializers.FollowSerializer(data=data)
|
||||
|
||||
assert serializer.is_valid(raise_exception=True)
|
||||
|
||||
follow = serializer.save()
|
||||
|
||||
assert follow.pk is not None
|
||||
assert follow.actor == actor
|
||||
assert follow.target == target
|
||||
assert follow.approved is None
|
||||
|
||||
|
||||
def test_follow_serializer_save_validates_on_context(factories):
|
||||
actor = factories['federation.Actor']()
|
||||
target = factories['federation.Actor']()
|
||||
impostor = factories['federation.Actor']()
|
||||
|
||||
data = expected = {
|
||||
'id': 'https://test.follow',
|
||||
'type': 'Follow',
|
||||
'actor': actor.url,
|
||||
'object': target.url,
|
||||
}
|
||||
serializer = serializers.FollowSerializer(
|
||||
data=data,
|
||||
context={'follow_actor': impostor, 'follow_target': impostor})
|
||||
|
||||
assert serializer.is_valid() is False
|
||||
|
||||
assert 'actor' in serializer.errors
|
||||
assert 'object' in serializer.errors
|
||||
|
||||
|
||||
def test_accept_follow_serializer_representation(factories):
|
||||
follow = factories['federation.Follow'](approved=None)
|
||||
|
||||
expected = {
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
'https://w3id.org/security/v1',
|
||||
{},
|
||||
],
|
||||
'id': follow.get_federation_url() + '/accept',
|
||||
'type': 'Accept',
|
||||
'actor': follow.target.url,
|
||||
'object': serializers.FollowSerializer(follow).data,
|
||||
}
|
||||
|
||||
serializer = serializers.AcceptFollowSerializer(follow)
|
||||
|
||||
assert serializer.data == expected
|
||||
|
||||
|
||||
def test_accept_follow_serializer_save(factories):
|
||||
follow = factories['federation.Follow'](approved=None)
|
||||
|
||||
data = {
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
'https://w3id.org/security/v1',
|
||||
{},
|
||||
],
|
||||
'id': follow.get_federation_url() + '/accept',
|
||||
'type': 'Accept',
|
||||
'actor': follow.target.url,
|
||||
'object': serializers.FollowSerializer(follow).data,
|
||||
}
|
||||
|
||||
serializer = serializers.AcceptFollowSerializer(data=data)
|
||||
assert serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
||||
follow.refresh_from_db()
|
||||
|
||||
assert follow.approved is True
|
||||
|
||||
|
||||
def test_accept_follow_serializer_validates_on_context(factories):
|
||||
follow = factories['federation.Follow'](approved=None)
|
||||
impostor = factories['federation.Actor']()
|
||||
data = {
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
'https://w3id.org/security/v1',
|
||||
{},
|
||||
],
|
||||
'id': follow.get_federation_url() + '/accept',
|
||||
'type': 'Accept',
|
||||
'actor': impostor.url,
|
||||
'object': serializers.FollowSerializer(follow).data,
|
||||
}
|
||||
|
||||
serializer = serializers.AcceptFollowSerializer(
|
||||
data=data,
|
||||
context={'follow_actor': impostor, 'follow_target': impostor})
|
||||
|
||||
assert serializer.is_valid() is False
|
||||
assert 'actor' in serializer.errors['object']
|
||||
assert 'object' in serializer.errors['object']
|
||||
|
||||
|
||||
def test_undo_follow_serializer_representation(factories):
|
||||
follow = factories['federation.Follow'](approved=True)
|
||||
|
||||
expected = {
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
'https://w3id.org/security/v1',
|
||||
{},
|
||||
],
|
||||
'id': follow.get_federation_url() + '/undo',
|
||||
'type': 'Undo',
|
||||
'actor': follow.actor.url,
|
||||
'object': serializers.FollowSerializer(follow).data,
|
||||
}
|
||||
|
||||
serializer = serializers.UndoFollowSerializer(follow)
|
||||
|
||||
assert serializer.data == expected
|
||||
|
||||
|
||||
def test_undo_follow_serializer_save(factories):
|
||||
follow = factories['federation.Follow'](approved=True)
|
||||
|
||||
data = {
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
'https://w3id.org/security/v1',
|
||||
{},
|
||||
],
|
||||
'id': follow.get_federation_url() + '/undo',
|
||||
'type': 'Undo',
|
||||
'actor': follow.actor.url,
|
||||
'object': serializers.FollowSerializer(follow).data,
|
||||
}
|
||||
|
||||
serializer = serializers.UndoFollowSerializer(data=data)
|
||||
assert serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
||||
with pytest.raises(models.Follow.DoesNotExist):
|
||||
follow.refresh_from_db()
|
||||
|
||||
|
||||
def test_undo_follow_serializer_validates_on_context(factories):
|
||||
follow = factories['federation.Follow'](approved=True)
|
||||
impostor = factories['federation.Actor']()
|
||||
data = {
|
||||
'@context': [
|
||||
'https://www.w3.org/ns/activitystreams',
|
||||
'https://w3id.org/security/v1',
|
||||
{},
|
||||
],
|
||||
'id': follow.get_federation_url() + '/undo',
|
||||
'type': 'Undo',
|
||||
'actor': impostor.url,
|
||||
'object': serializers.FollowSerializer(follow).data,
|
||||
}
|
||||
|
||||
serializer = serializers.UndoFollowSerializer(
|
||||
data=data,
|
||||
context={'follow_actor': impostor, 'follow_target': impostor})
|
||||
|
||||
assert serializer.is_valid() is False
|
||||
assert 'actor' in serializer.errors['object']
|
||||
assert 'object' in serializer.errors['object']
|
||||
|
||||
|
||||
def test_paginated_collection_serializer(factories):
|
||||
tfs = factories['music.TrackFile'].create_batch(size=5)
|
||||
actor = factories['federation.Actor'](local=True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue