diff options
Diffstat (limited to 'test/web/feed')
| -rw-r--r-- | test/web/feed/tag_controller_test.exs | 62 | ||||
| -rw-r--r-- | test/web/feed/user_controller_test.exs | 91 | 
2 files changed, 130 insertions, 23 deletions
| diff --git a/test/web/feed/tag_controller_test.exs b/test/web/feed/tag_controller_test.exs index 5950605e8..e863df86b 100644 --- a/test/web/feed/tag_controller_test.exs +++ b/test/web/feed/tag_controller_test.exs @@ -8,9 +8,11 @@ defmodule Pleroma.Web.Feed.TagControllerTest do    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 @@ defmodule Pleroma.Web.Feed.TagControllerTest do      )      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", [ @@ -41,14 +43,13 @@ defmodule Pleroma.Web.Feed.TagControllerTest do      |> 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) @@ -63,6 +64,21 @@ defmodule Pleroma.Web.Feed.TagControllerTest do      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 @@ defmodule Pleroma.Web.Feed.TagControllerTest do      )      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", [ @@ -94,14 +110,13 @@ defmodule Pleroma.Web.Feed.TagControllerTest do      |> 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) @@ -131,8 +146,8 @@ defmodule Pleroma.Web.Feed.TagControllerTest do               "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)), @@ -141,7 +156,7 @@ defmodule Pleroma.Web.Feed.TagControllerTest do      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) @@ -150,5 +165,20 @@ defmodule Pleroma.Web.Feed.TagControllerTest do      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 diff --git a/test/web/feed/user_controller_test.exs b/test/web/feed/user_controller_test.exs index 00c50f003..05ad427c2 100644 --- a/test/web/feed/user_controller_test.exs +++ b/test/web/feed/user_controller_test.exs @@ -12,12 +12,10 @@ defmodule Pleroma.Web.Feed.UserControllerTest do    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( @@ -54,12 +52,12 @@ defmodule Pleroma.Web.Feed.UserControllerTest do            }          ) -      _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) @@ -70,12 +68,91 @@ defmodule Pleroma.Web.Feed.UserControllerTest do        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) | 
