kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
97 wiersze
2.6 KiB
Python
97 wiersze
2.6 KiB
Python
import pytest
|
|
|
|
from funkwhale_api.common import filters
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"value, expected",
|
|
[
|
|
(True, True),
|
|
("True", True),
|
|
("true", True),
|
|
("1", True),
|
|
("yes", True),
|
|
(False, False),
|
|
("False", False),
|
|
("false", False),
|
|
("0", False),
|
|
("no", False),
|
|
("None", None),
|
|
("none", None),
|
|
("Null", None),
|
|
("null", None),
|
|
],
|
|
)
|
|
def test_mutation_filter_is_approved(value, expected, factories):
|
|
mutations = {
|
|
True: factories["common.Mutation"](is_approved=True, payload={}),
|
|
False: factories["common.Mutation"](is_approved=False, payload={}),
|
|
None: factories["common.Mutation"](is_approved=None, payload={}),
|
|
}
|
|
|
|
qs = mutations[True].__class__.objects.all()
|
|
|
|
filterset = filters.MutationFilter(
|
|
{"q": "is_approved:{}".format(value)}, queryset=qs
|
|
)
|
|
|
|
assert list(filterset.qs) == [mutations[expected]]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"scope, user_index, expected_tracks",
|
|
[
|
|
("me", 0, [0]),
|
|
("me", 1, [1]),
|
|
("me", 2, []),
|
|
("all", 0, [0, 1, 2]),
|
|
("all", 1, [0, 1, 2]),
|
|
("all", 2, [0, 1, 2]),
|
|
("noop", 0, []),
|
|
("noop", 1, []),
|
|
("noop", 2, []),
|
|
("actor:actor1@domain.test", 0, [0]),
|
|
("actor:actor2@domain.test", 0, [1]),
|
|
("domain:domain.test", 0, [0, 1]),
|
|
],
|
|
)
|
|
def test_actor_scope_filter(
|
|
scope,
|
|
user_index,
|
|
expected_tracks,
|
|
queryset_equal_list,
|
|
factories,
|
|
mocker,
|
|
anonymous_user,
|
|
):
|
|
domain = factories["federation.Domain"](name="domain.test")
|
|
actor1 = factories["users.User"]().create_actor(
|
|
preferred_username="actor1", domain=domain
|
|
)
|
|
actor2 = factories["users.User"]().create_actor(
|
|
preferred_username="actor2", domain=domain
|
|
)
|
|
users = [actor1.user, actor2.user, anonymous_user]
|
|
tracks = [
|
|
factories["music.Upload"](library__actor=actor1, playable=True).track,
|
|
factories["music.Upload"](library__actor=actor2, playable=True).track,
|
|
factories["music.Upload"](playable=True).track,
|
|
]
|
|
|
|
class FS(filters.filters.FilterSet):
|
|
scope = filters.ActorScopeFilter(
|
|
actor_field="uploads__library__actor", distinct=True
|
|
)
|
|
|
|
class Meta:
|
|
model = tracks[0].__class__
|
|
fields = ["scope"]
|
|
|
|
queryset = tracks[0].__class__.objects.all()
|
|
request = mocker.Mock(user=users[user_index])
|
|
filterset = FS({"scope": scope}, queryset=queryset.order_by("id"), request=request)
|
|
|
|
expected = [tracks[i] for i in expected_tracks]
|
|
|
|
assert filterset.qs == expected
|