From 6fbf8fa44cf2d9c4ccf2bfebce72786669031f36 Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Sun, 1 Apr 2018 10:17:06 +0200 Subject: [PATCH] Actor factory and fixture --- api/funkwhale_api/federation/factories.py | 32 +++++++++++++++-------- api/tests/federation/conftest.py | 10 +++++++ api/tests/federation/test_views.py | 26 +++++++++--------- 3 files changed, 44 insertions(+), 24 deletions(-) create mode 100644 api/tests/federation/conftest.py diff --git a/api/funkwhale_api/federation/factories.py b/api/funkwhale_api/federation/factories.py index e290eee634..d34242fc8e 100644 --- a/api/funkwhale_api/federation/factories.py +++ b/api/funkwhale_api/federation/factories.py @@ -5,6 +5,7 @@ import requests_http_signature from funkwhale_api.factories import registry from . import keys +from . import models registry.register(keys.get_key_pair, name='federation.KeyPair') @@ -48,14 +49,23 @@ class SignedRequestFactory(factory.Factory): self.headers.update(default_headers) -# @registry.register -# class ActorFactory(factory.DjangoModelFactory): -# url = factory.Faker('url') -# inbox_url = factory.Faker('url') -# outbox_url = factory.Faker('url') -# public_key = factory.LazyFunction(lambda: keys.get_key_pair()[1]) -# preferred_username = factory.Faker('username') -# summary = factory.Faker('paragraph') -# -# class Meta: -# model = models.Actor +@registry.register +class ActorFactory(factory.DjangoModelFactory): + url = factory.Faker('url') + inbox_url = factory.Faker('url') + outbox_url = factory.Faker('url') + public_key = None + private_key = None + preferred_username = factory.Faker('user_name') + summary = factory.Faker('paragraph') + + class Meta: + model = models.Actor + + @classmethod + def _generate(cls, create, attrs): + has_public = attrs.get('public_key') is None + has_private = attrs.get('private_key') is None + if not has_public and not has_private: + attrs['private_key'], attrs['public'] = keys.get_key_pair() + return super()._generate(create, attrs) diff --git a/api/tests/federation/conftest.py b/api/tests/federation/conftest.py new file mode 100644 index 0000000000..c5831914be --- /dev/null +++ b/api/tests/federation/conftest.py @@ -0,0 +1,10 @@ +import pytest + + +@pytest.fixture +def authenticated_actor(nodb_factories, mocker): + actor = nodb_factories['federation.Actor']() + mocker.patch( + 'funkwhale_api.federation.authentication.SignatureAuthentication.authenticate_actor', + return_value=actor) + yield actor diff --git a/api/tests/federation/test_views.py b/api/tests/federation/test_views.py index 96cf8ff7fb..5ec53279a7 100644 --- a/api/tests/federation/test_views.py +++ b/api/tests/federation/test_views.py @@ -21,19 +21,19 @@ def test_instance_actors(system_actor, db, settings, api_client): assert response.data == serializer.data -# @pytest.mark.parametrize('route', [ -# 'instance-outbox', -# 'instance-inbox', -# 'instance-actor', -# 'well-known-webfinger', -# ]) -# def test_instance_inbox_405_if_federation_disabled( -# db, settings, api_client, route): -# settings.FEDERATION_ENABLED = False -# url = reverse('federation:{}'.format(route)) -# response = api_client.get(url) -# -# assert response.status_code == 405 +@pytest.mark.parametrize('route,kwargs', [ + ('instance-actors-outbox', {'actor': 'library'}), + ('instance-actors-inbox', {'actor': 'library'}), + ('instance-actors-detail', {'actor': 'library'}), + ('well-known-webfinger', {}), +]) +def test_instance_inbox_405_if_federation_disabled( + authenticated_actor, db, settings, api_client, route, kwargs): + settings.FEDERATION_ENABLED = False + url = reverse('federation:{}'.format(route), kwargs=kwargs) + response = api_client.get(url) + + assert response.status_code == 405 def test_wellknown_webfinger_validates_resource( -- GitLab