X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=test%2Fpleroma%2Fweb%2Fmastodon_api%2Fcontrollers%2Faccount_controller_test.exs;h=a327c0d1df62a04599ce4535ea1846d42dcfe1de;hb=f6d2bd738d6cf4c495ba8fcd311ebf4705cf4343;hp=dcc0c81ece43617fdc1c6a8080587d5089401509;hpb=e062329a177e1a1382cb3a44ef71e6d278b4963e;p=akkoma
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 dcc0c81ec..a327c0d1d 100644
--- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs
+++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs
@@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors
+# Copyright © 2017-2021 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
@@ -29,6 +29,45 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|> json_response_and_validate_schema(404)
end
+ test "relationship field" do
+ %{conn: conn, user: user} = oauth_access(["read"])
+
+ other_user = insert(:user)
+
+ response =
+ conn
+ |> get("/api/v1/accounts/#{other_user.id}")
+ |> json_response_and_validate_schema(200)
+
+ assert response["id"] == other_user.id
+ assert response["pleroma"]["relationship"] == %{}
+
+ assert %{"pleroma" => %{"relationship" => %{"following" => false, "followed_by" => false}}} =
+ conn
+ |> get("/api/v1/accounts/#{other_user.id}?with_relationships=true")
+ |> json_response_and_validate_schema(200)
+
+ {:ok, _, %{id: other_id}} = User.follow(user, other_user)
+
+ assert %{
+ "id" => ^other_id,
+ "pleroma" => %{"relationship" => %{"following" => true, "followed_by" => false}}
+ } =
+ conn
+ |> get("/api/v1/accounts/#{other_id}?with_relationships=true")
+ |> json_response_and_validate_schema(200)
+
+ {:ok, _, _} = User.follow(other_user, user)
+
+ assert %{
+ "id" => ^other_id,
+ "pleroma" => %{"relationship" => %{"following" => true, "followed_by" => true}}
+ } =
+ conn
+ |> get("/api/v1/accounts/#{other_id}?with_relationships=true")
+ |> json_response_and_validate_schema(200)
+ end
+
test "works by nickname" do
user = insert(:user)
@@ -126,7 +165,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end
test "returns 404 for deactivated user", %{conn: conn} do
- user = insert(:user, deactivated: true)
+ user = insert(:user, is_active: false)
assert %{"error" => "Can't find user"} =
conn
@@ -256,7 +295,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end
test "deactivated user", %{conn: conn} do
- user = insert(:user, deactivated: true)
+ user = insert(:user, is_active: false)
assert %{"error" => "Can't find user"} ==
conn
@@ -320,7 +359,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
user_two = insert(:user)
user_three = insert(:user)
- {:ok, _user_three} = User.follow(user_three, user_one)
+ {:ok, _user_three, _user_one} = User.follow(user_three, user_one)
{:ok, activity} = CommonAPI.post(user_one, %{status: "HI!!!"})
@@ -436,6 +475,54 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?exclude_visibilities[]=direct")
assert [%{"id" => ^public_activity_id}] = json_response_and_validate_schema(conn, 200)
end
+
+ test "muted reactions", %{user: user, conn: conn} do
+ user2 = insert(:user)
+ User.mute(user, user2)
+ {:ok, activity} = CommonAPI.post(user, %{status: "."})
+ {:ok, _} = CommonAPI.react_with_emoji(activity.id, user2, "ð
")
+
+ result =
+ conn
+ |> get("/api/v1/accounts/#{user.id}/statuses")
+ |> json_response_and_validate_schema(200)
+
+ assert [
+ %{
+ "pleroma" => %{
+ "emoji_reactions" => []
+ }
+ }
+ ] = result
+
+ result =
+ conn
+ |> get("/api/v1/accounts/#{user.id}/statuses?with_muted=true")
+ |> json_response_and_validate_schema(200)
+
+ assert [
+ %{
+ "pleroma" => %{
+ "emoji_reactions" => [%{"count" => 1, "me" => false, "name" => "ð
"}]
+ }
+ }
+ ] = result
+ end
+
+ test "paginates a user's statuses", %{user: user, conn: conn} do
+ {:ok, post_1} = CommonAPI.post(user, %{status: "first post"})
+ {:ok, post_2} = CommonAPI.post(user, %{status: "second post"})
+
+ response_1 = get(conn, "/api/v1/accounts/#{user.id}/statuses?limit=1")
+ assert [res] = json_response(response_1, 200)
+ assert res["id"] == post_2.id
+
+ response_2 = get(conn, "/api/v1/accounts/#{user.id}/statuses?limit=1&max_id=#{res["id"]}")
+ assert [res] = json_response(response_2, 200)
+ assert res["id"] == post_1.id
+
+ refute response_1 == response_2
+ end
end
defp local_and_remote_activities(%{local: local, remote: remote}) do
@@ -535,16 +622,55 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
test "getting followers", %{user: user, conn: conn} do
other_user = insert(:user)
- {:ok, %{id: user_id}} = User.follow(user, other_user)
+ {:ok, %{id: user_id}, other_user} = User.follow(user, other_user)
conn = get(conn, "/api/v1/accounts/#{other_user.id}/followers")
assert [%{"id" => ^user_id}] = json_response_and_validate_schema(conn, 200)
end
+ test "following with relationship", %{conn: conn, user: user} do
+ other_user = insert(:user)
+ {:ok, %{id: id}, _} = User.follow(other_user, user)
+
+ assert [
+ %{
+ "id" => ^id,
+ "pleroma" => %{
+ "relationship" => %{
+ "id" => ^id,
+ "following" => false,
+ "followed_by" => true
+ }
+ }
+ }
+ ] =
+ conn
+ |> get("/api/v1/accounts/#{user.id}/followers?with_relationships=true")
+ |> json_response_and_validate_schema(200)
+
+ {:ok, _, _} = User.follow(user, other_user)
+
+ assert [
+ %{
+ "id" => ^id,
+ "pleroma" => %{
+ "relationship" => %{
+ "id" => ^id,
+ "following" => true,
+ "followed_by" => true
+ }
+ }
+ }
+ ] =
+ conn
+ |> get("/api/v1/accounts/#{user.id}/followers?with_relationships=true")
+ |> json_response_and_validate_schema(200)
+ end
+
test "getting followers, hide_followers", %{user: user, conn: conn} do
other_user = insert(:user, hide_followers: true)
- {:ok, _user} = User.follow(user, other_user)
+ {:ok, _user, _other_user} = User.follow(user, other_user)
conn = get(conn, "/api/v1/accounts/#{other_user.id}/followers")
@@ -554,7 +680,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
test "getting followers, hide_followers, same user requesting" do
user = insert(:user)
other_user = insert(:user, hide_followers: true)
- {:ok, _user} = User.follow(user, other_user)
+ {:ok, _user, _other_user} = User.follow(user, other_user)
conn =
build_conn()
@@ -566,9 +692,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
end
test "getting followers, pagination", %{user: user, conn: conn} do
- {:ok, %User{id: follower1_id}} = :user |> insert() |> User.follow(user)
- {:ok, %User{id: follower2_id}} = :user |> insert() |> User.follow(user)
- {:ok, %User{id: follower3_id}} = :user |> insert() |> User.follow(user)
+ {:ok, %User{id: follower1_id}, _user} = :user |> insert() |> User.follow(user)
+ {:ok, %User{id: follower2_id}, _user} = :user |> insert() |> User.follow(user)
+ {:ok, %User{id: follower3_id}, _user} = :user |> insert() |> User.follow(user)
assert [%{"id" => ^follower3_id}, %{"id" => ^follower2_id}] =
conn
@@ -604,7 +730,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
test "getting following", %{user: user, conn: conn} do
other_user = insert(:user)
- {:ok, user} = User.follow(user, other_user)
+ {:ok, user, other_user} = User.follow(user, other_user)
conn = get(conn, "/api/v1/accounts/#{user.id}/following")
@@ -612,10 +738,28 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
assert id == to_string(other_user.id)
end
+ test "following with relationship", %{conn: conn, user: user} do
+ other_user = insert(:user)
+ {:ok, user, other_user} = User.follow(user, other_user)
+
+ conn = get(conn, "/api/v1/accounts/#{user.id}/following?with_relationships=true")
+
+ id = other_user.id
+
+ assert [
+ %{
+ "id" => ^id,
+ "pleroma" => %{
+ "relationship" => %{"id" => ^id, "following" => true, "followed_by" => false}
+ }
+ }
+ ] = json_response_and_validate_schema(conn, 200)
+ end
+
test "getting following, hide_follows, other user requesting" do
user = insert(:user, hide_follows: true)
other_user = insert(:user)
- {:ok, user} = User.follow(user, other_user)
+ {:ok, user, other_user} = User.follow(user, other_user)
conn =
build_conn()
@@ -629,7 +773,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
test "getting following, hide_follows, same user requesting" do
user = insert(:user, hide_follows: true)
other_user = insert(:user)
- {:ok, user} = User.follow(user, other_user)
+ {:ok, user, _other_user} = User.follow(user, other_user)
conn =
build_conn()
@@ -644,9 +788,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
following1 = insert(:user)
following2 = insert(:user)
following3 = insert(:user)
- {:ok, _} = User.follow(user, following1)
- {:ok, _} = User.follow(user, following2)
- {:ok, _} = User.follow(user, following3)
+ {:ok, _, _} = User.follow(user, following1)
+ {:ok, _, _} = User.follow(user, following2)
+ {:ok, _, _} = User.follow(user, following3)
res_conn = get(conn, "/api/v1/accounts/#{user.id}/following?since_id=#{following1.id}")
@@ -959,7 +1103,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
assert %{"error" => "{\"email\":[\"Invalid email\"]}"} =
json_response_and_validate_schema(conn, 400)
- Pleroma.Config.put([User, :email_blacklist], [])
+ clear_config([User, :email_blacklist], [])
conn =
build_conn()
@@ -979,8 +1123,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
user = Repo.preload(token_from_db, :user).user
assert user
- refute user.confirmation_pending
- refute user.approval_pending
+ assert user.is_confirmed
+ assert user.is_approved
end
test "registers but does not log in with :account_activation_required", %{conn: conn} do
@@ -1040,7 +1184,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
refute response["token_type"]
user = Repo.get_by(User, email: "lain@example.org")
- assert user.confirmation_pending
+ refute user.is_confirmed
end
test "registers but does not log in with :account_approval_required", %{conn: conn} do
@@ -1102,7 +1246,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
user = Repo.get_by(User, email: "lain@example.org")
- assert user.approval_pending
+ refute user.is_approved
assert user.registration_reason == "I'm a cool dude, bro"
end
@@ -1378,8 +1522,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|> json_response_and_validate_schema(:ok)
assert Token |> Repo.get_by(token: access_token) |> Repo.preload(:user) |> Map.get(:user)
-
- Cachex.del(:used_captcha_cache, token)
end
test "returns 400 if any captcha field is not provided", %{conn: conn} do
@@ -1487,7 +1629,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
test "returns the relationships for the current user", %{user: user, conn: conn} do
%{id: other_user_id} = other_user = insert(:user)
- {:ok, _user} = User.follow(user, other_user)
+ {:ok, _user, _other_user} = User.follow(user, other_user)
assert [%{"id" => ^other_user_id}] =
conn
@@ -1509,28 +1651,131 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
test "getting a list of mutes" do
%{user: user, conn: conn} = oauth_access(["read:mutes"])
- other_user = insert(:user)
+ %{id: id1} = other_user1 = insert(:user)
+ %{id: id2} = other_user2 = insert(:user)
+ %{id: id3} = other_user3 = insert(:user)
- {:ok, _user_relationships} = User.mute(user, other_user)
+ {:ok, _user_relationships} = User.mute(user, other_user1)
+ {:ok, _user_relationships} = User.mute(user, other_user2)
+ {:ok, _user_relationships} = User.mute(user, other_user3)
- conn = get(conn, "/api/v1/mutes")
+ result =
+ conn
+ |> get("/api/v1/mutes")
+ |> json_response_and_validate_schema(200)
+
+ assert [id1, id2, id3] == Enum.map(result, & &1["id"])
- other_user_id = to_string(other_user.id)
- assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200)
+ result =
+ conn
+ |> get("/api/v1/mutes?limit=1")
+ |> json_response_and_validate_schema(200)
+
+ assert [%{"id" => ^id1}] = result
+
+ result =
+ conn
+ |> get("/api/v1/mutes?since_id=#{id1}")
+ |> json_response_and_validate_schema(200)
+
+ assert [%{"id" => ^id2}, %{"id" => ^id3}] = result
+
+ result =
+ conn
+ |> get("/api/v1/mutes?since_id=#{id1}&max_id=#{id3}")
+ |> json_response_and_validate_schema(200)
+
+ assert [%{"id" => ^id2}] = result
+
+ result =
+ conn
+ |> get("/api/v1/mutes?since_id=#{id1}&limit=1")
+ |> json_response_and_validate_schema(200)
+
+ assert [%{"id" => ^id2}] = result
+ end
+
+ test "list of mutes with with_relationships parameter" do
+ %{user: user, conn: conn} = oauth_access(["read:mutes"])
+ %{id: id1} = other_user1 = insert(:user)
+ %{id: id2} = other_user2 = insert(:user)
+ %{id: id3} = other_user3 = insert(:user)
+
+ {:ok, _, _} = User.follow(other_user1, user)
+ {:ok, _, _} = User.follow(other_user2, user)
+ {:ok, _, _} = User.follow(other_user3, user)
+
+ {:ok, _} = User.mute(user, other_user1)
+ {:ok, _} = User.mute(user, other_user2)
+ {:ok, _} = User.mute(user, other_user3)
+
+ assert [
+ %{
+ "id" => ^id1,
+ "pleroma" => %{"relationship" => %{"muting" => true, "followed_by" => true}}
+ },
+ %{
+ "id" => ^id2,
+ "pleroma" => %{"relationship" => %{"muting" => true, "followed_by" => true}}
+ },
+ %{
+ "id" => ^id3,
+ "pleroma" => %{"relationship" => %{"muting" => true, "followed_by" => true}}
+ }
+ ] =
+ conn
+ |> get("/api/v1/mutes?with_relationships=true")
+ |> json_response_and_validate_schema(200)
end
test "getting a list of blocks" do
%{user: user, conn: conn} = oauth_access(["read:blocks"])
- other_user = insert(:user)
+ %{id: id1} = other_user1 = insert(:user)
+ %{id: id2} = other_user2 = insert(:user)
+ %{id: id3} = other_user3 = insert(:user)
- {:ok, _user_relationship} = User.block(user, other_user)
+ {:ok, _user_relationship} = User.block(user, other_user1)
+ {:ok, _user_relationship} = User.block(user, other_user3)
+ {:ok, _user_relationship} = User.block(user, other_user2)
- conn =
+ result =
conn
|> assign(:user, user)
|> get("/api/v1/blocks")
+ |> json_response_and_validate_schema(200)
+
+ assert [id1, id2, id3] == Enum.map(result, & &1["id"])
+
+ result =
+ conn
+ |> assign(:user, user)
+ |> get("/api/v1/blocks?limit=1")
+ |> json_response_and_validate_schema(200)
+
+ assert [%{"id" => ^id1}] = result
+
+ result =
+ conn
+ |> assign(:user, user)
+ |> get("/api/v1/blocks?since_id=#{id1}")
+ |> json_response_and_validate_schema(200)
+
+ assert [%{"id" => ^id2}, %{"id" => ^id3}] = result
+
+ result =
+ conn
+ |> assign(:user, user)
+ |> get("/api/v1/blocks?since_id=#{id1}&max_id=#{id3}")
+ |> json_response_and_validate_schema(200)
+
+ assert [%{"id" => ^id2}] = result
+
+ result =
+ conn
+ |> assign(:user, user)
+ |> get("/api/v1/blocks?since_id=#{id1}&limit=1")
+ |> json_response_and_validate_schema(200)
- other_user_id = to_string(other_user.id)
- assert [%{"id" => ^other_user_id}] = json_response_and_validate_schema(conn, 200)
+ assert [%{"id" => ^id2}] = result
end
end