aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlambda <pleromagit@rogerbraun.net>2017-11-20 07:27:10 +0000
committerlambda <pleromagit@rogerbraun.net>2017-11-20 07:27:10 +0000
commit690085158184e6ab216ac11b316191a7cb5ebafc (patch)
tree665e38138220ba7ec345a82c1d27123cc64ec3a7
parent52aa65fe6ebfd6730fa611e25dd0e9c0f7503654 (diff)
parentbd921ca5d7830efc9dde68b763412fdc03725adc (diff)
downloadpleroma-690085158184e6ab216ac11b316191a7cb5ebafc.tar.gz
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
-rw-r--r--lib/pleroma/user.ex11
-rw-r--r--test/support/factory.ex2
-rw-r--r--test/user_test.exs14
-rw-r--r--test/web/twitter_api/twitter_api_controller_test.exs6
-rw-r--r--test/web/twitter_api/twitter_api_test.exs4
-rw-r--r--test/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
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 = %{