Resolve "Hide an artist in the UI"

This commit is contained in:
Eliot Berriot 2019-02-14 10:49:06 +01:00
commit bdf83bd8ff
50 changed files with 1051 additions and 49 deletions

View file

View file

@ -0,0 +1,68 @@
from funkwhale_api.moderation import filters
from funkwhale_api.music import models as music_models
def test_hidden_defaults_to_true(factories, queryset_equal_list, mocker):
user = factories["users.User"]()
artist = factories["music.Artist"]()
hidden_artist = factories["music.Artist"]()
factories["moderation.UserFilter"](target_artist=hidden_artist, user=user)
class FS(filters.HiddenContentFilterSet):
class Meta:
hidden_content_fields_mapping = {"target_artist": ["pk"]}
filterset = FS(
data={},
queryset=music_models.Artist.objects.all(),
request=mocker.Mock(user=user),
)
assert filterset.data["hidden"] is False
queryset = filterset.filter_hidden_content(
music_models.Artist.objects.all(), "", False
)
assert queryset == [artist]
def test_hidden_false(factories, queryset_equal_list, mocker):
user = factories["users.User"]()
factories["music.Artist"]()
hidden_artist = factories["music.Artist"]()
factories["moderation.UserFilter"](target_artist=hidden_artist, user=user)
class FS(filters.HiddenContentFilterSet):
class Meta:
hidden_content_fields_mapping = {"target_artist": ["pk"]}
filterset = FS(
data={},
queryset=music_models.Artist.objects.all(),
request=mocker.Mock(user=user),
)
queryset = filterset.filter_hidden_content(
music_models.Artist.objects.all(), "", True
)
assert queryset == [hidden_artist]
def test_hidden_anonymous(factories, queryset_equal_list, mocker, anonymous_user):
artist = factories["music.Artist"]()
class FS(filters.HiddenContentFilterSet):
class Meta:
hidden_content_fields_mapping = {"target_artist": ["pk"]}
filterset = FS(
data={},
queryset=music_models.Artist.objects.all(),
request=mocker.Mock(user=anonymous_user),
)
queryset = filterset.filter_hidden_content(
music_models.Artist.objects.all(), "", True
)
assert queryset == [artist]

View file

@ -0,0 +1,30 @@
from funkwhale_api.moderation import serializers
def test_user_filter_serializer_repr(factories):
artist = factories["music.Artist"]()
content_filter = factories["moderation.UserFilter"](target_artist=artist)
expected = {
"uuid": str(content_filter.uuid),
"target": {"type": "artist", "id": artist.pk, "name": artist.name},
"creation_date": content_filter.creation_date.isoformat().replace(
"+00:00", "Z"
),
}
serializer = serializers.UserFilterSerializer(content_filter)
assert serializer.data == expected
def test_user_filter_serializer_save(factories):
artist = factories["music.Artist"]()
user = factories["users.User"]()
data = {"target": {"type": "artist", "id": artist.pk}}
serializer = serializers.UserFilterSerializer(data=data)
serializer.is_valid(raise_exception=True)
content_filter = serializer.save(user=user)
assert content_filter.target_artist == artist

View file

@ -0,0 +1,24 @@
from django.urls import reverse
def test_restrict_to_own_filters(factories, logged_in_api_client):
cf = factories["moderation.UserFilter"](
for_artist=True, user=logged_in_api_client.user
)
factories["moderation.UserFilter"](for_artist=True)
url = reverse("api:v1:moderation:content-filters-list")
response = logged_in_api_client.get(url)
assert response.status_code == 200
assert response.data["count"] == 1
assert response.data["results"][0]["uuid"] == str(cf.uuid)
def test_create_filter(factories, logged_in_api_client):
artist = factories["music.Artist"]()
url = reverse("api:v1:moderation:content-filters-list")
data = {"target": {"type": "artist", "id": artist.pk}}
response = logged_in_api_client.post(url, data, format="json")
cf = logged_in_api_client.user.content_filters.latest("id")
assert cf.target_artist == artist
assert response.status_code == 201