diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/pleroma/web/activity_pub/activity_pub_test.exs | 8 | ||||
| -rw-r--r-- | test/pleroma/web/federator_test.exs | 2 | ||||
| -rw-r--r-- | test/pleroma/web/feed/user_controller_test.exs | 44 | ||||
| -rw-r--r-- | test/pleroma/web/mastodon_api/controllers/media_controller_test.exs | 17 | ||||
| -rw-r--r-- | test/pleroma/web/mastodon_api/update_credentials_test.exs | 28 | ||||
| -rw-r--r-- | test/pleroma/web/metadata/utils_test.exs | 2 | ||||
| -rw-r--r-- | test/pleroma/workers/receiver_worker_test.exs | 29 | 
7 files changed, 124 insertions, 6 deletions
| diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index fc6fc039d..a6f8b6152 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -1342,6 +1342,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        %{test_file: test_file}      end +    test "strips / from filename", %{test_file: file} do +      file = %Plug.Upload{file | filename: "../../../../../nested/bad.jpg"} +      {:ok, %Object{} = object} = ActivityPub.upload(file) +      [%{"href" => href}] = object.data["url"] +      assert Regex.match?(~r"/bad.jpg$", href) +      refute Regex.match?(~r"/nested/", href) +    end +      test "sets a description if given", %{test_file: file} do        {:ok, %Object{} = object} = ActivityPub.upload(file, description: "a cool file")        assert object.data["name"] == "a cool file" diff --git a/test/pleroma/web/federator_test.exs b/test/pleroma/web/federator_test.exs index 41d1c5d5e..1ffe6aae1 100644 --- a/test/pleroma/web/federator_test.exs +++ b/test/pleroma/web/federator_test.exs @@ -133,7 +133,7 @@ defmodule Pleroma.Web.FederatorTest do        assert {:ok, _activity} = ObanHelpers.perform(job)        assert {:ok, job} = Federator.incoming_ap_doc(params) -      assert {:error, :already_present} = ObanHelpers.perform(job) +      assert {:cancel, :already_present} = ObanHelpers.perform(job)      end      test "rejects incoming AP docs with incorrect origin" do diff --git a/test/pleroma/web/feed/user_controller_test.exs b/test/pleroma/web/feed/user_controller_test.exs index de32d3d4b..d3c4108de 100644 --- a/test/pleroma/web/feed/user_controller_test.exs +++ b/test/pleroma/web/feed/user_controller_test.exs @@ -57,9 +57,23 @@ defmodule Pleroma.Web.Feed.UserControllerTest do          )        note_activity2 = insert(:note_activity, note: note2) + +      note3 = +        insert(:note, +          user: user, +          data: %{ +            "content" => "This note tests whether HTML entities are truncated properly", +            "summary" => "Won't, didn't fail", +            "inReplyTo" => note_activity2.id +          } +        ) + +      _note_activity3 = insert(:note_activity, note: note3)        object = Object.normalize(note_activity, fetch: false) -      [user: user, object: object, max_id: note_activity2.id] +      encoded_title = FeedView.activity_title(note3.data) + +      [user: user, object: object, max_id: note_activity2.id, encoded_title: encoded_title]      end      test "gets an atom feed", %{conn: conn, user: user, object: object, max_id: max_id} do @@ -74,7 +88,7 @@ defmodule Pleroma.Web.Feed.UserControllerTest do          |> SweetXml.parse()          |> SweetXml.xpath(~x"//entry/title/text()"l) -      assert activity_titles == ['2hu', '2hu & as'] +      assert activity_titles == ['Won\'t, didn\'...', '2hu', '2hu & as']        assert resp =~ FeedView.escape(object.data["content"])        assert resp =~ FeedView.escape(object.data["summary"])        assert resp =~ FeedView.escape(object.data["context"]) @@ -105,7 +119,7 @@ defmodule Pleroma.Web.Feed.UserControllerTest do          |> SweetXml.parse()          |> SweetXml.xpath(~x"//item/title/text()"l) -      assert activity_titles == ['2hu', '2hu & as'] +      assert activity_titles == ['Won\'t, didn\'...', '2hu', '2hu & as']        assert resp =~ FeedView.escape(object.data["content"])        assert resp =~ FeedView.escape(object.data["summary"])        assert resp =~ FeedView.escape(object.data["context"]) @@ -176,6 +190,30 @@ defmodule Pleroma.Web.Feed.UserControllerTest do        |> get("/users/#{user.nickname}/feed.rss")        |> response(200)      end + +    test "does not mangle HTML entities midway", %{ +      conn: conn, +      user: user, +      object: object, +      encoded_title: encoded_title +    } do +      resp = +        conn +        |> put_req_header("accept", "application/atom+xml") +        |> get(user_feed_path(conn, :feed, user.nickname)) +        |> response(200) + +      activity_titles = +        resp +        |> SweetXml.parse() +        |> SweetXml.xpath(~x"//entry/title/text()"l) + +      assert activity_titles == ['Won\'t, didn\'...', '2hu', '2hu & as'] +      assert resp =~ FeedView.escape(object.data["content"]) +      assert resp =~ FeedView.escape(object.data["summary"]) +      assert resp =~ FeedView.escape(object.data["context"]) +      assert resp =~ encoded_title +    end    end    # Note: see ActivityPubControllerTest for JSON format tests diff --git a/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs index 79d52bb2f..750296230 100644 --- a/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs @@ -122,6 +122,23 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do        assert :ok == File.rm(Path.absname("test/tmp/large_binary.data"))      end + +    test "Do not allow nested filename", %{conn: conn, image: image} do +      image = %Plug.Upload{ +        image +        | filename: "../../../../../nested/file.jpg" +      } + +      desc = "Description of the image" + +      media = +        conn +        |> put_req_header("content-type", "multipart/form-data") +        |> post("/api/v1/media", %{"file" => image, "description" => desc}) +        |> json_response_and_validate_schema(:ok) + +      refute Regex.match?(~r"/nested/", media["url"]) +    end    end    describe "Update media description" do diff --git a/test/pleroma/web/mastodon_api/update_credentials_test.exs b/test/pleroma/web/mastodon_api/update_credentials_test.exs index d4004bcb6..6c63d53c2 100644 --- a/test/pleroma/web/mastodon_api/update_credentials_test.exs +++ b/test/pleroma/web/mastodon_api/update_credentials_test.exs @@ -385,6 +385,34 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do        assert :ok == File.rm(Path.absname("test/tmp/large_binary.data"))      end +    test "Strip / from upload files", %{user: user, conn: conn} do +      new_image = %Plug.Upload{ +        content_type: "image/jpeg", +        path: Path.absname("test/fixtures/image.jpg"), +        filename: "../../../../nested/an_image.jpg" +      } + +      assert user.avatar == %{} + +      res = +        patch(conn, "/api/v1/accounts/update_credentials", %{ +          "avatar" => new_image, +          "header" => new_image, +          "pleroma_background_image" => new_image +        }) + +      assert user_response = json_response_and_validate_schema(res, 200) +      assert user_response["avatar"] +      assert user_response["header"] +      assert user_response["pleroma"]["background_image"] +      refute Regex.match?(~r"/nested/", user_response["avatar"]) +      refute Regex.match?(~r"/nested/", user_response["header"]) +      refute Regex.match?(~r"/nested/", user_response["pleroma"]["background_image"]) + +      user = User.get_by_id(user.id) +      refute user.avatar == %{} +    end +      test "requires 'write:accounts' permission" do        token1 = insert(:oauth_token, scopes: ["read"])        token2 = insert(:oauth_token, scopes: ["write", "follow"]) diff --git a/test/pleroma/web/metadata/utils_test.exs b/test/pleroma/web/metadata/utils_test.exs index 85ef6033a..3daf852fb 100644 --- a/test/pleroma/web/metadata/utils_test.exs +++ b/test/pleroma/web/metadata/utils_test.exs @@ -72,7 +72,7 @@ defmodule Pleroma.Web.Metadata.UtilsTest do      end    end -  describe "scrub_html_and_truncate/2" do +  describe "scrub_html_and_truncate/3" do      test "it returns text without encode HTML" do        assert Utils.scrub_html_and_truncate("Pleroma's really cool!") == "Pleroma's really cool!"      end diff --git a/test/pleroma/workers/receiver_worker_test.exs b/test/pleroma/workers/receiver_worker_test.exs index 283beee4d..acea0ae00 100644 --- a/test/pleroma/workers/receiver_worker_test.exs +++ b/test/pleroma/workers/receiver_worker_test.exs @@ -11,7 +11,7 @@ defmodule Pleroma.Workers.ReceiverWorkerTest do    alias Pleroma.Workers.ReceiverWorker -  test "it ignores MRF reject" do +  test "it does not retry MRF reject" do      params = insert(:note).data      with_mock Pleroma.Web.ActivityPub.Transmogrifier, @@ -22,4 +22,31 @@ defmodule Pleroma.Workers.ReceiverWorkerTest do                 })      end    end + +  test "it does not retry ObjectValidator reject" do +    params = +      insert(:note_activity).data +      |> Map.put("id", Pleroma.Web.ActivityPub.Utils.generate_activity_id()) +      |> Map.put("object", %{ +        "type" => "Note", +        "id" => Pleroma.Web.ActivityPub.Utils.generate_object_id() +      }) + +    with_mock Pleroma.Web.ActivityPub.ObjectValidator, [:passthrough], +      validate: fn _, _ -> {:error, %Ecto.Changeset{}} end do +      assert {:cancel, {:error, %Ecto.Changeset{}}} = +               ReceiverWorker.perform(%Oban.Job{ +                 args: %{"op" => "incoming_ap_doc", "params" => params} +               }) +    end +  end + +  test "it does not retry duplicates" do +    params = insert(:note_activity).data + +    assert {:cancel, :already_present} = +             ReceiverWorker.perform(%Oban.Job{ +               args: %{"op" => "incoming_ap_doc", "params" => params} +             }) +  end  end | 
