145 lines
4.6 KiB
Python
145 lines
4.6 KiB
Python
import json
|
|
import pytest
|
|
|
|
from django.urls import reverse
|
|
|
|
from funkwhale_api.music import tasks
|
|
|
|
|
|
def test_create_import_can_bind_to_request(
|
|
artists, albums, mocker, factories, superuser_api_client):
|
|
request = factories['requests.ImportRequest']()
|
|
|
|
mocker.patch('funkwhale_api.music.tasks.import_job_run')
|
|
mocker.patch(
|
|
'funkwhale_api.musicbrainz.api.artists.get',
|
|
return_value=artists['get']['soad'])
|
|
mocker.patch(
|
|
'funkwhale_api.musicbrainz.api.images.get_front',
|
|
return_value=b'')
|
|
mocker.patch(
|
|
'funkwhale_api.musicbrainz.api.releases.get',
|
|
return_value=albums['get_with_includes']['hypnotize'])
|
|
payload = {
|
|
'releaseId': '47ae093f-1607-49a3-be11-a15d335ccc94',
|
|
'importRequest': request.pk,
|
|
'tracks': [
|
|
{
|
|
'mbid': '1968a9d6-8d92-4051-8f76-674e157b6eed',
|
|
'source': 'https://www.youtube.com/watch?v=1111111111',
|
|
}
|
|
]
|
|
}
|
|
url = reverse('api:v1:submit-album')
|
|
response = superuser_api_client.post(
|
|
url, json.dumps(payload), content_type='application/json')
|
|
batch = request.import_batches.latest('id')
|
|
|
|
assert batch.import_request == request
|
|
|
|
|
|
@pytest.mark.parametrize('url,type,expected', [
|
|
('https://musicbrainz.org/artist/test', 'artist', 'test'),
|
|
('https://musicbrainz.org/release/test', 'release', 'test'),
|
|
('https://musicbrainz.org/recording/test', 'recording', 'test'),
|
|
('https://musicbrainz.org/recording/test', 'artist', None),
|
|
])
|
|
def test_get_mbid(url, type, expected):
|
|
assert tasks.get_mbid(url, type) == expected
|
|
|
|
|
|
def test_import_job_from_federation_no_musicbrainz(factories):
|
|
job = factories['music.ImportJob'](
|
|
federation=True,
|
|
metadata__artist={'name': 'Hello'},
|
|
metadata__release={'title': 'World'},
|
|
metadata__recording={'title': 'Ping'},
|
|
mbid=None,
|
|
)
|
|
|
|
tasks.import_job_run(import_job_id=job.pk)
|
|
job.refresh_from_db()
|
|
|
|
tf = job.track_file
|
|
assert tf.source == job.source
|
|
assert tf.federation_source == job.federation_source
|
|
assert tf.track.title == 'Ping'
|
|
assert tf.track.artist.name == 'Hello'
|
|
assert tf.track.album.title == 'World'
|
|
|
|
|
|
def test_import_job_from_federation_musicbrainz_recording(factories, mocker):
|
|
t = factories['music.Track']()
|
|
track_from_api = mocker.patch(
|
|
'funkwhale_api.music.models.Track.get_or_create_from_api',
|
|
return_value=t)
|
|
job = factories['music.ImportJob'](
|
|
federation=True,
|
|
metadata__artist={'name': 'Hello'},
|
|
metadata__release={'title': 'World'},
|
|
mbid=None,
|
|
)
|
|
|
|
tasks.import_job_run(import_job_id=job.pk)
|
|
job.refresh_from_db()
|
|
|
|
tf = job.track_file
|
|
assert tf.source == job.source
|
|
assert tf.federation_source == job.federation_source
|
|
assert tf.track == t
|
|
track_from_api.assert_called_once_with(
|
|
mbid=tasks.get_mbid(job.metadata['recording'], 'recording'))
|
|
|
|
|
|
def test_import_job_from_federation_musicbrainz_release(factories, mocker):
|
|
a = factories['music.Album']()
|
|
album_from_api = mocker.patch(
|
|
'funkwhale_api.music.models.Album.get_or_create_from_api',
|
|
return_value=a)
|
|
job = factories['music.ImportJob'](
|
|
federation=True,
|
|
metadata__artist={'name': 'Hello'},
|
|
metadata__recording={'title': 'Ping'},
|
|
mbid=None,
|
|
)
|
|
|
|
tasks.import_job_run(import_job_id=job.pk)
|
|
job.refresh_from_db()
|
|
|
|
tf = job.track_file
|
|
assert tf.federation_source == job.federation_source
|
|
assert tf.source == job.source
|
|
assert tf.track.title == 'Ping'
|
|
assert tf.track.artist == a.artist
|
|
assert tf.track.album == a
|
|
|
|
album_from_api.assert_called_once_with(
|
|
mbid=tasks.get_mbid(job.metadata['release'], 'release'))
|
|
|
|
|
|
def test_import_job_from_federation_musicbrainz_artist(factories, mocker):
|
|
a = factories['music.Artist']()
|
|
artist_from_api = mocker.patch(
|
|
'funkwhale_api.music.models.Artist.get_or_create_from_api',
|
|
return_value=a)
|
|
job = factories['music.ImportJob'](
|
|
federation=True,
|
|
metadata__release={'title': 'World'},
|
|
metadata__recording={'title': 'Ping'},
|
|
mbid=None,
|
|
)
|
|
|
|
tasks.import_job_run(import_job_id=job.pk)
|
|
job.refresh_from_db()
|
|
|
|
tf = job.track_file
|
|
assert tf.source == job.source
|
|
assert tf.federation_source == job.federation_source
|
|
assert tf.track.title == 'Ping'
|
|
assert tf.track.artist == a
|
|
assert tf.track.album.artist == a
|
|
assert tf.track.album.title == 'World'
|
|
|
|
artist_from_api.assert_called_once_with(
|
|
mbid=tasks.get_mbid(job.metadata['artist'], 'artist'))
|