Fix #351: Ensure we do not import artists with empty names

merge-requests/315/head
Eliot Berriot 2018-07-09 22:35:32 +02:00
rodzic 03eb2be2b8
commit 93cd72ff09
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: DD6965E2476E5C27
4 zmienionych plików z 20 dodań i 1 usunięć

Wyświetl plik

@ -3,12 +3,19 @@ def load(model, *args, **kwargs):
return importer.load(*args, **kwargs)
EXCLUDE_VALIDATION = {"Track": ["artist"]}
class Importer(object):
def __init__(self, model):
self.model = model
def load(self, cleaned_data, raw_data, import_hooks):
mbid = cleaned_data.pop("mbid")
# let's validate data, just in case
instance = self.model(**cleaned_data)
exclude = EXCLUDE_VALIDATION.get(self.model.__name__, [])
instance.full_clean(exclude=["mbid", "uuid"] + exclude)
m = self.model.objects.update_or_create(mbid=mbid, defaults=cleaned_data)[0]
for hook in import_hooks:
hook(m, cleaned_data, raw_data)

Wyświetl plik

@ -1,10 +1,15 @@
import json
import os
import pytest
import uuid
from django import forms
from django.urls import reverse
from funkwhale_api.federation import actors
from funkwhale_api.federation import serializers as federation_serializers
from funkwhale_api.music import importers
from funkwhale_api.music import models
from funkwhale_api.music import tasks
DATA_DIR = os.path.dirname(os.path.abspath(__file__))
@ -237,3 +242,9 @@ def test__do_import_in_place_mbid(factories, tmpfile):
assert bool(tf.audio_file) is False
assert tf.source == "file://{}".format(path)
assert tf.mimetype == "audio/ogg"
def test_importer_cleans():
importer = importers.Importer(models.Artist)
with pytest.raises(forms.ValidationError):
importer.load({"name": "", "mbid": uuid.uuid4()}, {}, [])

Wyświetl plik

@ -126,4 +126,4 @@ def test_can_filter_closed_invitations(factories):
used = factories["users.User"](invited=True).invitation
assert models.Invitation.objects.count() == 3
assert list(models.Invitation.objects.open(False)) == [expired, used]
assert list(models.Invitation.objects.order_by("id").open(False)) == [expired, used]

Wyświetl plik

@ -0,0 +1 @@
Ensure we do not import artists with empty names (#351)