X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=test%2Fuser_test.exs;h=16d43e6195367bdb72ed8eed83ca148390335ff2;hb=30e9b22f96f2bf1cd895e993190f40afba159bb6;hp=ae9a48e743cc8ddc36a82ffbb0b9c3e96f25f06b;hpb=4dcbb64f19723334a9ef66b4ce71856d30e32796;p=akkoma diff --git a/test/user_test.exs b/test/user_test.exs index ae9a48e74..16d43e619 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1,19 +1,15 @@ defmodule Pleroma.UserTest do alias Pleroma.Builders.UserBuilder - alias Pleroma.{User, Repo} + alias Pleroma.{User, Repo, Activity} alias Pleroma.Web.OStatus alias Pleroma.Web.Websub.WebsubClientSubscription + alias Pleroma.Web.CommonAPI use Pleroma.DataCase import Pleroma.Factory import Ecto.Query test "ap_id returns the activity pub id for the user" do - host = - Application.get_env(:pleroma, Pleroma.Web.Endpoint) - |> Keyword.fetch!(:url) - |> Keyword.fetch!(:host) - user = UserBuilder.build expected_ap_id = "#{Pleroma.Web.base_url}/users/#{user.nickname}" @@ -40,7 +36,14 @@ defmodule Pleroma.UserTest do followed = User.get_by_ap_id(followed.ap_id) assert followed.info["follower_count"] == 1 - assert user.following == [User.ap_followers(followed)] + assert User.ap_followers(followed) in user.following + end + + test "can't follow a deactivated users" do + user = insert(:user) + followed = insert(:user, info: %{"deactivated" => true}) + + {:error, _} = User.follow(user, followed) end test "following a remote user will ensure a websub subscription is present" do @@ -50,7 +53,7 @@ defmodule Pleroma.UserTest do assert followed.local == false {:ok, user} = User.follow(user, followed) - assert user.following == [User.ap_followers(followed)] + assert User.ap_followers(followed) in user.following query = from w in WebsubClientSubscription, where: w.topic == ^followed.info["topic"] @@ -70,6 +73,16 @@ defmodule Pleroma.UserTest do assert user.following == [] end + test "unfollow doesn't unfollow yourself" do + user = insert(:user) + + {:error, _} = User.unfollow(user, user) + + user = Repo.get(User, user.id) + assert user.following == [user.ap_id] + end + + test "test if a user is following another user" do followed = insert(:user) user = insert(:user, %{following: [User.ap_followers(followed)]}) @@ -213,7 +226,9 @@ defmodule Pleroma.UserTest do {:ok, res} = User.get_followers(user) - assert res == [follower_one, follower_two] + assert Enum.member?(res, follower_one) + assert Enum.member?(res, follower_two) + refute Enum.member?(res, not_follower) end test "gets all friends (followed users) for a given user" do @@ -229,7 +244,9 @@ defmodule Pleroma.UserTest do followed_one = User.get_by_ap_id(followed_one.ap_id) followed_two = User.get_by_ap_id(followed_two.ap_id) - assert res == [followed_one, followed_two] + assert Enum.member?(res, followed_one) + assert Enum.member?(res, followed_two) + refute Enum.member?(res, not_followed) end end @@ -274,5 +291,83 @@ defmodule Pleroma.UserTest do assert user.info["follower_count"] == 1 end end -end + describe "blocks" do + test "it blocks people" do + user = insert(:user) + blocked_user = insert(:user) + + refute User.blocks?(user, blocked_user) + + {:ok, user} = User.block(user, blocked_user) + + assert User.blocks?(user, blocked_user) + end + + test "it unblocks users" do + user = insert(:user) + blocked_user = insert(:user) + + {:ok, user} = User.block(user, blocked_user) + {:ok, user} = User.unblock(user, blocked_user) + + refute User.blocks?(user, blocked_user) + end + end + + test "get recipients from activity" do + actor = insert(:user) + user = insert(:user, local: true) + user_two = insert(:user, local: false) + addressed = insert(:user, local: true) + addressed_remote = insert(:user, local: false) + {:ok, activity} = CommonAPI.post(actor, %{"status" => "hey @#{addressed.nickname} @#{addressed_remote.nickname}"}) + + assert [addressed] == User.get_recipients_from_activity(activity) + + {:ok, user} = User.follow(user, actor) + {:ok, user_two} = User.follow(user_two, actor) + recipients = User.get_recipients_from_activity(activity) + assert length(recipients) == 2 + assert user in recipients + assert addressed in recipients + end + + test ".deactivate deactivates a user" do + user = insert(:user) + assert false == !!user.info["deactivated"] + {:ok, user} = User.deactivate(user) + assert true == user.info["deactivated"] + end + + test ".delete deactivates a user, all follow relationships and all create activities" do + user = insert(:user) + followed = insert(:user) + follower = insert(:user) + + {:ok, user} = User.follow(user, followed) + {:ok, follower} = User.follow(follower, user) + + {:ok, activity} = CommonAPI.post(user, %{"status" => "2hu"}) + {:ok, activity_two} = CommonAPI.post(follower, %{"status" => "3hu"}) + + {:ok, _, _} = CommonAPI.favorite(activity_two.id, user) + {:ok, _, _} = CommonAPI.favorite(activity.id, follower) + {:ok, _, _} = CommonAPI.repeat(activity.id, follower) + + :ok = User.delete(user) + + followed = Repo.get(User, followed.id) + follower = Repo.get(User, follower.id) + user = Repo.get(User, user.id) + + assert user.info["deactivated"] + + refute User.following?(user, followed) + refute User.following?(followed, follower) + + # TODO: Remove favorites, repeats, delete activities. + + refute Repo.get(Activity, activity.id) + end +end