diff options
| -rw-r--r-- | lib/pleroma/user.ex | 11 | ||||
| -rw-r--r-- | test/support/factory.ex | 2 | ||||
| -rw-r--r-- | test/user_test.exs | 14 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_controller_test.exs | 6 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 4 | ||||
| -rw-r--r-- | test/web/twitter_api/views/user_view_test.exs | 3 | 
6 files changed, 26 insertions, 14 deletions
| diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index fbeeef003..f80c0ae33 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -61,8 +61,9 @@ defmodule Pleroma.User do    end    def user_info(%User{} = user) do +    oneself = if user.local, do: 1, else: 0      %{ -      following_count: length(user.following), +      following_count: length(user.following) - oneself,        note_count: user.info["note_count"] || 0,        follower_count: user.info["follower_count"] || 0      } @@ -166,7 +167,7 @@ defmodule Pleroma.User do    def unfollow(%User{} = follower, %User{} = followed) do      ap_followers = followed.follower_address -    if following?(follower, followed) do +    if following?(follower, followed) and follower.ap_id != followed.ap_id do        following = follower.following        |> List.delete(ap_followers) @@ -285,12 +286,12 @@ defmodule Pleroma.User do    def get_recipients_from_activity(%Activity{data: %{"to" => to}}) do      query = from u in User, -      where: u.local == true - -    query = from u in query,        where: u.ap_id in ^to,        or_where: fragment("? \\\?| ?", u.following, ^to) +    query = from u in query, +      where: u.local == true +      Repo.all(query)    end diff --git a/test/support/factory.ex b/test/support/factory.ex index 9bbf11f08..7f378915e 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Factory do        password_hash: Comeonin.Pbkdf2.hashpwsalt("test"),        bio: sequence(:bio, &"Tester Number #{&1}")      } -    %{ user | ap_id: Pleroma.User.ap_id(user), follower_address: Pleroma.User.ap_followers(user) } +    %{ user | ap_id: Pleroma.User.ap_id(user), follower_address: Pleroma.User.ap_followers(user), following: [Pleroma.User.ap_id(user)] }    end    def note_factory do diff --git a/test/user_test.exs b/test/user_test.exs index 430f56846..8ec23c751 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -36,7 +36,7 @@ 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 @@ -46,7 +46,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"] @@ -66,6 +66,15 @@ defmodule Pleroma.UserTest do      assert user.following == []    end +  test "unfollow doesn't unfollow yourself" do +    user = insert(:user) + +    {:error, _} = User.unfollow(user, user) + +    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)]}) @@ -309,6 +318,7 @@ defmodule Pleroma.UserTest do      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 diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index 4ab18721d..4b8fa85a5 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -288,7 +288,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        |> post("/api/friendships/create.json", %{user_id: followed.id})        current_user = Repo.get(User, current_user.id) -      assert current_user.following == [User.ap_followers(followed)] +      assert User.ap_followers(followed) in current_user.following        assert json_response(conn, 200) == UserView.render("show.json", %{user: followed, for: current_user})      end    end @@ -304,7 +304,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        followed = insert(:user)        {:ok, current_user} = User.follow(current_user, followed) -      assert current_user.following == [User.ap_followers(followed)] +      assert User.ap_followers(followed) in current_user.following        ActivityPub.follow(current_user, followed)        conn = conn @@ -312,7 +312,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do        |> post("/api/friendships/destroy.json", %{user_id: followed.id})        current_user = Repo.get(User, current_user.id) -      assert current_user.following == [] +      assert current_user.following == [current_user.ap_id]        assert json_response(conn, 200) == UserView.render("show.json", %{user: followed, for: current_user})      end    end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 06ecd9e75..60daeec70 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -179,7 +179,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      followed = insert(:user)      {:ok, user, followed, _activity } = TwitterAPI.follow(user, %{"user_id" => followed.id}) -    assert user.following == [User.ap_followers(followed)] +    assert User.ap_followers(followed) in user.following      { :error, msg } = TwitterAPI.follow(user, %{"user_id" => followed.id})      assert msg == "Could not follow user: #{followed.nickname} is already on your list." @@ -190,7 +190,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      followed = insert(:user)      {:ok, user, followed, _activity } = TwitterAPI.follow(user, %{"screen_name" => followed.nickname}) -    assert user.following == [User.ap_followers(followed)] +    assert User.ap_followers(followed) in user.following      followed = User.get_by_ap_id(followed.ap_id)      assert followed.info["follower_count"] == 1 diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs index 9f8e15574..18a19ef70 100644 --- a/test/web/twitter_api/views/user_view_test.exs +++ b/test/web/twitter_api/views/user_view_test.exs @@ -92,7 +92,8 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do    end    test "A user that follows you", %{user: user} do -    {:ok, follower} = UserBuilder.insert(%{following: [User.ap_followers(user)]}) +    follower = insert(:user) +    {:ok, follower} = User.follow(follower, user)      {:ok, user} = User.update_follower_count(user)      image = "https://placehold.it/48x48"      represented = %{ | 
