commit: b80c41a14f5b621311971469c663903e13ad3a33
parent 9c8a94bae226bfff65a0c4ec265b593226e1f912
Author: lain <lain@soykaf.club>
Date:   Thu, 19 Sep 2019 16:53:59 +0000
Merge branch 'outbox_pagination' into 'develop'
Fix AP outbox pagination
See merge request pleroma/pleroma!1700
Diffstat:
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git 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
@@ -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