# Pleroma: A lightweight social networking server # Copyright © 2017-2023 Pleroma Authors # 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