Merge branch 'fix-feed-pagination' into 'develop'
authorlain <lain@soykaf.club>
Fri, 20 Mar 2020 16:57:51 +0000 (16:57 +0000)
committerlain <lain@soykaf.club>
Fri, 20 Mar 2020 16:57:51 +0000 (16:57 +0000)
Fix for feed page pagination

Closes #1605

See merge request pleroma/pleroma!2281

1  2 
test/web/feed/tag_controller_test.exs
test/web/feed/user_controller_test.exs

index 1ec39ec5da1155d6afa366b08157eaf87505b799,da1caf049559204c2a2ea14bc93cc61ff2555821..e863df86b0c7fa987a02149b98e5c99f40586696
@@@ -8,9 -8,11 +8,11 @@@ defmodule Pleroma.Web.Feed.TagControlle
    import Pleroma.Factory
    import SweetXml
  
+   alias Pleroma.Object
+   alias Pleroma.Web.CommonAPI
    alias Pleroma.Web.Feed.FeedView
  
 -  clear_config([:feed])
 +  setup do: clear_config([:feed])
  
    test "gets a feed (ATOM)", %{conn: conn} do
      Pleroma.Config.put(
@@@ -19,9 -21,9 +21,9 @@@
      )
  
      user = insert(:user)
-     {:ok, activity1} = Pleroma.Web.CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})
+     {:ok, activity1} = CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})
  
-     object = Pleroma.Object.normalize(activity1)
+     object = Object.normalize(activity1)
  
      object_data =
        Map.put(object.data, "attachment", [
      |> Ecto.Changeset.change(data: object_data)
      |> Pleroma.Repo.update()
  
-     {:ok, _activity2} =
-       Pleroma.Web.CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})
+     {:ok, activity2} = CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})
  
-     {:ok, _activity3} = Pleroma.Web.CommonAPI.post(user, %{"status" => "This is :moominmamma"})
+     {:ok, _activity3} = CommonAPI.post(user, %{"status" => "This is :moominmamma"})
  
      response =
        conn
-       |> put_req_header("content-type", "application/atom+xml")
+       |> put_req_header("accept", "application/atom+xml")
        |> get(tag_feed_path(conn, :feed, "pleromaart.atom"))
        |> response(200)
  
  
      assert xpath(xml, ~x"//feed/entry/author/name/text()"ls) == [user.nickname, user.nickname]
      assert xpath(xml, ~x"//feed/entry/author/id/text()"ls) == [user.ap_id, user.ap_id]
+     conn =
+       conn
+       |> put_req_header("accept", "application/atom+xml")
+       |> get("/tags/pleromaart.atom", %{"max_id" => activity2.id})
+     assert get_resp_header(conn, "content-type") == ["application/atom+xml; charset=utf-8"]
+     resp = response(conn, 200)
+     xml = parse(resp)
+     assert xpath(xml, ~x"//feed/title/text()") == '#pleromaart'
+     assert xpath(xml, ~x"//feed/entry/title/text()"l) == [
+              'yeah #PleromaArt'
+            ]
    end
  
    test "gets a feed (RSS)", %{conn: conn} do
@@@ -72,9 -88,9 +88,9 @@@
      )
  
      user = insert(:user)
-     {:ok, activity1} = Pleroma.Web.CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})
+     {:ok, activity1} = CommonAPI.post(user, %{"status" => "yeah #PleromaArt"})
  
-     object = Pleroma.Object.normalize(activity1)
+     object = Object.normalize(activity1)
  
      object_data =
        Map.put(object.data, "attachment", [
      |> Ecto.Changeset.change(data: object_data)
      |> Pleroma.Repo.update()
  
-     {:ok, activity2} =
-       Pleroma.Web.CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})
+     {:ok, activity2} = CommonAPI.post(user, %{"status" => "42 This is :moominmamma #PleromaArt"})
  
-     {:ok, _activity3} = Pleroma.Web.CommonAPI.post(user, %{"status" => "This is :moominmamma"})
+     {:ok, _activity3} = CommonAPI.post(user, %{"status" => "This is :moominmamma"})
  
      response =
        conn
-       |> put_req_header("content-type", "application/rss+xml")
+       |> put_req_header("accept", "application/rss+xml")
        |> get(tag_feed_path(conn, :feed, "pleromaart.rss"))
        |> response(200)
  
               "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4"
             ]
  
-     obj1 = Pleroma.Object.normalize(activity1)
-     obj2 = Pleroma.Object.normalize(activity2)
+     obj1 = Object.normalize(activity1)
+     obj2 = Object.normalize(activity2)
  
      assert xpath(xml, ~x"//channel/item/description/text()"sl) == [
               HtmlEntities.decode(FeedView.activity_content(obj2)),
  
      response =
        conn
-       |> put_req_header("content-type", "application/atom+xml")
+       |> put_req_header("accept", "application/rss+xml")
        |> get(tag_feed_path(conn, :feed, "pleromaart"))
        |> response(200)
  
  
      assert xpath(xml, ~x"//channel/description/text()"s) ==
               "These are public toots tagged with #pleromaart. You can interact with them if you have an account anywhere in the fediverse."
+     conn =
+       conn
+       |> put_req_header("accept", "application/rss+xml")
+       |> get("/tags/pleromaart.rss", %{"max_id" => activity2.id})
+     assert get_resp_header(conn, "content-type") == ["application/rss+xml; charset=utf-8"]
+     resp = response(conn, 200)
+     xml = parse(resp)
+     assert xpath(xml, ~x"//channel/title/text()") == '#pleromaart'
+     assert xpath(xml, ~x"//channel/item/title/text()"l) == [
+              'yeah #PleromaArt'
+            ]
    end
  end
index 3e52eb42b10269ae8cb934289a0425ffa3b068c0,5c91c33d88444394613661aeffbc4abe63a94531..05ad427c2487c2663e8b6efcd497aa083e5f608a
@@@ -12,10 -12,12 +12,10 @@@ defmodule Pleroma.Web.Feed.UserControll
    alias Pleroma.Object
    alias Pleroma.User
  
 -  clear_config([:instance, :federating]) do
 -    Config.put([:instance, :federating], true)
 -  end
 +  setup do: clear_config([:instance, :federating], true)
  
    describe "feed" do
 -    clear_config([:feed])
 +    setup do: clear_config([:feed])
  
      test "gets a feed", %{conn: conn} do
        Config.put(
            }
          )
  
-       _note_activity2 = insert(:note_activity, note: note2)
+       note_activity2 = insert(:note_activity, note: note2)
        object = Object.normalize(note_activity)
  
        resp =
          conn
-         |> put_req_header("content-type", "application/atom+xml")
+         |> put_req_header("accept", "application/atom+xml")
          |> get(user_feed_path(conn, :feed, user.nickname))
          |> response(200)
  
  
        assert activity_titles == ['42 This...', 'This is...']
        assert resp =~ object.data["content"]
+       resp =
+         conn
+         |> put_req_header("accept", "application/atom+xml")
+         |> get("/users/#{user.nickname}/feed", %{"max_id" => note_activity2.id})
+         |> response(200)
+       activity_titles =
+         resp
+         |> SweetXml.parse()
+         |> SweetXml.xpath(~x"//entry/title/text()"l)
+       assert activity_titles == ['This is...']
+     end
+     test "gets a rss feed", %{conn: conn} do
+       Pleroma.Config.put(
+         [:feed, :post_title],
+         %{max_length: 10, omission: "..."}
+       )
+       activity = insert(:note_activity)
+       note =
+         insert(:note,
+           data: %{
+             "content" => "This is :moominmamma: note ",
+             "attachment" => [
+               %{
+                 "url" => [
+                   %{"mediaType" => "image/png", "href" => "https://pleroma.gov/image.png"}
+                 ]
+               }
+             ],
+             "inReplyTo" => activity.data["id"]
+           }
+         )
+       note_activity = insert(:note_activity, note: note)
+       user = User.get_cached_by_ap_id(note_activity.data["actor"])
+       note2 =
+         insert(:note,
+           user: user,
+           data: %{
+             "content" => "42 This is :moominmamma: note ",
+             "inReplyTo" => activity.data["id"]
+           }
+         )
+       note_activity2 = insert(:note_activity, note: note2)
+       object = Object.normalize(note_activity)
+       resp =
+         conn
+         |> put_req_header("accept", "application/rss+xml")
+         |> get("/users/#{user.nickname}/feed.rss")
+         |> response(200)
+       activity_titles =
+         resp
+         |> SweetXml.parse()
+         |> SweetXml.xpath(~x"//item/title/text()"l)
+       assert activity_titles == ['42 This...', 'This is...']
+       assert resp =~ object.data["content"]
+       resp =
+         conn
+         |> put_req_header("accept", "application/rss+xml")
+         |> get("/users/#{user.nickname}/feed.rss", %{"max_id" => note_activity2.id})
+         |> response(200)
+       activity_titles =
+         resp
+         |> SweetXml.parse()
+         |> SweetXml.xpath(~x"//item/title/text()"l)
+       assert activity_titles == ['This is...']
      end
  
      test "returns 404 for a missing feed", %{conn: conn} do
        conn =
          conn
-         |> put_req_header("content-type", "application/atom+xml")
+         |> put_req_header("accept", "application/atom+xml")
          |> get(user_feed_path(conn, :feed, "nonexisting"))
  
        assert response(conn, 404)