diff options
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/activity_pub/activity_pub_controller_test.exs | 75 | ||||
| -rw-r--r-- | test/web/activity_pub/publisher_test.exs | 4 | ||||
| -rw-r--r-- | test/web/feed/user_controller_test.exs | 133 | ||||
| -rw-r--r-- | test/web/ostatus/ostatus_controller_test.exs | 29 | ||||
| -rw-r--r-- | test/web/static_fe/static_fe_controller_test.exs | 119 | ||||
| -rw-r--r-- | test/web/twitter_api/remote_follow_controller_test.exs | 6 | ||||
| -rw-r--r-- | test/web/twitter_api/util_controller_test.exs | 37 | 
7 files changed, 247 insertions, 156 deletions
| diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index 9151034da..04800b7ea 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -25,9 +25,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do      :ok    end -  clear_config_all([:instance, :federating], -    do: Pleroma.Config.put([:instance, :federating], true) -  ) +  clear_config_all([:instance, :federating]) do +    Pleroma.Config.put([:instance, :federating], true) +  end    describe "/relay" do      clear_config([:instance, :allow_relay]) @@ -577,7 +577,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do      end    end -  describe "/users/:nickname/outbox" do +  describe "GET /users/:nickname/outbox" do      test "it will not bomb when there is no activity", %{conn: conn} do        user = insert(:user) @@ -614,7 +614,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do        assert response(conn, 200) =~ announce_activity.data["object"]      end +  end +  describe "POST /users/:nickname/outbox" do      test "it rejects posts from other users", %{conn: conn} do        data = File.read!("test/fixtures/activitypub-client-post-activity.json") |> Poison.decode!()        user = insert(:user) @@ -775,7 +777,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do        assert result["first"]["orderedItems"] == [user.ap_id]      end -    test "it returns returns a uri if the user has 'hide_followers' set", %{conn: conn} do +    test "it returns a uri if the user has 'hide_followers' set", %{conn: conn} do        user = insert(:user)        user_two = insert(:user, hide_followers: true)        User.follow(user, user_two) @@ -1008,7 +1010,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do      end    end -  describe "Additionnal ActivityPub C2S endpoints" do +  describe "Additional ActivityPub C2S endpoints" do      test "/api/ap/whoami", %{conn: conn} do        user = insert(:user) @@ -1047,4 +1049,65 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do        assert object["actor"] == user.ap_id      end    end + +  describe "when instance is not federating," do +    clear_config([:instance, :federating]) do +      Pleroma.Config.put([:instance, :federating], false) +    end + +    test "returns 404 for GET routes", %{conn: conn} do +      user = insert(:user) +      conn = put_req_header(conn, "accept", "application/json") + +      get_uris = [ +        "/users/#{user.nickname}", +        "/internal/fetch", +        "/relay", +        "/relay/following", +        "/relay/followers" +      ] + +      for get_uri <- get_uris do +        conn +        |> get(get_uri) +        |> json_response(404) + +        conn +        |> assign(:user, user) +        |> get(get_uri) +        |> json_response(404) +      end +    end + +    test "returns 404 for activity-related POST routes", %{conn: conn} do +      user = insert(:user) + +      conn = +        conn +        |> assign(:valid_signature, true) +        |> put_req_header("content-type", "application/activity+json") + +      post_activity_data = +        "test/fixtures/mastodon-post-activity.json" +        |> File.read!() +        |> Poison.decode!() + +      post_activity_uris = [ +        "/inbox", +        "/relay/inbox", +        "/users/#{user.nickname}/inbox" +      ] + +      for post_activity_uri <- post_activity_uris do +        conn +        |> post(post_activity_uri, post_activity_data) +        |> json_response(404) + +        conn +        |> assign(:user, user) +        |> post(post_activity_uri, post_activity_data) +        |> json_response(404) +      end +    end +  end  end diff --git a/test/web/activity_pub/publisher_test.exs b/test/web/activity_pub/publisher_test.exs index 3404848d4..da26b13f7 100644 --- a/test/web/activity_pub/publisher_test.exs +++ b/test/web/activity_pub/publisher_test.exs @@ -23,6 +23,10 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do      :ok    end +  clear_config_all([:instance, :federating]) do +    Pleroma.Config.put([:instance, :federating], true) +  end +    describe "gather_webfinger_links/1" do      test "it returns links" do        user = insert(:user) diff --git a/test/web/feed/user_controller_test.exs b/test/web/feed/user_controller_test.exs index 19a019060..00712ab5a 100644 --- a/test/web/feed/user_controller_test.exs +++ b/test/web/feed/user_controller_test.exs @@ -8,66 +8,78 @@ defmodule Pleroma.Web.Feed.UserControllerTest do    import Pleroma.Factory    import SweetXml +  alias Pleroma.Config    alias Pleroma.Object    alias Pleroma.User -  clear_config([:feed]) - -  test "gets a 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"] -        } -      ) +  clear_config_all([:instance, :federating]) do +    Config.put([:instance, :federating], true) +  end -    note_activity = insert(:note_activity, note: note) -    user = User.get_cached_by_ap_id(note_activity.data["actor"]) +  describe "feed" do +    clear_config([:feed]) -    note2 = -      insert(:note, -        user: user, -        data: %{"content" => "42 This is :moominmamma: note ", "inReplyTo" => activity.data["id"]} +    test "gets a feed", %{conn: conn} do +      Config.put( +        [:feed, :post_title], +        %{max_length: 10, omission: "..."}        ) -    _note_activity2 = insert(:note_activity, note: note2) -    object = Object.normalize(note_activity) +      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"]) -    resp = -      conn -      |> put_req_header("content-type", "application/atom+xml") -      |> get(user_feed_path(conn, :feed, user.nickname)) -      |> response(200) +      note2 = +        insert(:note, +          user: user, +          data: %{ +            "content" => "42 This is :moominmamma: note ", +            "inReplyTo" => activity.data["id"] +          } +        ) -    activity_titles = -      resp -      |> SweetXml.parse() -      |> SweetXml.xpath(~x"//entry/title/text()"l) +      _note_activity2 = insert(:note_activity, note: note2) +      object = Object.normalize(note_activity) -    assert activity_titles == ['42 This...', 'This is...'] -    assert resp =~ object.data["content"] -  end +      resp = +        conn +        |> put_req_header("content-type", "application/atom+xml") +        |> get(user_feed_path(conn, :feed, user.nickname)) +        |> response(200) -  test "returns 404 for a missing feed", %{conn: conn} do -    conn = -      conn -      |> put_req_header("content-type", "application/atom+xml") -      |> get(user_feed_path(conn, :feed, "nonexisting")) +      activity_titles = +        resp +        |> SweetXml.parse() +        |> SweetXml.xpath(~x"//entry/title/text()"l) -    assert response(conn, 404) +      assert activity_titles == ['42 This...', 'This is...'] +      assert resp =~ object.data["content"] +    end + +    test "returns 404 for a missing feed", %{conn: conn} do +      conn = +        conn +        |> put_req_header("content-type", "application/atom+xml") +        |> get(user_feed_path(conn, :feed, "nonexisting")) + +      assert response(conn, 404) +    end    end    describe "feed_redirect" do @@ -248,4 +260,29 @@ defmodule Pleroma.Web.Feed.UserControllerTest do        assert response == %{"error" => "Not found"}      end    end + +  describe "feed_redirect (depending on federation enabled state)" do +    setup %{conn: conn} do +      user = insert(:user) +      conn = put_req_header(conn, "accept", "application/json") + +      %{conn: conn, user: user} +    end + +    clear_config([:instance, :federating]) + +    test "renders if instance is federating", %{conn: conn, user: user} do +      Config.put([:instance, :federating], true) + +      conn = get(conn, "/users/#{user.nickname}") +      assert json_response(conn, 200) +    end + +    test "renders 404 if instance is NOT federating", %{conn: conn, user: user} do +      Config.put([:instance, :federating], false) + +      conn = get(conn, "/users/#{user.nickname}") +      assert json_response(conn, 404) +    end +  end  end diff --git a/test/web/ostatus/ostatus_controller_test.exs b/test/web/ostatus/ostatus_controller_test.exs index 2051841c2..725ab1785 100644 --- a/test/web/ostatus/ostatus_controller_test.exs +++ b/test/web/ostatus/ostatus_controller_test.exs @@ -277,4 +277,33 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do               |> response(404)      end    end + +  describe "when instance is not federating," do +    clear_config([:instance, :federating]) do +      Pleroma.Config.put([:instance, :federating], false) +    end + +    test "returns 404 for GET routes", %{conn: conn} do +      conn = put_req_header(conn, "accept", "application/json") + +      note_activity = insert(:note_activity, local: true) +      [_, activity_uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["id"])) + +      object = Object.normalize(note_activity) +      [_, object_uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, object.data["id"])) + +      get_uris = [ +        "/activities/#{activity_uuid}", +        "/objects/#{object_uuid}", +        "/notice/#{note_activity.id}", +        "/notice/#{note_activity.id}/embed_player" +      ] + +      for get_uri <- get_uris do +        conn +        |> get(get_uri) +        |> json_response(404) +      end +    end +  end  end diff --git a/test/web/static_fe/static_fe_controller_test.exs b/test/web/static_fe/static_fe_controller_test.exs index 2ce8f9fa3..11facab99 100644 --- a/test/web/static_fe/static_fe_controller_test.exs +++ b/test/web/static_fe/static_fe_controller_test.exs @@ -1,56 +1,42 @@  defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do    use Pleroma.Web.ConnCase +    alias Pleroma.Activity +  alias Pleroma.Config    alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.CommonAPI    import Pleroma.Factory    clear_config_all([:static_fe, :enabled]) do -    Pleroma.Config.put([:static_fe, :enabled], true) +    Config.put([:static_fe, :enabled], true)    end -  describe "user profile page" do -    test "just the profile as HTML", %{conn: conn} do -      user = insert(:user) - -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/users/#{user.nickname}") - -      assert html_response(conn, 200) =~ user.nickname -    end +  setup %{conn: conn} do +    conn = put_req_header(conn, "accept", "text/html") +    user = insert(:user) -    test "renders json unless there's an html accept header", %{conn: conn} do -      user = insert(:user) +    %{conn: conn, user: user} +  end -      conn = -        conn -        |> put_req_header("accept", "application/json") -        |> get("/users/#{user.nickname}") +  describe "user profile html" do +    test "just the profile as HTML", %{conn: conn, user: user} do +      conn = get(conn, "/users/#{user.nickname}") -      assert json_response(conn, 200) +      assert html_response(conn, 200) =~ user.nickname      end      test "404 when user not found", %{conn: conn} do -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/users/limpopo") +      conn = get(conn, "/users/limpopo")        assert html_response(conn, 404) =~ "not found"      end -    test "profile does not include private messages", %{conn: conn} do -      user = insert(:user) +    test "profile does not include private messages", %{conn: conn, user: user} do        CommonAPI.post(user, %{"status" => "public"})        CommonAPI.post(user, %{"status" => "private", "visibility" => "private"}) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/users/#{user.nickname}") +      conn = get(conn, "/users/#{user.nickname}")        html = html_response(conn, 200) @@ -58,14 +44,10 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do        refute html =~ ">private<"      end -    test "pagination", %{conn: conn} do -      user = insert(:user) +    test "pagination", %{conn: conn, user: user} do        Enum.map(1..30, fn i -> CommonAPI.post(user, %{"status" => "test#{i}"}) end) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/users/#{user.nickname}") +      conn = get(conn, "/users/#{user.nickname}")        html = html_response(conn, 200) @@ -75,15 +57,11 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do        refute html =~ ">test1<"      end -    test "pagination, page 2", %{conn: conn} do -      user = insert(:user) +    test "pagination, page 2", %{conn: conn, user: user} do        activities = Enum.map(1..30, fn i -> CommonAPI.post(user, %{"status" => "test#{i}"}) end)        {:ok, a11} = Enum.at(activities, 11) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/users/#{user.nickname}?max_id=#{a11.id}") +      conn = get(conn, "/users/#{user.nickname}?max_id=#{a11.id}")        html = html_response(conn, 200) @@ -94,15 +72,11 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do      end    end -  describe "notice rendering" do -    test "single notice page", %{conn: conn} do -      user = insert(:user) +  describe "notice html" do +    test "single notice page", %{conn: conn, user: user} do        {:ok, activity} = CommonAPI.post(user, %{"status" => "testing a thing!"}) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/notice/#{activity.id}") +      conn = get(conn, "/notice/#{activity.id}")        html = html_response(conn, 200)        assert html =~ "<header>" @@ -110,8 +84,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do        assert html =~ "testing a thing!"      end -    test "shows the whole thread", %{conn: conn} do -      user = insert(:user) +    test "shows the whole thread", %{conn: conn, user: user} do        {:ok, activity} = CommonAPI.post(user, %{"status" => "space: the final frontier"})        CommonAPI.post(user, %{ @@ -119,70 +92,47 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do          "in_reply_to_status_id" => activity.id        }) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/notice/#{activity.id}") +      conn = get(conn, "/notice/#{activity.id}")        html = html_response(conn, 200)        assert html =~ "the final frontier"        assert html =~ "voyages"      end -    test "redirect by AP object ID", %{conn: conn} do -      user = insert(:user) - +    test "redirect by AP object ID", %{conn: conn, user: user} do        {:ok, %Activity{data: %{"object" => object_url}}} =          CommonAPI.post(user, %{"status" => "beam me up"}) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get(URI.parse(object_url).path) +      conn = get(conn, URI.parse(object_url).path)        assert html_response(conn, 302) =~ "redirected"      end -    test "redirect by activity ID", %{conn: conn} do -      user = insert(:user) - +    test "redirect by activity ID", %{conn: conn, user: user} do        {:ok, %Activity{data: %{"id" => id}}} =          CommonAPI.post(user, %{"status" => "I'm a doctor, not a devops!"}) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get(URI.parse(id).path) +      conn = get(conn, URI.parse(id).path)        assert html_response(conn, 302) =~ "redirected"      end      test "404 when notice not found", %{conn: conn} do -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/notice/88c9c317") +      conn = get(conn, "/notice/88c9c317")        assert html_response(conn, 404) =~ "not found"      end -    test "404 for private status", %{conn: conn} do -      user = insert(:user) - +    test "404 for private status", %{conn: conn, user: user} do        {:ok, activity} =          CommonAPI.post(user, %{"status" => "don't show me!", "visibility" => "private"}) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/notice/#{activity.id}") +      conn = get(conn, "/notice/#{activity.id}")        assert html_response(conn, 404) =~ "not found"      end -    test "302 for remote cached status", %{conn: conn} do -      user = insert(:user) - +    test "302 for remote cached status", %{conn: conn, user: user} do        message = %{          "@context" => "https://www.w3.org/ns/activitystreams",          "to" => user.follower_address, @@ -199,10 +149,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do        assert {:ok, activity} = Transmogrifier.handle_incoming(message) -      conn = -        conn -        |> put_req_header("accept", "text/html") -        |> get("/notice/#{activity.id}") +      conn = get(conn, "/notice/#{activity.id}")        assert html_response(conn, 302) =~ "redirected"      end diff --git a/test/web/twitter_api/remote_follow_controller_test.exs b/test/web/twitter_api/remote_follow_controller_test.exs index 80a42989d..73062f18f 100644 --- a/test/web/twitter_api/remote_follow_controller_test.exs +++ b/test/web/twitter_api/remote_follow_controller_test.exs @@ -5,8 +5,10 @@  defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do    use Pleroma.Web.ConnCase +  alias Pleroma.Config    alias Pleroma.User    alias Pleroma.Web.CommonAPI +    import ExUnit.CaptureLog    import Pleroma.Factory @@ -15,6 +17,10 @@ defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do      :ok    end +  clear_config_all([:instance, :federating]) do +    Config.put([:instance, :federating], true) +  end +    clear_config([:instance])    clear_config([:frontend_configurations, :pleroma_fe])    clear_config([:user, :deny_follow_blocked]) diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index d464ce215..9d757b5ef 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do    use Pleroma.Web.ConnCase    use Oban.Testing, repo: Pleroma.Repo +  alias Pleroma.Config    alias Pleroma.Tests.ObanHelpers    alias Pleroma.User @@ -178,7 +179,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do    describe "GET /api/statusnet/config" do      test "it returns config in xml format", %{conn: conn} do -      instance = Pleroma.Config.get(:instance) +      instance = Config.get(:instance)        response =          conn @@ -195,12 +196,12 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      end      test "it returns config in json format", %{conn: conn} do -      instance = Pleroma.Config.get(:instance) -      Pleroma.Config.put([:instance, :managed_config], true) -      Pleroma.Config.put([:instance, :registrations_open], false) -      Pleroma.Config.put([:instance, :invites_enabled], true) -      Pleroma.Config.put([:instance, :public], false) -      Pleroma.Config.put([:frontend_configurations, :pleroma_fe], %{theme: "asuka-hospital"}) +      instance = Config.get(:instance) +      Config.put([:instance, :managed_config], true) +      Config.put([:instance, :registrations_open], false) +      Config.put([:instance, :invites_enabled], true) +      Config.put([:instance, :public], false) +      Config.put([:frontend_configurations, :pleroma_fe], %{theme: "asuka-hospital"})        response =          conn @@ -234,7 +235,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      end      test "returns the state of safe_dm_mentions flag", %{conn: conn} do -      Pleroma.Config.put([:instance, :safe_dm_mentions], true) +      Config.put([:instance, :safe_dm_mentions], true)        response =          conn @@ -243,7 +244,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        assert response["site"]["safeDMMentionsEnabled"] == "1" -      Pleroma.Config.put([:instance, :safe_dm_mentions], false) +      Config.put([:instance, :safe_dm_mentions], false)        response =          conn @@ -254,8 +255,8 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      end      test "it returns the managed config", %{conn: conn} do -      Pleroma.Config.put([:instance, :managed_config], false) -      Pleroma.Config.put([:frontend_configurations, :pleroma_fe], %{theme: "asuka-hospital"}) +      Config.put([:instance, :managed_config], false) +      Config.put([:frontend_configurations, :pleroma_fe], %{theme: "asuka-hospital"})        response =          conn @@ -264,7 +265,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do        refute response["site"]["pleromafe"] -      Pleroma.Config.put([:instance, :managed_config], true) +      Config.put([:instance, :managed_config], true)        response =          conn @@ -287,7 +288,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do          }        ] -      Pleroma.Config.put(:frontend_configurations, config) +      Config.put(:frontend_configurations, config)        response =          conn @@ -320,7 +321,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      clear_config([:instance, :healthcheck])      test "returns 503 when healthcheck disabled", %{conn: conn} do -      Pleroma.Config.put([:instance, :healthcheck], false) +      Config.put([:instance, :healthcheck], false)        response =          conn @@ -331,7 +332,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      end      test "returns 200 when healthcheck enabled and all ok", %{conn: conn} do -      Pleroma.Config.put([:instance, :healthcheck], true) +      Config.put([:instance, :healthcheck], true)        with_mock Pleroma.Healthcheck,          system_info: fn -> %Pleroma.Healthcheck{healthy: true} end do @@ -351,7 +352,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do      end      test "returns 503 when healthcheck enabled and health is false", %{conn: conn} do -      Pleroma.Config.put([:instance, :healthcheck], true) +      Config.put([:instance, :healthcheck], true)        with_mock Pleroma.Healthcheck,          system_info: fn -> %Pleroma.Healthcheck{healthy: false} end do @@ -426,6 +427,10 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do    end    describe "POST /main/ostatus - remote_subscribe/2" do +    clear_config([:instance, :federating]) do +      Config.put([:instance, :federating], true) +    end +      test "renders subscribe form", %{conn: conn} do        user = insert(:user) | 
