Skip to content
Snippets Groups Projects
factories.py 4.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • Eliot Berriot's avatar
    Eliot Berriot committed
    import factory
    
    from funkwhale_api.factories import ManyToManyFromList, registry
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    from funkwhale_api.federation.factories import LibraryTrackFactory
    
    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__)))),
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        "tests",
        "music",
    
    @registry.register
    
    class ArtistFactory(factory.django.DjangoModelFactory):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        name = factory.Faker("name")
        mbid = factory.Faker("uuid4")
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "music.Artist"
    
    @registry.register
    
    class AlbumFactory(factory.django.DjangoModelFactory):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        title = factory.Faker("sentence", nb_words=3)
        mbid = factory.Faker("uuid4")
        release_date = factory.Faker("date_object")
    
        cover = factory.django.ImageField()
        artist = factory.SubFactory(ArtistFactory)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        release_group_id = factory.Faker("uuid4")
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "music.Album"
    
    @registry.register
    
    class TrackFactory(factory.django.DjangoModelFactory):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        title = factory.Faker("sentence", nb_words=3)
        mbid = factory.Faker("uuid4")
    
        album = factory.SubFactory(AlbumFactory)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        artist = factory.SelfAttribute("album.artist")
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        tags = ManyToManyFromList("tags")
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "music.Track"
    
    @registry.register
    
    class TrackFileFactory(factory.django.DjangoModelFactory):
        track = factory.SubFactory(TrackFactory)
    
        audio_file = factory.django.FileField(
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            from_path=os.path.join(SAMPLES_PATH, "test.ogg")
        )
    
        bitrate = None
        size = None
        duration = None
    
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "music.TrackFile"
    
        class Params:
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            in_place = factory.Trait(audio_file=None)
    
            federation = factory.Trait(
                audio_file=None,
                library_track=factory.SubFactory(LibraryTrackFactory),
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                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:
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "music.ImportBatch"
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        class Params:
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            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)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        source = factory.Faker("url")
        mbid = factory.Faker("uuid4")
    
        replace_if_duplicate = False
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            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),
            )
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                status="finished", track_file=factory.SubFactory(TrackFileFactory)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            in_place = factory.Trait(status="finished", audio_file=None)
    
            with_audio_file = factory.Trait(
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                status="finished",
    
                audio_file=factory.django.FileField(
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                    from_path=os.path.join(SAMPLES_PATH, "test.ogg")
                ),
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    @registry.register(name="music.FileImportJob")
    
    class FileImportJobFactory(ImportJobFactory):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        source = "file://"
    
        mbid = None
        audio_file = factory.django.FileField(
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            from_path=os.path.join(SAMPLES_PATH, "test.ogg")
        )
    
    @registry.register
    
    class WorkFactory(factory.django.DjangoModelFactory):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        mbid = factory.Faker("uuid4")
        language = "eng"
        nature = "song"
        title = factory.Faker("sentence", nb_words=3)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "music.Work"
    
    @registry.register
    
    class LyricsFactory(factory.django.DjangoModelFactory):
        work = factory.SubFactory(WorkFactory)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        url = factory.Faker("url")
        content = factory.Faker("paragraphs", nb=4)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "music.Lyrics"
    
    @registry.register
    
    class TagFactory(factory.django.DjangoModelFactory):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        name = factory.SelfAttribute("slug")
        slug = factory.Faker("slug")
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            model = "taggit.Tag"