Skip to content
Snippets Groups Projects
Verified Commit f19418d2 authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Added follow model and factory

parent 6aa6f1d8
No related branches found
No related tags found
No related merge requests found
...@@ -52,7 +52,7 @@ OBJECT_TYPES = [ ...@@ -52,7 +52,7 @@ OBJECT_TYPES = [
'Relationship', 'Relationship',
'Tombstone', 'Tombstone',
'Video', 'Video',
] ] + ACTIVITY_TYPES
def deliver(activity, on_behalf_of, to=[]): def deliver(activity, on_behalf_of, to=[]):
from . import actors from . import actors
......
...@@ -243,6 +243,7 @@ class TestActor(SystemActor): ...@@ -243,6 +243,7 @@ class TestActor(SystemActor):
# on a follow we: # on a follow we:
# 1. send the accept answer # 1. send the accept answer
# 2. follow back # 2. follow back
#
test_actor = self.get_actor_instance() test_actor = self.get_actor_instance()
accept_uuid = uuid.uuid4() accept_uuid = uuid.uuid4()
accept = activity.get_accept_follow( accept = activity.get_accept_follow(
...@@ -254,6 +255,12 @@ class TestActor(SystemActor): ...@@ -254,6 +255,12 @@ class TestActor(SystemActor):
accept, accept,
to=[ac['actor']], to=[ac['actor']],
on_behalf_of=test_actor) on_behalf_of=test_actor)
# we persist the sender in database
sender.save()
models.Follow.objects.get_or_create(
actor=sender,
target=test_actor,
)
follow_uuid = uuid.uuid4() follow_uuid = uuid.uuid4()
follow = activity.get_follow( follow = activity.get_follow(
follow_id=follow_uuid, follow_id=follow_uuid,
......
...@@ -53,7 +53,6 @@ class SignedRequestFactory(factory.Factory): ...@@ -53,7 +53,6 @@ class SignedRequestFactory(factory.Factory):
@registry.register @registry.register
class ActorFactory(factory.DjangoModelFactory): class ActorFactory(factory.DjangoModelFactory):
public_key = None public_key = None
private_key = None private_key = None
preferred_username = factory.Faker('user_name') preferred_username = factory.Faker('user_name')
...@@ -77,6 +76,15 @@ class ActorFactory(factory.DjangoModelFactory): ...@@ -77,6 +76,15 @@ class ActorFactory(factory.DjangoModelFactory):
return super()._generate(create, attrs) return super()._generate(create, attrs)
@registry.register
class FollowFactory(factory.DjangoModelFactory):
target = factory.SubFactory(ActorFactory)
actor = factory.SubFactory(ActorFactory)
class Meta:
model = models.Follow
@registry.register(name='federation.Note') @registry.register(name='federation.Note')
class NoteFactory(factory.Factory): class NoteFactory(factory.Factory):
type = 'Note' type = 'Note'
......
# Generated by Django 2.0.3 on 2018-04-03 19:21
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import uuid
class Migration(migrations.Migration):
dependencies = [
('federation', '0002_auto_20180403_1620'),
]
operations = [
migrations.CreateModel(
name='Follow',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('uuid', models.UUIDField(default=uuid.uuid4, unique=True)),
('creation_date', models.DateTimeField(default=django.utils.timezone.now)),
('last_modification_date', models.DateTimeField(default=django.utils.timezone.now)),
('actor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='emitted_follows', to='federation.Actor')),
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='received_follows', to='federation.Actor')),
],
),
migrations.AlterUniqueTogether(
name='follow',
unique_together={('actor', 'target')},
),
]
import uuid
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
...@@ -74,3 +76,23 @@ class Actor(models.Model): ...@@ -74,3 +76,23 @@ class Actor(models.Model):
from . import actors from . import actors
if self.is_system: if self.is_system:
return actors.SYSTEM_ACTORS[self.preferred_username] return actors.SYSTEM_ACTORS[self.preferred_username]
class Follow(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
actor = models.ForeignKey(
Actor,
related_name='emitted_follows',
on_delete=models.CASCADE,
)
target = models.ForeignKey(
Actor,
related_name='received_follows',
on_delete=models.CASCADE,
)
creation_date = models.DateTimeField(default=timezone.now)
last_modification_date = models.DateTimeField(
default=timezone.now)
class Meta:
unique_together = ['actor', 'target']
...@@ -313,3 +313,7 @@ def test_test_actor_handles_follow( ...@@ -313,3 +313,7 @@ def test_test_actor_handles_follow(
) )
] ]
deliver.assert_has_calls(expected_calls) deliver.assert_has_calls(expected_calls)
follow = test_actor.received_follows.first()
assert follow.actor == actor
assert follow.target == test_actor
import pytest
from django import db
from funkwhale_api.federation import models
def test_cannot_duplicate_actor(factories):
actor = factories['federation.Actor']()
with pytest.raises(db.IntegrityError):
factories['federation.Actor'](
domain=actor.domain,
preferred_username=actor.preferred_username,
)
def test_cannot_duplicate_follow(factories):
follow = factories['federation.Follow']()
with pytest.raises(db.IntegrityError):
factories['federation.Follow'](
target=follow.target,
actor=follow.actor,
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment