aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/user.ex15
-rw-r--r--test/user_test.exs29
2 files changed, 44 insertions, 0 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index b21caba9d..021207de9 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -339,4 +339,19 @@ defmodule Pleroma.User do
cs = User.info_changeset(user, %{info: new_info})
Repo.update(cs)
end
+
+ def delete (%User{} = user) do
+ {:ok, user} = User.deactivate(user)
+
+ # Remove all relationships
+ {:ok, followers } = User.get_followers(user)
+ followers
+ |> Enum.each(fn (follower) -> User.unfollow(follower, user) end)
+
+ {:ok, friends} = User.get_friends(user)
+ friends
+ |> Enum.each(fn (followed) -> User.unfollow(user, followed) end)
+
+ :ok
+ end
end
diff --git a/test/user_test.exs b/test/user_test.exs
index 486998907..0dd5afb18 100644
--- a/test/user_test.exs
+++ b/test/user_test.exs
@@ -339,4 +339,33 @@ defmodule Pleroma.UserTest do
{: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: check for activities.
+ end
end