150 lines
5.0 KiB
Elixir
150 lines
5.0 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.ListTest do
|
|
alias Pleroma.Repo
|
|
use Pleroma.DataCase, async: true
|
|
|
|
import Pleroma.Factory
|
|
|
|
test "creating a list" do
|
|
user = insert(:user)
|
|
{:ok, %Pleroma.List{} = list} = Pleroma.List.create("title", user)
|
|
%Pleroma.List{title: title} = Pleroma.List.get(list.id, user)
|
|
assert title == "title"
|
|
end
|
|
|
|
test "validates title" do
|
|
user = insert(:user)
|
|
|
|
assert {:error, changeset} = Pleroma.List.create("", user)
|
|
assert changeset.errors == [title: {"can't be blank", [validation: :required]}]
|
|
end
|
|
|
|
test "getting a list not belonging to the user" do
|
|
user = insert(:user)
|
|
other_user = insert(:user)
|
|
{:ok, %Pleroma.List{} = list} = Pleroma.List.create("title", user)
|
|
ret = Pleroma.List.get(list.id, other_user)
|
|
assert is_nil(ret)
|
|
end
|
|
|
|
test "adding an user to a list" do
|
|
user = insert(:user)
|
|
other_user = insert(:user)
|
|
{:ok, list} = Pleroma.List.create("title", user)
|
|
{:ok, %{following: following}} = Pleroma.List.follow(list, other_user)
|
|
assert [other_user.follower_address] == following
|
|
end
|
|
|
|
test "removing an user from a list" do
|
|
user = insert(:user)
|
|
other_user = insert(:user)
|
|
{:ok, list} = Pleroma.List.create("title", user)
|
|
{:ok, %{following: _following}} = Pleroma.List.follow(list, other_user)
|
|
{:ok, %{following: following}} = Pleroma.List.unfollow(list, other_user)
|
|
assert [] == following
|
|
end
|
|
|
|
test "renaming a list" do
|
|
user = insert(:user)
|
|
{:ok, list} = Pleroma.List.create("title", user)
|
|
{:ok, %{title: title}} = Pleroma.List.rename(list, "new")
|
|
assert "new" == title
|
|
end
|
|
|
|
test "deleting a list" do
|
|
user = insert(:user)
|
|
{:ok, list} = Pleroma.List.create("title", user)
|
|
{:ok, list} = Pleroma.List.delete(list)
|
|
assert is_nil(Repo.get(Pleroma.List, list.id))
|
|
end
|
|
|
|
test "getting users in a list" do
|
|
user = insert(:user)
|
|
other_user = insert(:user)
|
|
third_user = insert(:user)
|
|
{:ok, list} = Pleroma.List.create("title", user)
|
|
{:ok, list} = Pleroma.List.follow(list, other_user)
|
|
{:ok, list} = Pleroma.List.follow(list, third_user)
|
|
{:ok, following} = Pleroma.List.get_following(list)
|
|
assert other_user in following
|
|
assert third_user in following
|
|
end
|
|
|
|
test "getting all lists by an user" do
|
|
user = insert(:user)
|
|
other_user = insert(:user)
|
|
{:ok, list_one} = Pleroma.List.create("title", user)
|
|
{:ok, list_two} = Pleroma.List.create("other title", user)
|
|
{:ok, list_three} = Pleroma.List.create("third title", other_user)
|
|
lists = Pleroma.List.for_user(user, %{})
|
|
assert list_one in lists
|
|
assert list_two in lists
|
|
refute list_three in lists
|
|
end
|
|
|
|
test "getting all lists the user is a member of" do
|
|
user = insert(:user)
|
|
other_user = insert(:user)
|
|
{:ok, list_one} = Pleroma.List.create("title", user)
|
|
{:ok, list_two} = Pleroma.List.create("other title", user)
|
|
{:ok, list_three} = Pleroma.List.create("third title", other_user)
|
|
{:ok, list_one} = Pleroma.List.follow(list_one, other_user)
|
|
{:ok, list_two} = Pleroma.List.follow(list_two, other_user)
|
|
{:ok, list_three} = Pleroma.List.follow(list_three, user)
|
|
|
|
lists = Pleroma.List.get_lists_from_activity(%Pleroma.Activity{actor: other_user.ap_id})
|
|
assert list_one in lists
|
|
assert list_two in lists
|
|
refute list_three in lists
|
|
end
|
|
|
|
test "getting own lists a given user belongs to" do
|
|
owner = insert(:user)
|
|
not_owner = insert(:user)
|
|
member_1 = insert(:user)
|
|
member_2 = insert(:user)
|
|
{:ok, owned_list} = Pleroma.List.create("owned", owner)
|
|
{:ok, not_owned_list} = Pleroma.List.create("not owned", not_owner)
|
|
{:ok, owned_list} = Pleroma.List.follow(owned_list, member_1)
|
|
{:ok, owned_list} = Pleroma.List.follow(owned_list, member_2)
|
|
{:ok, not_owned_list} = Pleroma.List.follow(not_owned_list, member_1)
|
|
{:ok, not_owned_list} = Pleroma.List.follow(not_owned_list, member_2)
|
|
|
|
lists_1 = Pleroma.List.get_lists_account_belongs(owner, member_1)
|
|
assert owned_list in lists_1
|
|
refute not_owned_list in lists_1
|
|
lists_2 = Pleroma.List.get_lists_account_belongs(owner, member_2)
|
|
assert owned_list in lists_2
|
|
refute not_owned_list in lists_2
|
|
end
|
|
|
|
test "get by ap_id" do
|
|
user = insert(:user)
|
|
{:ok, list} = Pleroma.List.create("foo", user)
|
|
assert Pleroma.List.get_by_ap_id(list.ap_id) == list
|
|
end
|
|
|
|
test "memberships" do
|
|
user = insert(:user)
|
|
member = insert(:user)
|
|
{:ok, list} = Pleroma.List.create("foo", user)
|
|
{:ok, list} = Pleroma.List.follow(list, member)
|
|
|
|
assert Pleroma.List.memberships(member) == [list.ap_id]
|
|
end
|
|
|
|
test "member?" do
|
|
user = insert(:user)
|
|
member = insert(:user)
|
|
|
|
{:ok, list} = Pleroma.List.create("foo", user)
|
|
{:ok, list} = Pleroma.List.follow(list, member)
|
|
|
|
assert Pleroma.List.member?(list, member)
|
|
refute Pleroma.List.member?(list, user)
|
|
end
|
|
end
|