diff --git a/api/funkwhale_api/history/tests/factories.py b/api/funkwhale_api/history/tests/factories.py new file mode 100644 index 0000000000000000000000000000000000000000..0a411adf0ce02467e41fe8dd94958755606f0b95 --- /dev/null +++ b/api/funkwhale_api/history/tests/factories.py @@ -0,0 +1,12 @@ +import factory +from funkwhale_api.music.tests import factories + +from funkwhale_api.users.tests.factories import UserFactory + + +class ListeningFactory(factory.django.DjangoModelFactory): + user = factory.SubFactory(UserFactory) + track = factory.SubFactory(factories.TrackFactory) + + class Meta: + model = 'history.Listening' diff --git a/api/funkwhale_api/history/tests/test_history.py b/api/funkwhale_api/history/tests/test_history.py index 61009615a607ac7c3f6a0dcd1876d2413cddb1e3..a5b771f09ae64492a4309fd9a86863d59f824fef 100644 --- a/api/funkwhale_api/history/tests/test_history.py +++ b/api/funkwhale_api/history/tests/test_history.py @@ -5,11 +5,12 @@ from django.core.urlresolvers import reverse from django.core.exceptions import ValidationError from django.utils import timezone -from model_mommy import mommy +from funkwhale_api.music.tests.factories import TrackFactory from funkwhale_api.users.models import User from funkwhale_api.history import models + class TestHistory(TestCase): def setUp(self): @@ -17,12 +18,12 @@ class TestHistory(TestCase): self.user = User.objects.create_user(username='test', email='test@test.com', password='test') def test_can_create_listening(self): - track = mommy.make('music.Track') + track = TrackFactory() now = timezone.now() l = models.Listening.objects.create(user=self.user, track=track) def test_anonymous_user_can_create_listening_via_api(self): - track = mommy.make('music.Track') + track = TrackFactory() url = self.reverse('api:v1:history:listenings-list') response = self.client.post(url, { 'track': track.pk, @@ -34,7 +35,7 @@ class TestHistory(TestCase): self.assertIsNotNone(listening.session_key) def test_logged_in_user_can_create_listening_via_api(self): - track = mommy.make('music.Track') + track = TrackFactory() self.client.login(username=self.user.username, password='test') diff --git a/api/funkwhale_api/music/tests/factories.py b/api/funkwhale_api/music/tests/factories.py index b554e3e14a934bc26281130dc869ec09907dc80f..567e2a765f426e8ca9ce4359bf6644431ef97dec 100644 --- a/api/funkwhale_api/music/tests/factories.py +++ b/api/funkwhale_api/music/tests/factories.py @@ -59,3 +59,30 @@ class ImportJobFactory(factory.django.DjangoModelFactory): class Meta: model = 'music.ImportJob' + + +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' + + +class LyricsFactory(factory.django.DjangoModelFactory): + work = factory.SubFactory(WorkFactory) + url = factory.Faker('url') + content = factory.Faker('paragraphs', nb=4) + + class Meta: + model = 'music.Lyrics' + + +class TagFactory(factory.django.DjangoModelFactory): + name = factory.SelfAttribute('slug') + slug = factory.Faker('slug') + + class Meta: + model = 'taggit.Tag' diff --git a/api/funkwhale_api/music/tests/test_lyrics.py b/api/funkwhale_api/music/tests/test_lyrics.py index 0ea22371bad091ed17796db24b58f414191979f4..7032e58087ff46eb3caa969a1c2c675b4343a817 100644 --- a/api/funkwhale_api/music/tests/test_lyrics.py +++ b/api/funkwhale_api/music/tests/test_lyrics.py @@ -2,24 +2,25 @@ import json import unittest from test_plus.test import TestCase from django.core.urlresolvers import reverse -from model_mommy import mommy from funkwhale_api.music import models from funkwhale_api.musicbrainz import api from funkwhale_api.music import serializers from funkwhale_api.users.models import User +from funkwhale_api.music import lyrics as lyrics_utils from .mocking import lyricswiki +from . import factories from . import data as api_data -from funkwhale_api.music import lyrics as lyrics_utils + + class TestLyrics(TestCase): @unittest.mock.patch('funkwhale_api.music.lyrics._get_html', return_value=lyricswiki.content) def test_works_import_lyrics_if_any(self, *mocks): - lyrics = mommy.make( - models.Lyrics, + lyrics = factories.LyricsFactory( url='http://lyrics.wikia.com/System_Of_A_Down:Chop_Suey!') lyrics.fetch_content() @@ -42,7 +43,7 @@ Is it me you're looking for? content = """Hello Is it me you're looking for?""" - l = mommy.make(models.Lyrics, content=content) + l = factories.LyricsFactory(content=content) expected = "<p>Hello<br />Is it me you're looking for?</p>" self.assertHTMLEqual(expected, l.content_rendered) @@ -54,8 +55,7 @@ Is it me you're looking for?""" @unittest.mock.patch('funkwhale_api.music.lyrics._get_html', return_value=lyricswiki.content) def test_works_import_lyrics_if_any(self, *mocks): - track = mommy.make( - models.Track, + track = factories.TrackFactory( work=None, mbid='07ca77cf-f513-4e9c-b190-d7e24bbad448') diff --git a/api/funkwhale_api/music/tests/test_music.py b/api/funkwhale_api/music/tests/test_music.py index cc01bc9edcacbae05c0e9cf4280d78df4d49a193..5cf9d0cf96d53c6060759b6a8c65cf1aaef6917f 100644 --- a/api/funkwhale_api/music/tests/test_music.py +++ b/api/funkwhale_api/music/tests/test_music.py @@ -2,13 +2,11 @@ from test_plus.test import TestCase import unittest.mock from funkwhale_api.music import models import datetime -from model_mommy import mommy + +from . import factories from . import data as api_data from .cover import binary_data -def prettyprint(d): - import json - print(json.dumps(d, sort_keys=True, indent=4)) class TestMusic(TestCase): @@ -79,9 +77,9 @@ class TestMusic(TestCase): self.assertEqual(track, track2) def test_album_tags_deduced_from_tracks_tags(self): - tag = mommy.make('taggit.Tag') - album = mommy.make('music.Album') - tracks = mommy.make('music.Track', album=album, _quantity=5) + tag = factories.TagFactory() + album = factories.AlbumFactory() + tracks = factories.TrackFactory.create_batch(album=album, size=5) for track in tracks: track.tags.add(tag) @@ -92,10 +90,10 @@ class TestMusic(TestCase): self.assertIn(tag, album.tags) def test_artist_tags_deduced_from_album_tags(self): - tag = mommy.make('taggit.Tag') - artist = mommy.make('music.Artist') - album = mommy.make('music.Album', artist=artist) - tracks = mommy.make('music.Track', album=album, _quantity=5) + tag = factories.TagFactory() + artist = factories.ArtistFactory() + album = factories.AlbumFactory(artist=artist) + tracks = factories.TrackFactory.create_batch(album=album, size=5) for track in tracks: track.tags.add(tag) @@ -108,7 +106,7 @@ class TestMusic(TestCase): @unittest.mock.patch('funkwhale_api.musicbrainz.api.images.get_front', return_value=binary_data) def test_can_download_image_file_for_album(self, *mocks): # client._api.get_image_front('55ea4f82-b42b-423e-a0e5-290ccdf443ed') - album = mommy.make('music.Album', mbid='55ea4f82-b42b-423e-a0e5-290ccdf443ed') + album = factories.AlbumFactory(mbid='55ea4f82-b42b-423e-a0e5-290ccdf443ed') album.get_image() album.save() diff --git a/api/funkwhale_api/music/tests/test_works.py b/api/funkwhale_api/music/tests/test_works.py index 84cb51cde09a54c131f76636f6d13545381cd063..b199c8c5b7d98f839296ba9e6f3c65a059ff98b1 100644 --- a/api/funkwhale_api/music/tests/test_works.py +++ b/api/funkwhale_api/music/tests/test_works.py @@ -2,22 +2,23 @@ import json import unittest from test_plus.test import TestCase from django.core.urlresolvers import reverse -from model_mommy import mommy from funkwhale_api.music import models from funkwhale_api.musicbrainz import api from funkwhale_api.music import serializers +from funkwhale_api.music.tests import factories from funkwhale_api.users.models import User from . import data as api_data + class TestWorks(TestCase): @unittest.mock.patch('funkwhale_api.musicbrainz.api.works.get', return_value=api_data.works['get']['chop_suey']) def test_can_import_work(self, *mocks): - recording = mommy.make( - models.Track, mbid='07ca77cf-f513-4e9c-b190-d7e24bbad448') + recording = factories.TrackFactory( + mbid='07ca77cf-f513-4e9c-b190-d7e24bbad448') mbid = 'e2ecabc4-1b9d-30b2-8f30-3596ec423dc5' work = models.Work.create_from_api(id=mbid) @@ -36,8 +37,7 @@ class TestWorks(TestCase): @unittest.mock.patch('funkwhale_api.musicbrainz.api.recordings.get', return_value=api_data.tracks['get']['chop_suey']) def test_can_get_work_from_recording(self, *mocks): - recording = mommy.make( - models.Track, + recording = factories.TrackFactory( work=None, mbid='07ca77cf-f513-4e9c-b190-d7e24bbad448') mbid = 'e2ecabc4-1b9d-30b2-8f30-3596ec423dc5' diff --git a/api/funkwhale_api/playlists/tests/test_playlists.py b/api/funkwhale_api/playlists/tests/test_playlists.py index 49025cd11b078e072e196325ce32506b448e142f..59054be2be4bbe51a0d3c99e5a9204f78d5b4aa6 100644 --- a/api/funkwhale_api/playlists/tests/test_playlists.py +++ b/api/funkwhale_api/playlists/tests/test_playlists.py @@ -4,8 +4,7 @@ from django.core.urlresolvers import reverse from django.core.exceptions import ValidationError from django.utils import timezone -from model_mommy import mommy - +from funkwhale_api.music.tests import factories from funkwhale_api.users.models import User from funkwhale_api.playlists import models from funkwhale_api.playlists.serializers import PlaylistSerializer @@ -18,7 +17,7 @@ class TestPlayLists(TestCase): self.user = User.objects.create_user(username='test', email='test@test.com', password='test') def test_can_create_playlist(self): - tracks = list(mommy.make('music.Track', _quantity=5)) + tracks = factories.TrackFactory.create_batch(size=5) playlist = models.Playlist.objects.create(user=self.user, name="test") previous = None @@ -49,7 +48,7 @@ class TestPlayLists(TestCase): self.assertEqual(playlist.name, 'test') def test_can_add_playlist_track_via_api(self): - tracks = list(mommy.make('music.Track', _quantity=5)) + tracks = factories.TrackFactory.create_batch(size=5) playlist = models.Playlist.objects.create(user=self.user, name="test") self.client.login(username=self.user.username, password='test') diff --git a/api/funkwhale_api/radios/tests/test_radios.py b/api/funkwhale_api/radios/tests/test_radios.py index 5729b4412104d906e208674177b893414ea9a44b..aec919ee0218d0163758165d5d040bd7db5ca85e 100644 --- a/api/funkwhale_api/radios/tests/test_radios.py +++ b/api/funkwhale_api/radios/tests/test_radios.py @@ -4,13 +4,15 @@ from test_plus.test import TestCase from django.core.urlresolvers import reverse from django.core.exceptions import ValidationError -from model_mommy import mommy from funkwhale_api.radios import radios from funkwhale_api.radios import models from funkwhale_api.favorites.models import TrackFavorite from funkwhale_api.users.models import User from funkwhale_api.music.models import Artist +from funkwhale_api.music.tests import factories +from funkwhale_api.history.tests.factories import ListeningFactory + class TestRadios(TestCase): @@ -55,7 +57,7 @@ class TestRadios(TestCase): self.assertTrue(picks[2] > picks[1]) def test_can_get_choices_for_favorites_radio(self): - tracks = mommy.make('music.Track', _quantity=100) + tracks = factories.TrackFactory.create_batch(size=100) for i in range(20): TrackFavorite.add(track=random.choice(tracks), user=self.user) @@ -73,7 +75,7 @@ class TestRadios(TestCase): self.assertIn(pick, choices) def test_can_use_radio_session_to_filter_choices(self): - tracks = mommy.make('music.Track', _quantity=30) + tracks = factories.TrackFactory.create_batch(size=30) radio = radios.RandomRadio() session = radio.start_session(self.user) @@ -85,7 +87,7 @@ class TestRadios(TestCase): self.assertEqual(len(set(tracks_id)), 30) def test_can_restore_radio_from_previous_session(self): - tracks = mommy.make('music.Track', _quantity=30) + tracks = factories.TrackFactory.create_batch(size=30) radio = radios.RandomRadio() session = radio.start_session(self.user) @@ -115,7 +117,7 @@ class TestRadios(TestCase): self.assertIsNotNone(session.session_key) def test_can_get_track_for_session_from_api(self): - tracks = mommy.make('music.Track', _quantity=1) + tracks = factories.TrackFactory.create_batch(size=1) self.client.login(username=self.user.username, password='test') url = reverse('api:v1:radios:sessions-list') @@ -129,7 +131,7 @@ class TestRadios(TestCase): self.assertEqual(data['track']['id'], tracks[0].id) self.assertEqual(data['position'], 1) - next_track = mommy.make('music.Track') + next_track = factories.TrackFactory() response = self.client.post(url, {'session': session.pk}) data = json.loads(response.content.decode('utf-8')) @@ -148,9 +150,10 @@ class TestRadios(TestCase): radio.start_session(self.user, related_object=self.user) def test_can_start_artist_radio(self): - artist = mommy.make('music.Artist') - wrong_tracks = mommy.make('music.Track', _quantity=30) - good_tracks = mommy.make('music.Track', artist=artist, _quantity=5) + artist = factories.ArtistFactory() + wrong_tracks = factories.TrackFactory.create_batch(size=30) + good_tracks = factories.TrackFactory.create_batch( + artist=artist, size=5) radio = radios.ArtistRadio() session = radio.start_session(self.user, related_object=artist) @@ -159,9 +162,9 @@ class TestRadios(TestCase): self.assertIn(radio.pick(), good_tracks) def test_can_start_tag_radio(self): - tag = mommy.make('taggit.Tag') - wrong_tracks = mommy.make('music.Track', _quantity=30) - good_tracks = mommy.make('music.Track', _quantity=5) + tag = factories.TagFactory() + wrong_tracks = factories.TrackFactory.create_batch(size=30) + good_tracks = factories.TrackFactory.create_batch(size=5) for track in good_tracks: track.tags.add(tag) @@ -172,7 +175,7 @@ class TestRadios(TestCase): self.assertIn(radio.pick(), good_tracks) def test_can_start_artist_radio_from_api(self): - artist = mommy.make('music.Artist') + artist = factories.ArtistFactory() url = reverse('api:v1:radios:sessions-list') response = self.client.post(url, {'radio_type': 'artist', 'related_object_id': artist.id}) @@ -181,10 +184,10 @@ class TestRadios(TestCase): self.assertEqual(session.related_object, artist) def test_can_start_less_listened_radio(self): - history = mommy.make('history.Listening', _quantity=5, user=self.user) + history = ListeningFactory.create_batch(size=5, user=self.user) wrong_tracks = [h.track for h in history] - good_tracks = mommy.make('music.Track', _quantity=30) + good_tracks = factories.TrackFactory.create_batch(size=30) radio = radios.LessListenedRadio() session = radio.start_session(self.user) diff --git a/api/requirements/test.txt b/api/requirements/test.txt index 7c304bbdb430bb46647c713a6e0cd1d85ed4111e..3606bc988e429c7a8ffe6b04f469fdbef5d4d66a 100644 --- a/api/requirements/test.txt +++ b/api/requirements/test.txt @@ -3,7 +3,6 @@ flake8==2.5.0 -model-mommy==1.3.2 pytest pytest-django pytest-mock