summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2019-09-19 16:53:59 +0000
committerlain <lain@soykaf.club>2019-09-19 16:53:59 +0000
commitb80c41a14f5b621311971469c663903e13ad3a33 (patch)
tree679ca9675ecbc1030a7666c9cf661245e63f9c3f
parent9c8a94bae226bfff65a0c4ec265b593226e1f912 (diff)
parent9aca2cc95d0d8886d35be17e5cdd683004b425d9 (diff)
downloadpleroma-b80c41a14f5b621311971469c663903e13ad3a33.tar.gz
pleroma-b80c41a14f5b621311971469c663903e13ad3a33.zip
Merge branch 'outbox_pagination' into 'develop'
Fix AP outbox pagination See merge request pleroma/pleroma!1700
-rw-r--r--lib/pleroma/web/activity_pub/views/user_view.ex3
-rw-r--r--test/web/activity_pub/views/user_view_test.exs23
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex
index 164b973d0..a2f73e140 100644
--- a/lib/pleroma/web/activity_pub/views/user_view.ex
+++ b/lib/pleroma/web/activity_pub/views/user_view.ex
@@ -227,11 +227,12 @@ defmodule Pleroma.Web.ActivityPub.UserView do
activities = ActivityPub.fetch_user_activities(user, nil, params)
+ # this is sorted chronologically, so first activity is the newest (max)
{max_id, min_id, collection} =
if length(activities) > 0 do
{
- Enum.at(Enum.reverse(activities), 0).id,
Enum.at(activities, 0).id,
+ Enum.at(Enum.reverse(activities), 0).id,
Enum.map(activities, fn act ->
{:ok, data} = Transmogrifier.prepare_outgoing(act.data)
data
diff --git a/test/web/activity_pub/views/user_view_test.exs b/test/web/activity_pub/views/user_view_test.exs
index 2b4a04afd..eda95e3ea 100644
--- a/test/web/activity_pub/views/user_view_test.exs
+++ b/test/web/activity_pub/views/user_view_test.exs
@@ -142,4 +142,27 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do
assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
end
end
+
+ test "outbox paginates correctly" do
+ user = insert(:user)
+
+ posts =
+ for i <- 0..25 do
+ {:ok, activity} = CommonAPI.post(user, %{"status" => "post #{i}"})
+ activity
+ end
+
+ # outbox sorts chronologically, newest first, with ten per page
+ posts = Enum.reverse(posts)
+
+ %{"first" => %{"next" => next_url}} =
+ UserView.render("outbox.json", %{user: user, max_id: nil})
+
+ next_id = Enum.at(posts, 9).id
+ assert next_url =~ next_id
+
+ %{"next" => next_url} = UserView.render("outbox.json", %{user: user, max_id: next_id})
+ next_id = Enum.at(posts, 19).id
+ assert next_url =~ next_id
+ end
end