summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarcin mikołajczak <git@mkljczk.pl>2022-01-12 21:39:14 +0100
committermarcin mikołajczak <git@mkljczk.pl>2022-01-12 22:41:34 +0100
commiteedf551eedd7acb854498303259598ad7aa72b1c (patch)
tree4a3f2561c1cdbeb87522aea6ce098c519deefd26
parent0f90fd58052aa372aaad63d769cd724046c9f61f (diff)
Add more tests
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
-rw-r--r--lib/pleroma/user.ex4
-rw-r--r--lib/pleroma/web/mastodon_api/controllers/account_controller.ex3
-rw-r--r--lib/pleroma/web/pleroma_api/controllers/account_controller.ex1
-rw-r--r--test/pleroma/user_test.exs35
-rw-r--r--test/pleroma/web/common_api_test.exs12
-rw-r--r--test/pleroma/web/mastodon_api/controllers/account_controller_test.exs41
-rw-r--r--test/pleroma/web/pleroma_api/controllers/account_controller_test.exs25
7 files changed, 100 insertions, 21 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 1b426c9d7..0a5dfccc9 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -1525,9 +1525,9 @@ defmodule Pleroma.User do
with max_endorsed_users <- Pleroma.Config.get([:instance, :max_endorsed_users], 0),
endorsed_users <-
User.endorsed_users_relation(endorser)
- |> Pleroma.Repo.all() do
+ |> Repo.aggregate(:count, :id) do
cond do
- Enum.count(endorsed_users) >= max_endorsed_users ->
+ endorsed_users >= max_endorsed_users ->
{:error, "You have already pinned the maximum number of users"}
not following?(endorser, target) ->
diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
index 0c0548828..a90833bf0 100644
--- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
@@ -529,10 +529,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
users =
user
|> User.endorsed_users_relation(_restrict_deactivated = true)
- |> Pleroma.Pagination.fetch_paginated(Map.put(params, :skip_order, true))
+ |> Pleroma.Repo.all()
conn
- |> add_link_headers(users)
|> render("index.json",
users: users,
for: user,
diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex
index 549a08f61..66a8d1c1c 100644
--- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex
+++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex
@@ -112,7 +112,6 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do
|> Pleroma.Repo.all()
conn
- |> add_link_headers(users)
|> render("index.json",
for: for_user,
users: users,
diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs
index 6cd93c34c..0345a9290 100644
--- a/test/pleroma/user_test.exs
+++ b/test/pleroma/user_test.exs
@@ -2498,4 +2498,39 @@ defmodule Pleroma.UserTest do
%{object: %{data: %{"id" => object_id}}} = Activity.get_by_id_with_object(id)
object_id
end
+
+ describe "account endorsements" do
+ test "it pins people" do
+ user = insert(:user)
+ pinned_user = insert(:user)
+
+ {:ok, _pinned_user, _user} = User.follow(user, pinned_user)
+
+ refute User.endorses?(user, pinned_user)
+
+ {:ok, _user_relationship} = User.endorse(user, pinned_user)
+
+ assert User.endorses?(user, pinned_user)
+ end
+
+ test "it unpins users" do
+ user = insert(:user)
+ pinned_user = insert(:user)
+
+ {:ok, _pinned_user, _user} = User.follow(user, pinned_user)
+ {:ok, _user_relationship} = User.endorse(user, pinned_user)
+ {:ok, _user_pin} = User.unendorse(user, pinned_user)
+
+ refute User.endorses?(user, pinned_user)
+ end
+
+ test "it doesn't pin users you do not follow" do
+ user = insert(:user)
+ pinned_user = insert(:user)
+
+ assert {:error, _message} = User.endorse(user, pinned_user)
+
+ refute User.endorses?(user, pinned_user)
+ end
+ end
end
diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs
index ad0b87543..4b186ccfc 100644
--- a/test/pleroma/web/common_api_test.exs
+++ b/test/pleroma/web/common_api_test.exs
@@ -1207,6 +1207,18 @@ defmodule Pleroma.Web.CommonAPITest do
refute User.subscribed_to?(follower, followed)
end
+ test "also unpins a user" do
+ [follower, followed] = insert_pair(:user)
+ {:ok, follower, followed, _} = CommonAPI.follow(follower, followed)
+ {:ok, _endorsement} = User.endorse(follower, followed)
+
+ assert User.endorses?(follower, followed)
+
+ {:ok, follower} = CommonAPI.unfollow(follower, followed)
+
+ refute User.endorses?(follower, followed)
+ end
+
test "cancels a pending follow for a local user" do
follower = insert(:user)
followed = insert(:user, is_locked: true)
diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs
index 828ebddd6..bba528d83 100644
--- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs
+++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs
@@ -1845,12 +1845,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
setup do: clear_config([:instance, :max_endorsed_users], 1)
test "pin account", %{user: user, conn: conn} do
- %{id: id1} = insert(:user)
+ %{id: id1} = other_user1 = insert(:user)
- conn
- |> put_req_header("content-type", "application/json")
- |> post("/api/v1/accounts/#{id1}/follow")
- |> json_response_and_validate_schema(200)
+ CommonAPI.follow(user, other_user1)
assert %{"id" => ^id1, "endorsed" => true} =
conn
@@ -1865,19 +1862,31 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|> json_response_and_validate_schema(200)
end
- test "max pinned accounts", %{user: user, conn: conn} do
- %{id: id1} = insert(:user)
- %{id: id2} = insert(:user)
+ test "unpin account", %{user: user, conn: conn} do
+ %{id: id1} = other_user1 = insert(:user)
- conn
- |> put_req_header("content-type", "application/json")
- |> post("/api/v1/accounts/#{id1}/follow")
- |> json_response_and_validate_schema(200)
+ CommonAPI.follow(user, other_user1)
+ User.endorse(user, other_user1)
- conn
- |> put_req_header("content-type", "application/json")
- |> post("/api/v1/accounts/#{id2}/follow")
- |> json_response_and_validate_schema(200)
+ assert %{"id" => ^id1, "endorsed" => false} =
+ conn
+ |> put_req_header("content-type", "application/json")
+ |> post("/api/v1/accounts/#{id1}/unpin")
+ |> json_response_and_validate_schema(200)
+
+ assert [] =
+ conn
+ |> put_req_header("content-type", "application/json")
+ |> get("/api/v1/endorsements")
+ |> json_response_and_validate_schema(200)
+ end
+
+ test "max pinned accounts", %{user: user, conn: conn} do
+ %{id: id1} = other_user1 = insert(:user)
+ %{id: id2} = other_user2 = insert(:user)
+
+ CommonAPI.follow(user, other_user1)
+ CommonAPI.follow(user, other_user2)
conn
|> put_req_header("content-type", "application/json")
diff --git a/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs
index ad271c31b..d9aa8ce55 100644
--- a/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs
+++ b/test/pleroma/web/pleroma_api/controllers/account_controller_test.exs
@@ -279,4 +279,29 @@ defmodule Pleroma.Web.PleromaAPI.AccountControllerTest do
assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn, 404)
end
end
+
+ describe "account endorsements" do
+ test "returns a list of pinned accounts", %{conn: conn} do
+ %{id: id1} = user1 = insert(:user)
+ %{id: id2} = user2 = insert(:user)
+ %{id: id3} = user3 = insert(:user)
+
+ CommonAPI.follow(user1, user2)
+ CommonAPI.follow(user1, user3)
+
+ User.endorse(user1, user2)
+ User.endorse(user1, user3)
+
+ [%{"id" => ^id2}, %{"id" => ^id3}] =
+ conn
+ |> get("/api/v1/pleroma/accounts/#{id1}/endorsements")
+ |> json_response_and_validate_schema(200)
+ end
+
+ test "returns 404 error when specified user is not exist", %{conn: conn} do
+ conn = get(conn, "/api/v1/pleroma/accounts/test/endorsements")
+
+ assert json_response_and_validate_schema(conn, 404) == %{"error" => "Record not found"}
+ end
+ end
end