Newer
Older
import factory
from funkwhale_api.factories import ManyToManyFromList, registry
from funkwhale_api.federation import factories as federation_factories
from funkwhale_api.users import factories as users_factories
SAMPLES_PATH = os.path.join(
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
Eliot Berriot
committed
def playable_factory(field):
@factory.post_generation
def inner(self, create, extracted, **kwargs):
if not create:
return
if extracted:
UploadFactory(
library__privacy_level="everyone",
import_status="finished",
**{field: self}
)
return inner
Eliot Berriot
committed
class ArtistFactory(factory.django.DjangoModelFactory):
name = factory.Faker("name")
mbid = factory.Faker("uuid4")
playable = playable_factory("track__album__artist")
Eliot Berriot
committed
class Meta:
Eliot Berriot
committed
Eliot Berriot
committed
class AlbumFactory(factory.django.DjangoModelFactory):
title = factory.Faker("sentence", nb_words=3)
mbid = factory.Faker("uuid4")
release_date = factory.Faker("date_object")
Eliot Berriot
committed
cover = factory.django.ImageField()
artist = factory.SubFactory(ArtistFactory)
playable = playable_factory("track__album")
Eliot Berriot
committed
class Meta:
Eliot Berriot
committed
Eliot Berriot
committed
class TrackFactory(factory.django.DjangoModelFactory):
title = factory.Faker("sentence", nb_words=3)
mbid = factory.Faker("uuid4")
Eliot Berriot
committed
album = factory.SubFactory(AlbumFactory)
Eliot Berriot
committed
position = 1
playable = playable_factory("track")
Eliot Berriot
committed
class Meta:
Eliot Berriot
committed
class UploadFactory(factory.django.DjangoModelFactory):
fid = factory.Faker("federation_url")
Eliot Berriot
committed
track = factory.SubFactory(TrackFactory)
library = factory.SubFactory(federation_factories.MusicLibraryFactory)
Eliot Berriot
committed
bitrate = None
size = None
duration = None
Eliot Berriot
committed
class Meta:
playable = factory.Trait(
import_status="finished", library__privacy_level="everyone"
)
class WorkFactory(factory.django.DjangoModelFactory):
mbid = factory.Faker("uuid4")
language = "eng"
nature = "song"
title = factory.Faker("sentence", nb_words=3)
class LyricsFactory(factory.django.DjangoModelFactory):
work = factory.SubFactory(WorkFactory)
url = factory.Faker("url")
content = factory.Faker("paragraphs", nb=4)
class TagFactory(factory.django.DjangoModelFactory):
name = factory.SelfAttribute("slug")
slug = factory.Faker("slug")
# XXX To remove
class ImportBatchFactory(factory.django.DjangoModelFactory):
submitted_by = factory.SubFactory(users_factories.UserFactory)
class Meta:
model = "music.ImportBatch"
@registry.register
class ImportJobFactory(factory.django.DjangoModelFactory):
batch = factory.SubFactory(ImportBatchFactory)
source = factory.Faker("url")
mbid = factory.Faker("uuid4")
replace_if_duplicate = False
class Meta:
model = "music.ImportJob"