Newer
Older
Eliot Berriot
committed
import pytest
Eliot Berriot
committed
from funkwhale_api.users import models
from funkwhale_api.federation import utils as federation_utils
Eliot Berriot
committed
user = factories["users.User"](username="hello")
assert user.__str__() == "hello"
def test_changing_password_updates_subsonic_api_token_no_token(factories):
user = factories["users.User"](subsonic_api_token=None)
user.set_password("new")
assert user.subsonic_api_token is None
def test_changing_password_updates_subsonic_api_token(factories):
user = factories["users.User"](subsonic_api_token="test")
user.set_password("new")
assert user.subsonic_api_token is not None
Eliot Berriot
committed
def test_get_permissions_superuser(factories):
Eliot Berriot
committed
perms = user.get_permissions()
for p in models.PERMISSIONS:
assert perms[p] is True
def test_get_permissions_regular(factories):
Eliot Berriot
committed
perms = user.get_permissions()
for p in models.PERMISSIONS:
Eliot Berriot
committed
assert perms[p] is True
else:
assert perms[p] is False
def test_get_permissions_default(factories, preferences):
preferences["users__default_permissions"] = ["upload", "federation"]
user = factories["users.User"]()
perms = user.get_permissions()
assert perms["upload"] is True
assert perms["federation"] is True
assert perms["library"] is False
assert perms["settings"] is False
@pytest.mark.parametrize(
"args,perms,expected",
[
({"is_superuser": True}, ["federation", "library"], True),
({"is_superuser": False}, ["federation"], False),
({"permission_library": True}, ["library"], True),
({"permission_library": True}, ["library", "federation"], False),
],
)
def test_has_permissions_and(args, perms, expected, factories):
user = factories["users.User"](**args)
assert user.has_permissions(*perms, operator="and") is expected
@pytest.mark.parametrize(
"args,perms,expected",
[
({"is_superuser": True}, ["federation", "library"], True),
({"is_superuser": False}, ["federation"], False),
({"permission_library": True}, ["library", "federation"], True),
({"permission_library": True}, ["federation"], False),
],
)
def test_has_permissions_or(args, perms, expected, factories):
user = factories["users.User"](**args)
assert user.has_permissions(*perms, operator="or") is expected
def test_record_activity(factories, now):
user = factories["users.User"]()
assert user.last_activity is None
user.record_activity()
assert user.last_activity == now
def test_record_activity_does_nothing_if_already(factories, now, mocker):
user = factories["users.User"](last_activity=now)
save = mocker.patch("funkwhale_api.users.models.User.save")
user.record_activity()
save.assert_not_called()
def test_invitation_generates_random_code_on_save(factories):
invitation = factories["users.Invitation"]()
assert len(invitation.code) >= 6
def test_invitation_expires_after_delay(factories, settings):
delay = settings.USERS_INVITATION_EXPIRATION_DAYS
invitation = factories["users.Invitation"]()
assert invitation.expiration_date == (
invitation.creation_date + datetime.timedelta(days=delay)
)
def test_can_filter_open_invitations(factories):
okay = factories["users.Invitation"]()
factories["users.Invitation"](expired=True)
factories["users.User"](invited=True)
assert models.Invitation.objects.count() == 3
assert list(models.Invitation.objects.open()) == [okay]
def test_can_filter_closed_invitations(factories):
factories["users.Invitation"]()
expired = factories["users.Invitation"](expired=True)
used = factories["users.User"](invited=True).invitation
assert models.Invitation.objects.count() == 3
assert list(models.Invitation.objects.order_by("id").open(False)) == [expired, used]
def test_creating_actor_from_user(factories, settings):
user = factories["users.User"](username="Hello M. world")
actor = models.create_actor(user)
assert actor.preferred_username == "Hello_M_world" # slugified
assert actor.domain == settings.FEDERATION_HOSTNAME
assert actor.type == "Person"
assert actor.name == user.username
assert actor.manually_approves_followers is False
assert actor.url == federation_utils.full_url(
reverse(
"federation:actors-detail",
kwargs={"preferred_username": actor.preferred_username},
)
)
assert actor.shared_inbox_url == federation_utils.full_url(
reverse(
"federation:actors-inbox",
kwargs={"preferred_username": actor.preferred_username},
)
)
assert actor.inbox_url == federation_utils.full_url(
reverse(
"federation:actors-inbox",
kwargs={"preferred_username": actor.preferred_username},
)
)
assert actor.outbox_url == federation_utils.full_url(
reverse(
"federation:actors-outbox",
kwargs={"preferred_username": actor.preferred_username},
)