Resolve "Hide an artist in the UI"
This commit is contained in:
parent
d4d4e60e39
commit
bdf83bd8ff
50 changed files with 1051 additions and 49 deletions
0
api/tests/moderation/__init__.py
Normal file
0
api/tests/moderation/__init__.py
Normal file
68
api/tests/moderation/test_filters.py
Normal file
68
api/tests/moderation/test_filters.py
Normal 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]
|
||||
30
api/tests/moderation/test_serializers.py
Normal file
30
api/tests/moderation/test_serializers.py
Normal 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
|
||||
24
api/tests/moderation/test_views.py
Normal file
24
api/tests/moderation/test_views.py
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue