X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=test%2Fuser_test.exs;h=35de0a7ce384c95d1ebd7f0b64feb4e004870e0c;hb=0cf6f7a54d60c89fe38e6a55ba464497ff5a445c;hp=151b9afc04d482c732ef208b7be37e49db5e8e8c;hpb=fa1f11e8e9c31b0ed2857ca3c3feb78552ed54d0;p=akkoma diff --git a/test/user_test.exs b/test/user_test.exs index 151b9afc0..35de0a7ce 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1,8 +1,9 @@ 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 @@ -35,24 +36,32 @@ 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 "following a remote user will ensure a websub subscription is present" do + test "can't follow a deactivated users" do user = insert(:user) - {:ok, followed} = OStatus.make_user("shp@social.heldscal.la") + followed = insert(:user, info: %{"deactivated" => true}) - assert followed.local == false + {:error, _} = User.follow(user, followed) + end - {:ok, user} = User.follow(user, followed) - assert user.following == [User.ap_followers(followed)] + # This is a somewhat useless test. + # test "following a remote user will ensure a websub subscription is present" do + # user = insert(:user) + # {:ok, followed} = OStatus.make_user("shp@social.heldscal.la") - query = from w in WebsubClientSubscription, - where: w.topic == ^followed.info["topic"] - websub = Repo.one(query) + # assert followed.local == false - assert websub - end + # {:ok, user} = User.follow(user, followed) + # assert User.ap_followers(followed) in user.following + + # query = from w in WebsubClientSubscription, + # where: w.topic == ^followed.info["topic"] + # websub = Repo.one(query) + + # assert websub + # end test "unfollow takes a user and another user" do followed = insert(:user) @@ -65,6 +74,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)]}) @@ -83,13 +102,14 @@ defmodule Pleroma.UserTest do email: "email@example.com" } - test "it requires a bio, email, name, nickname and password" do + test "it requires an email, name, nickname and password, bio is optional" do @full_user_data |> Map.keys |> Enum.each(fn (key) -> params = Map.delete(@full_user_data, key) changeset = User.register_changeset(%User{}, params) - assert changeset.valid? == false + + assert (if key == :bio, do: changeset.valid?, else: not changeset.valid?) end) end @@ -296,5 +316,71 @@ defmodule Pleroma.UserTest do refute User.blocks?(user, blocked_user) end 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 + + test "get_public_key_for_ap_id fetches a user that's not in the db" do + assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin") + end + + test "insert or update a user from given data" do + user = insert(:user, %{nickname: "nick@name.de"}) + data = %{ ap_id: user.ap_id <> "xxx", name: user.name, nickname: user.nickname } + + assert {:ok, %User{}} = User.insert_or_update_user(data) + end +end