Merge branch 'repost-repeat-filtering-3391' into 'develop'
Add only_reblogs parameter to account statuses API Closes #3391 See merge request pleroma/pleroma!4385
This commit is contained in:
commit
49376e6b75
6 changed files with 33 additions and 0 deletions
1
changelog.d/repost-repeat-filtering-3391.add
Normal file
1
changelog.d/repost-repeat-filtering-3391.add
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Add only_reblogs parameter to account statuses API for filtering to show only reblogs/reposts
|
||||||
|
|
@ -88,6 +88,7 @@ The `id` parameter can also be the `nickname` of the user. This only works in th
|
||||||
- `only_media`: include only statuses with media attached
|
- `only_media`: include only statuses with media attached
|
||||||
- `with_muted`: include statuses/reactions from muted accounts
|
- `with_muted`: include statuses/reactions from muted accounts
|
||||||
- `exclude_reblogs`: exclude reblogs
|
- `exclude_reblogs`: exclude reblogs
|
||||||
|
- `only_reblogs`: include only reblogs
|
||||||
- `exclude_replies`: exclude replies
|
- `exclude_replies`: exclude replies
|
||||||
- `exclude_visibilities`: exclude visibilities
|
- `exclude_visibilities`: exclude visibilities
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1065,6 +1065,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
||||||
from(activity in query, where: fragment("?->>'type' != 'Announce'", activity.data))
|
from(activity in query, where: fragment("?->>'type' != 'Announce'", activity.data))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp restrict_reblogs(query, %{only_reblogs: true}) do
|
||||||
|
from(activity in query, where: fragment("?->>'type' = 'Announce'", activity.data))
|
||||||
|
end
|
||||||
|
|
||||||
defp restrict_reblogs(query, _), do: query
|
defp restrict_reblogs(query, _), do: query
|
||||||
|
|
||||||
defp restrict_muted(query, %{with_muted: true}), do: query
|
defp restrict_muted(query, %{with_muted: true}), do: query
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,12 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do
|
||||||
"Include statuses from muted accounts."
|
"Include statuses from muted accounts."
|
||||||
),
|
),
|
||||||
Operation.parameter(:exclude_reblogs, :query, BooleanLike.schema(), "Exclude reblogs"),
|
Operation.parameter(:exclude_reblogs, :query, BooleanLike.schema(), "Exclude reblogs"),
|
||||||
|
Operation.parameter(
|
||||||
|
:only_reblogs,
|
||||||
|
:query,
|
||||||
|
BooleanLike.schema(),
|
||||||
|
"Include only reblogs"
|
||||||
|
),
|
||||||
Operation.parameter(:exclude_replies, :query, BooleanLike.schema(), "Exclude replies"),
|
Operation.parameter(:exclude_replies, :query, BooleanLike.schema(), "Exclude replies"),
|
||||||
Operation.parameter(
|
Operation.parameter(
|
||||||
:exclude_visibilities,
|
:exclude_visibilities,
|
||||||
|
|
|
||||||
|
|
@ -1270,6 +1270,16 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
|
||||||
assert activity == expected_activity
|
assert activity == expected_activity
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "includes only reblogs on request" do
|
||||||
|
user = insert(:user)
|
||||||
|
{:ok, _} = ActivityBuilder.insert(%{"type" => "Create"}, %{:user => user})
|
||||||
|
{:ok, expected_activity} = ActivityBuilder.insert(%{"type" => "Announce"}, %{:user => user})
|
||||||
|
|
||||||
|
[activity] = ActivityPub.fetch_user_activities(user, nil, %{only_reblogs: true})
|
||||||
|
|
||||||
|
assert activity == expected_activity
|
||||||
|
end
|
||||||
|
|
||||||
describe "irreversible filters" do
|
describe "irreversible filters" do
|
||||||
setup do
|
setup do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
|
||||||
|
|
@ -469,6 +469,17 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||||
assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200)
|
assert [%{"id" => ^post_id}] = json_response_and_validate_schema(conn, 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "gets only a user's reblogs", %{user: user, conn: conn} do
|
||||||
|
{:ok, %{id: post_id}} = CommonAPI.post(user, %{status: "HI!!!"})
|
||||||
|
{:ok, %{id: reblog_id}} = CommonAPI.repeat(post_id, user)
|
||||||
|
|
||||||
|
conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?only_reblogs=true")
|
||||||
|
assert [%{"id" => ^reblog_id}] = json_response_and_validate_schema(conn, 200)
|
||||||
|
|
||||||
|
conn = get(conn, "/api/v1/accounts/#{user.id}/statuses?only_reblogs=1")
|
||||||
|
assert [%{"id" => ^reblog_id}] = json_response_and_validate_schema(conn, 200)
|
||||||
|
end
|
||||||
|
|
||||||
test "filters user's statuses by a hashtag", %{user: user, conn: conn} do
|
test "filters user's statuses by a hashtag", %{user: user, conn: conn} do
|
||||||
{:ok, %{id: post_id}} = CommonAPI.post(user, %{status: "#hashtag"})
|
{:ok, %{id: post_id}} = CommonAPI.post(user, %{status: "#hashtag"})
|
||||||
{:ok, _post} = CommonAPI.post(user, %{status: "hashtag"})
|
{:ok, _post} = CommonAPI.post(user, %{status: "hashtag"})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue