From 87daa81762d0b8fd7c4a34671a8f6173a7921e5e Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Thu, 5 Apr 2018 23:27:19 +0200
Subject: [PATCH] More factories

---
 api/funkwhale_api/federation/factories.py | 47 +++++++++++++++++++++++
 api/funkwhale_api/music/factories.py      | 18 +++++++++
 2 files changed, 65 insertions(+)

diff --git a/api/funkwhale_api/federation/factories.py b/api/funkwhale_api/federation/factories.py
index 277b9ce0..63d40aff 100644
--- a/api/funkwhale_api/federation/factories.py
+++ b/api/funkwhale_api/federation/factories.py
@@ -1,6 +1,7 @@
 import factory
 import requests
 import requests_http_signature
+import uuid
 
 from django.utils import timezone
 from django.conf import settings
@@ -52,6 +53,21 @@ class SignedRequestFactory(factory.Factory):
         self.headers.update(default_headers)
 
 
+@registry.register(name='federation.Link')
+class LinkFactory(factory.Factory):
+    type = 'Link'
+    href = factory.Faker('url')
+    mediaType = 'text/html'
+
+    class Meta:
+        model = dict
+
+    class Params:
+        audio = factory.Trait(
+            mediaType=factory.Iterator(['audio/mp3', 'audio/ogg'])
+        )
+
+
 @registry.register
 class ActorFactory(factory.DjangoModelFactory):
     public_key = None
@@ -135,3 +151,34 @@ class ActivityFactory(factory.Factory):
 
     class Meta:
         model = dict
+
+
+@registry.register(name='federation.AudioMetadata')
+class AudioMetadataFactory(factory.Factory):
+    recording = factory.LazyAttribute(
+        lambda o: 'https://musicbrainz.org/recording/{}'.format(uuid.uuid4())
+    )
+    artist = factory.LazyAttribute(
+        lambda o: 'https://musicbrainz.org/artist/{}'.format(uuid.uuid4())
+    )
+    release = factory.LazyAttribute(
+        lambda o: 'https://musicbrainz.org/release/{}'.format(uuid.uuid4())
+    )
+
+    class Meta:
+        model = dict
+
+
+@registry.register(name='federation.Audio')
+class AudioFactory(factory.Factory):
+    type = 'Audio'
+    id = factory.Faker('url')
+    published = factory.LazyFunction(
+        lambda: timezone.now().isoformat()
+    )
+    actor = factory.Faker('url')
+    url = factory.SubFactory(LinkFactory, audio=True)
+    metadata = factory.SubFactory(AudioMetadataFactory)
+
+    class Meta:
+        model = dict
diff --git a/api/funkwhale_api/music/factories.py b/api/funkwhale_api/music/factories.py
index 303e4522..27387ca9 100644
--- a/api/funkwhale_api/music/factories.py
+++ b/api/funkwhale_api/music/factories.py
@@ -2,6 +2,10 @@ import factory
 import os
 
 from funkwhale_api.factories import registry, ManyToManyFromList
+from funkwhale_api.federation.factories import (
+    AudioMetadataFactory,
+    ActorFactory,
+)
 from funkwhale_api.users.factories import UserFactory
 
 SAMPLES_PATH = os.path.join(
@@ -61,6 +65,13 @@ class ImportBatchFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = 'music.ImportBatch'
 
+    class Params:
+        federation = factory.Trait(
+            submitted_by=None,
+            federation_actor=factory.SubFactory(ActorFactory),
+            source='federation',
+        )
+
 
 @registry.register
 class ImportJobFactory(factory.django.DjangoModelFactory):
@@ -71,6 +82,13 @@ class ImportJobFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = 'music.ImportJob'
 
+    class Params:
+        federation = factory.Trait(
+            batch=factory.SubFactory(ImportBatchFactory, federation=True),
+            federation_source=factory.Faker('url'),
+            metadata=factory.SubFactory(AudioMetadataFactory),
+        )
+
 
 @registry.register(name='music.FileImportJob')
 class FileImportJobFactory(ImportJobFactory):
-- 
GitLab