Web.ActivityPub.ActivityPub: Simplify multi-hashtag, add tests
This commit is contained in:
parent
d8f446f438
commit
4ad0ad14ed
2 changed files with 24 additions and 18 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue