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}"
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
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"]
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)]})
{: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
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
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