Skip to content
Snippets Groups Projects
factories.py 3.97 KiB
Newer Older
  • Learn to ignore specific revisions
  • from funkwhale_api.factories import registry, ManyToManyFromList
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    from funkwhale_api.federation.factories import (
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    )
    
    from funkwhale_api.users.factories import UserFactory
    
    SAMPLES_PATH = os.path.join(
        os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
        'tests', 'music'
    )
    
    @registry.register
    
    class ArtistFactory(factory.django.DjangoModelFactory):
    
        name = factory.Faker('name')
    
        mbid = factory.Faker('uuid4')
    
        class Meta:
            model = 'music.Artist'
    
    
    
    @registry.register
    
    class AlbumFactory(factory.django.DjangoModelFactory):
    
        title = factory.Faker('sentence', nb_words=3)
    
        release_date = factory.Faker('date_object')
    
        cover = factory.django.ImageField()
        artist = factory.SubFactory(ArtistFactory)
    
        release_group_id = factory.Faker('uuid4')
    
    @registry.register
    
    class TrackFactory(factory.django.DjangoModelFactory):
    
        title = factory.Faker('sentence', nb_words=3)
    
        mbid = factory.Faker('uuid4')
        album = factory.SubFactory(AlbumFactory)
        artist = factory.SelfAttribute('album.artist')
        position = 1
    
        tags = ManyToManyFromList('tags')
    
    @registry.register
    
    class TrackFileFactory(factory.django.DjangoModelFactory):
        track = factory.SubFactory(TrackFactory)
    
        audio_file = factory.django.FileField(
            from_path=os.path.join(SAMPLES_PATH, 'test.ogg'))
    
        class Params:
    
            in_place = factory.Trait(
                audio_file=None,
            )
    
            federation = factory.Trait(
                audio_file=None,
                library_track=factory.SubFactory(LibraryTrackFactory),
                mimetype=factory.LazyAttribute(
                    lambda o: o.library_track.audio_mimetype
                ),
                source=factory.LazyAttribute(
                    lambda o: o.library_track.audio_url
                ),
            )
    
    
    @registry.register
    
    class ImportBatchFactory(factory.django.DjangoModelFactory):
        submitted_by = factory.SubFactory(UserFactory)
    
        class Meta:
            model = 'music.ImportBatch'
    
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        class Params:
            federation = factory.Trait(
                submitted_by=None,
                source='federation',
            )
    
            finished = factory.Trait(
                status='finished',
            )
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    
    
    @registry.register
    
    class ImportJobFactory(factory.django.DjangoModelFactory):
        batch = factory.SubFactory(ImportBatchFactory)
        source = factory.Faker('url')
    
        mbid = factory.Faker('uuid4')
    
    
        class Meta:
            model = 'music.ImportJob'
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        class Params:
            federation = factory.Trait(
    
                mbid=None,
                library_track=factory.SubFactory(LibraryTrackFactory),
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                batch=factory.SubFactory(ImportBatchFactory, federation=True),
            )
    
            finished = factory.Trait(
                status='finished',
                track_file=factory.SubFactory(TrackFileFactory),
            )
    
            in_place = factory.Trait(
                status='finished',
                audio_file=None,
            )
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    
    
    @registry.register(name='music.FileImportJob')
    class FileImportJobFactory(ImportJobFactory):
        source = 'file://'
        mbid = None
        audio_file = factory.django.FileField(
            from_path=os.path.join(SAMPLES_PATH, 'test.ogg'))
    
    
    
    @registry.register
    
    class WorkFactory(factory.django.DjangoModelFactory):
        mbid = factory.Faker('uuid4')
        language = 'eng'
        nature = 'song'
        title = factory.Faker('sentence', nb_words=3)
    
        class Meta:
            model = 'music.Work'
    
    
    
    @registry.register
    
    class LyricsFactory(factory.django.DjangoModelFactory):
        work = factory.SubFactory(WorkFactory)
        url = factory.Faker('url')
        content = factory.Faker('paragraphs', nb=4)
    
        class Meta:
            model = 'music.Lyrics'
    
    
    
    @registry.register
    
    class TagFactory(factory.django.DjangoModelFactory):
        name = factory.SelfAttribute('slug')
        slug = factory.Faker('slug')
    
        class Meta:
            model = 'taggit.Tag'