forked from AkkomaGang/akkoma
Move view logic from StatusController.context to StatusView and add a test
This commit is contained in:
parent
76b7e5cd5b
commit
5ea5c58a85
3 changed files with 36 additions and 26 deletions
|
@ -21,7 +21,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
|
|||
alias Pleroma.Web.CommonAPI
|
||||
alias Pleroma.Web.MastodonAPI.AccountView
|
||||
alias Pleroma.Web.MastodonAPI.ScheduledActivityView
|
||||
alias Pleroma.Web.MastodonAPI.StatusView
|
||||
|
||||
@rate_limited_status_actions ~w(reblog unreblog favourite unfavourite create delete)a
|
||||
|
||||
|
@ -264,31 +263,7 @@ def context(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
|||
"exclude_id" => activity.id
|
||||
})
|
||||
|
||||
# TODO: Move to view
|
||||
grouped_activities = Enum.group_by(activities, fn %{id: id} -> id < activity.id end)
|
||||
|
||||
result = %{
|
||||
ancestors:
|
||||
StatusView.render(
|
||||
"index.json",
|
||||
for: user,
|
||||
activities: grouped_activities[true] || [],
|
||||
as: :activity
|
||||
)
|
||||
|> Enum.reverse(),
|
||||
# credo:disable-for-previous-line Credo.Check.Refactor.PipeChainStart
|
||||
descendants:
|
||||
StatusView.render(
|
||||
"index.json",
|
||||
for: user,
|
||||
activities: grouped_activities[false] || [],
|
||||
as: :activity
|
||||
)
|
||||
|> Enum.reverse()
|
||||
# credo:disable-for-previous-line Credo.Check.Refactor.PipeChainStart
|
||||
}
|
||||
|
||||
json(conn, result)
|
||||
render(conn, "context.json", activity: activity, activities: activities, user: user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -439,6 +439,20 @@ def render("poll.json", %{object: object} = opts) do
|
|||
end
|
||||
end
|
||||
|
||||
def render("context.json", %{activity: activity, activities: activities, user: user}) do
|
||||
%{ancestors: ancestors, descendants: descendants} =
|
||||
activities
|
||||
|> Enum.reverse()
|
||||
|> Enum.group_by(fn %{id: id} -> if id < activity.id, do: :ancestors, else: :descendants end)
|
||||
|> Map.put_new(:ancestors, [])
|
||||
|> Map.put_new(:descendants, [])
|
||||
|
||||
%{
|
||||
ancestors: render("index.json", for: user, activities: ancestors, as: :activity),
|
||||
descendants: render("index.json", for: user, activities: descendants, as: :activity)
|
||||
}
|
||||
end
|
||||
|
||||
def get_reply_to(activity, %{replied_to_activities: replied_to_activities}) do
|
||||
object = Object.normalize(activity)
|
||||
|
||||
|
|
|
@ -1053,4 +1053,25 @@ test "requires authentification for private posts", %{conn: conn, user: user} do
|
|||
assert [] == response
|
||||
end
|
||||
end
|
||||
|
||||
test "context" do
|
||||
user = insert(:user)
|
||||
|
||||
{:ok, %{id: id1}} = CommonAPI.post(user, %{"status" => "1"})
|
||||
{:ok, %{id: id2}} = CommonAPI.post(user, %{"status" => "2", "in_reply_to_status_id" => id1})
|
||||
{:ok, %{id: id3}} = CommonAPI.post(user, %{"status" => "3", "in_reply_to_status_id" => id2})
|
||||
{:ok, %{id: id4}} = CommonAPI.post(user, %{"status" => "4", "in_reply_to_status_id" => id3})
|
||||
{:ok, %{id: id5}} = CommonAPI.post(user, %{"status" => "5", "in_reply_to_status_id" => id4})
|
||||
|
||||
response =
|
||||
build_conn()
|
||||
|> assign(:user, nil)
|
||||
|> get("/api/v1/statuses/#{id3}/context")
|
||||
|> json_response(:ok)
|
||||
|
||||
assert %{
|
||||
"ancestors" => [%{"id" => ^id1}, %{"id" => ^id2}],
|
||||
"descendants" => [%{"id" => ^id4}, %{"id" => ^id5}]
|
||||
} = response
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue