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.CommonAPI
|
||||||
alias Pleroma.Web.MastodonAPI.AccountView
|
alias Pleroma.Web.MastodonAPI.AccountView
|
||||||
alias Pleroma.Web.MastodonAPI.ScheduledActivityView
|
alias Pleroma.Web.MastodonAPI.ScheduledActivityView
|
||||||
alias Pleroma.Web.MastodonAPI.StatusView
|
|
||||||
|
|
||||||
@rate_limited_status_actions ~w(reblog unreblog favourite unfavourite create delete)a
|
@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
|
"exclude_id" => activity.id
|
||||||
})
|
})
|
||||||
|
|
||||||
# TODO: Move to view
|
render(conn, "context.json", activity: activity, activities: activities, user: user)
|
||||||
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)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -439,6 +439,20 @@ def render("poll.json", %{object: object} = opts) do
|
||||||
end
|
end
|
||||||
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
|
def get_reply_to(activity, %{replied_to_activities: replied_to_activities}) do
|
||||||
object = Object.normalize(activity)
|
object = Object.normalize(activity)
|
||||||
|
|
||||||
|
|
|
@ -1053,4 +1053,25 @@ test "requires authentification for private posts", %{conn: conn, user: user} do
|
||||||
assert [] == response
|
assert [] == response
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue