Simplify DM query.
Should also use indexes better.
This commit is contained in:
parent
4b3ec53514
commit
841ee8e3e4
2 changed files with 37 additions and 14 deletions
|
@ -313,9 +313,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
|||
on: sender.ap_id == activity.actor,
|
||||
# Are non-direct statuses with no to/cc possible?
|
||||
where:
|
||||
fragment("not coalesce(data->'to' \\? ?, false)", ^public) and
|
||||
fragment("not coalesce(data->'cc' \\? ?, false)", ^public) and
|
||||
fragment("not coalesce(data->'to' \\? ?, false)", sender.follower_address)
|
||||
fragment(
|
||||
"not (? && ?)",
|
||||
[^public, sender.follower_address],
|
||||
activity.recipients
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -136,26 +136,47 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
|||
|
||||
assert %{"id" => id, "visibility" => "direct"} = json_response(conn, 200)
|
||||
assert activity = Repo.get(Activity, id)
|
||||
assert user2.follower_address not in activity.data["to"]
|
||||
assert activity.recipients == [user2.ap_id]
|
||||
assert activity.data["to"] == [user2.ap_id]
|
||||
assert activity.data["cc"] == []
|
||||
end
|
||||
|
||||
test "direct timeline", %{conn: conn} do
|
||||
dm = insert(:direct_note_activity)
|
||||
reg_note = insert(:note_activity)
|
||||
user_one = insert(:user)
|
||||
user_two = insert(:user)
|
||||
|
||||
recipient = User.get_by_ap_id(hd(dm.recipients))
|
||||
{:ok, user_two} = User.follow(user_two, user_one)
|
||||
|
||||
conn =
|
||||
{:ok, direct} =
|
||||
CommonAPI.post(user_one, %{
|
||||
"status" => "Hi @#{user_two.nickname}!",
|
||||
"visibility" => "direct"
|
||||
})
|
||||
|
||||
{:ok, _follower_only} =
|
||||
CommonAPI.post(user_one, %{
|
||||
"status" => "Hi @#{user_two.nickname}!",
|
||||
"visibility" => "private"
|
||||
})
|
||||
|
||||
# Only direct should be visible here
|
||||
res_conn =
|
||||
conn
|
||||
|> assign(:user, recipient)
|
||||
|> assign(:user, user_two)
|
||||
|> get("api/v1/timelines/direct")
|
||||
|
||||
resp = json_response(conn, 200)
|
||||
first_status = hd(resp)
|
||||
[status] = json_response(res_conn, 200)
|
||||
|
||||
assert length(resp) == 1
|
||||
assert %{"visibility" => "direct"} = first_status
|
||||
assert first_status["url"] != reg_note.data["id"]
|
||||
assert %{"visibility" => "direct"} = status
|
||||
assert status["url"] != direct.data["id"]
|
||||
|
||||
# Both should be visible here
|
||||
res_conn =
|
||||
conn
|
||||
|> assign(:user, user_two)
|
||||
|> get("api/v1/timelines/home")
|
||||
|
||||
[_s1, _s2] = json_response(res_conn, 200)
|
||||
end
|
||||
|
||||
test "replying to a status", %{conn: conn} do
|
||||
|
|
Loading…
Reference in a new issue