Add tests
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
cd13b92a3b
commit
0fbe33b4aa
6 changed files with 91 additions and 6 deletions
|
@ -1803,7 +1803,4 @@ def fetch_direct_messages_query do
|
||||||
|> restrict_visibility(%{visibility: "direct"})
|
|> restrict_visibility(%{visibility: "direct"})
|
||||||
|> order_by([activity], asc: activity.id)
|
|> order_by([activity], asc: activity.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_quotes(%Activity{data: %{"id" => ap_id}} = activity, params) do
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
|
|
||||||
defmodule Pleroma.Web.ApiSpec.PleromaStatusOperation do
|
defmodule Pleroma.Web.ApiSpec.PleromaStatusOperation do
|
||||||
alias OpenApiSpex.Operation
|
alias OpenApiSpex.Operation
|
||||||
alias Pleroma.Web.ApiSpec.StatusOperation
|
|
||||||
alias Pleroma.Web.ApiSpec.Schemas.ApiError
|
alias Pleroma.Web.ApiSpec.Schemas.ApiError
|
||||||
alias Pleroma.Web.ApiSpec.Schemas.FlakeID
|
alias Pleroma.Web.ApiSpec.Schemas.FlakeID
|
||||||
|
alias Pleroma.Web.ApiSpec.StatusOperation
|
||||||
|
|
||||||
import Pleroma.Web.ApiSpec.Helpers
|
import Pleroma.Web.ApiSpec.Helpers
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ defmodule Pleroma.Web.PleromaAPI.StatusController do
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
alias Pleroma.Web.ActivityPub.Visibility
|
||||||
alias Pleroma.Web.MastodonAPI.StatusView
|
alias Pleroma.Web.MastodonAPI.StatusView
|
||||||
alias Pleroma.Web.Plugs.OAuthScopesPlug
|
alias Pleroma.Web.Plugs.OAuthScopesPlug
|
||||||
|
|
||||||
|
@ -29,7 +30,8 @@ defmodule Pleroma.Web.PleromaAPI.StatusController do
|
||||||
|
|
||||||
@doc "GET /api/v1/pleroma/statuses/:id/quotes"
|
@doc "GET /api/v1/pleroma/statuses/:id/quotes"
|
||||||
def quotes(%{assigns: %{user: user}} = conn, %{id: id} = params) do
|
def quotes(%{assigns: %{user: user}} = conn, %{id: id} = params) do
|
||||||
with %Activity{object: object} <- Activity.get_by_id_with_object(id) do
|
with %Activity{object: object} = activity <- Activity.get_by_id_with_object(id),
|
||||||
|
true <- Visibility.visible_for_user?(activity, user) do
|
||||||
params =
|
params =
|
||||||
params
|
params
|
||||||
|> Map.put(:type, "Create")
|
|> Map.put(:type, "Create")
|
||||||
|
@ -56,6 +58,9 @@ def quotes(%{assigns: %{user: user}} = conn, %{id: id} = params) do
|
||||||
for: user,
|
for: user,
|
||||||
as: :activity
|
as: :activity
|
||||||
)
|
)
|
||||||
|
else
|
||||||
|
nil -> {:error, :not_found}
|
||||||
|
false -> {:error, :not_found}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -794,6 +794,34 @@ test "increases replies count", %{user: user} do
|
||||||
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id)
|
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id)
|
||||||
assert object.data["repliesCount"] == 2
|
assert object.data["repliesCount"] == 2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "increates quotes count", %{user: user} do
|
||||||
|
user2 = insert(:user)
|
||||||
|
|
||||||
|
{:ok, activity} = CommonAPI.post(user, %{status: "1", visibility: "public"})
|
||||||
|
ap_id = activity.data["id"]
|
||||||
|
quote_data = %{status: "1", quote_id: activity.id}
|
||||||
|
|
||||||
|
# public
|
||||||
|
{:ok, _} = CommonAPI.post(user2, Map.put(quote_data, :visibility, "public"))
|
||||||
|
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id)
|
||||||
|
assert object.data["quotesCount"] == 1
|
||||||
|
|
||||||
|
# unlisted
|
||||||
|
{:ok, _} = CommonAPI.post(user2, Map.put(quote_data, :visibility, "unlisted"))
|
||||||
|
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id)
|
||||||
|
assert object.data["quotesCount"] == 2
|
||||||
|
|
||||||
|
# private
|
||||||
|
{:ok, _} = CommonAPI.post(user2, Map.put(quote_data, :visibility, "private"))
|
||||||
|
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id)
|
||||||
|
assert object.data["quotesCount"] == 2
|
||||||
|
|
||||||
|
# direct
|
||||||
|
{:ok, _} = CommonAPI.post(user2, Map.put(quote_data, :visibility, "direct"))
|
||||||
|
assert %{data: _data, object: object} = Activity.get_by_ap_id_with_object(ap_id)
|
||||||
|
assert object.data["quotesCount"] == 2
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "fetch activities for recipients" do
|
describe "fetch activities for recipients" do
|
||||||
|
|
|
@ -292,7 +292,8 @@ test "a note activity" do
|
||||||
emoji_reactions: [],
|
emoji_reactions: [],
|
||||||
parent_visible: false,
|
parent_visible: false,
|
||||||
pinned_at: nil,
|
pinned_at: nil,
|
||||||
content_type: nil
|
content_type: nil,
|
||||||
|
quotes_count: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.PleromaAPI.StatusControllerTest do
|
||||||
|
use Pleroma.Web.ConnCase
|
||||||
|
|
||||||
|
alias Pleroma.Web.CommonAPI
|
||||||
|
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
describe "getting quotes of a specified post" do
|
||||||
|
setup do
|
||||||
|
[current_user, user] = insert_pair(:user)
|
||||||
|
%{user: current_user, conn: conn} = oauth_access(["read:statuses"], user: current_user)
|
||||||
|
[current_user: current_user, user: user, conn: conn]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "shows quotes of a post", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
activity = insert(:note_activity)
|
||||||
|
|
||||||
|
{:ok, quote_post} = CommonAPI.post(user, %{status: "quoat", quote_id: activity.id})
|
||||||
|
|
||||||
|
response =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/pleroma/statuses/#{activity.id}/quotes")
|
||||||
|
|> json_response_and_validate_schema(:ok)
|
||||||
|
|
||||||
|
[status] = response
|
||||||
|
|
||||||
|
assert length(response) == 1
|
||||||
|
assert status["id"] == quote_post.id
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns 404 error when a post can't be seen", %{conn: conn} do
|
||||||
|
activity = insert(:direct_note_activity)
|
||||||
|
|
||||||
|
response =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/pleroma/statuses/#{activity.id}/quotes")
|
||||||
|
|
||||||
|
assert json_response_and_validate_schema(response, 404) == %{"error" => "Record not found"}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "returns 404 error when a post does not exist", %{conn: conn} do
|
||||||
|
response =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/pleroma/statuses/idontexist/quotes")
|
||||||
|
|
||||||
|
assert json_response_and_validate_schema(response, 404) == %{"error" => "Record not found"}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue