logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: 690085158184e6ab216ac11b316191a7cb5ebafc
parent: 52aa65fe6ebfd6730fa611e25dd0e9c0f7503654
Author: lambda <pleromagit@rogerbraun.net>
Date:   Mon, 20 Nov 2017 07:27:10 +0000

Merge branch 'fix/self-follow' into 'develop'

Fix self follows to be more intuitive, fix minor websocket channel issue

See merge request pleroma/pleroma!26

Diffstat:

Mlib/pleroma/user.ex11++++++-----
Mtest/support/factory.ex2+-
Mtest/user_test.exs14++++++++++++--
Mtest/web/twitter_api/twitter_api_controller_test.exs6+++---
Mtest/web/twitter_api/twitter_api_test.exs4++--
Mtest/web/twitter_api/views/user_view_test.exs3++-
6 files changed, 26 insertions(+), 14 deletions(-)

diff --git 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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 = %{