def fetch_public_activities do
query = from activity in Activity,
- where: fragment(~s(? @> '{"to": ["https://www.w3.org/ns/activitystreams#Public"]}'), activity.data)
+ where: fragment(~s(? @> '{"to": ["https://www.w3.org/ns/activitystreams#Public"]}'), activity.data),
+ limit: 20,
+ order_by: [desc: :inserted_at]
Repo.all(query)
+ |> Enum.reverse
end
end
defmodule Pleroma.Builders.ActivityBuilder do
alias Pleroma.Builders.UserBuilder
alias Pleroma.Web.ActivityPub.ActivityPub
- alias Pleroma.User
- def public_and_non_public do
- {:ok, user} = UserBuilder.insert
- public = %{
+ def build(data \\ %{}, opts \\ %{}) do
+ user = opts[:user] || UserBuilder.build
+ activity = %{
"id" => 1,
"actor" => user.ap_id,
"to" => ["https://www.w3.org/ns/activitystreams#Public"],
"content" => "test"
}
}
+ Map.merge(activity, data)
+ end
- non_public = %{
- "id" => 2,
- "actor" => user.ap_id,
- "to" => [],
- "object" => %{
- "type" => "Note",
- "content" => "test"
- }
- }
+ def insert(data \\ %{}, opts \\ %{}) do
+ activity = build(data, opts)
+ ActivityPub.insert(activity)
+ end
+
+ def insert_list(times, data \\ %{}, opts \\ %{}) do
+ Enum.map(1..times, fn (n) ->
+ {:ok, activity} = insert(%{"id" => n})
+ activity
+ end)
+ end
+
+ def public_and_non_public do
+ {:ok, user} = UserBuilder.insert
+
+ public = build(%{"id" => 1}, %{user: user})
+ non_public = build(%{"id" => 2, "to" => []}, %{user: user})
{:ok, public} = ActivityPub.insert(public)
{:ok, non_public} = ActivityPub.insert(non_public)
end
end
- describe "fetch activities" do
- test "retrieves all public activities" do
+ describe "public fetch activities" do
+ test "retrieves public activities" do
%{public: public} = ActivityBuilder.public_and_non_public
activities = ActivityPub.fetch_public_activities
assert length(activities) == 1
assert Enum.at(activities, 0) == public
end
+
+ test "retrieves a maximum of 20 activities" do
+ activities = ActivityBuilder.insert_list(30)
+ last_expected = List.last(activities)
+
+ activities = ActivityPub.fetch_public_activities
+ last = List.last(activities)
+
+ assert length(activities) == 20
+ assert last == last_expected
+ end
end
end