Web.ActivityPub.ActivityPub: Simplify multi-hashtag, add tests

This commit is contained in:
Haelwenn (lanodan) Monnier 2019-01-10 16:07:32 +01:00
parent d8f446f438
commit 4ad0ad14ed
No known key found for this signature in database
GPG Key ID: D5B7A8E43C997DEE
2 changed files with 24 additions and 18 deletions

View File

@ -430,30 +430,15 @@ defp restrict_tag(query, %{"tag" => tag, "tag_reject" => tag_reject})
when is_list(tag) and tag_reject != [] do when is_list(tag) and tag_reject != [] do
from( from(
activity in query, activity in query,
where: where: fragment("(? #> '{\"object\",\"tag\"}') \\?| ?", activity.data, ^tag),
fragment( where: fragment("(not (? #> '{\"object\",\"tag\"}') \\?| ?)", activity.data, ^tag_reject)
"? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))",
^tag,
activity.data
),
where:
fragment(
"(not ? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))))",
^tag_reject,
activity.data
)
) )
end end
defp restrict_tag(query, %{"tag" => tag}) when is_list(tag) do defp restrict_tag(query, %{"tag" => tag}) when is_list(tag) do
from( from(
activity in query, activity in query,
where: where: fragment("(? #> '{\"object\",\"tag\"}') \\?| ?", activity.data, ^tag)
fragment(
"? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))",
^tag,
activity.data
)
) )
end end

View File

@ -64,6 +64,27 @@ test "it returns a user" do
assert user.info.ap_enabled assert user.info.ap_enabled
assert user.follower_address == "http://mastodon.example.org/users/admin/followers" assert user.follower_address == "http://mastodon.example.org/users/admin/followers"
end end
test "it fetches the appropriate tag-restricted posts" do
user = insert(:user)
{:ok, status_one} = CommonAPI.post(user, %{"status" => ". #test"})
{:ok, status_two} = CommonAPI.post(user, %{"status" => ". #essais"})
{:ok, status_three} = CommonAPI.post(user, %{"status" => ". #test #reject"})
fetch_one = ActivityPub.fetch_activities([], %{"tag" => "test"})
fetch_two = ActivityPub.fetch_activities([], %{"tag" => ["test", "essais"]})
fetch_three =
ActivityPub.fetch_activities([], %{
"tag" => ["test", "essais"],
"tag_reject" => ["reject"]
})
assert fetch_one == [status_one, status_three]
assert fetch_two == [status_one, status_two, status_three]
assert fetch_three == [status_one, status_two]
end
end end
describe "insertion" do describe "insertion" do