diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/config_test.exs | 46 | ||||
| -rw-r--r-- | test/emails/mailer_test.exs | 3 | ||||
| -rw-r--r-- | test/fixtures/mastodon-question-activity.json | 1 | ||||
| -rw-r--r-- | test/fixtures/tesla_mock/poll_attachment.json | 99 | ||||
| -rw-r--r-- | test/migrations/20200802170532_fix_legacy_tags_test.exs | 24 | ||||
| -rw-r--r-- | test/object/fetcher_test.exs | 7 | ||||
| -rw-r--r-- | test/support/helpers.ex | 14 | ||||
| -rw-r--r-- | test/support/http_request_mock.ex | 8 | ||||
| -rw-r--r-- | test/upload/filter/exiftool_test.exs | 2 | ||||
| -rw-r--r-- | test/web/activity_pub/object_validators/delete_validation_test.exs | 2 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier/answer_handling_test.exs | 78 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier/question_handling_test.exs | 123 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 100 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/filter_controller_test.exs | 27 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/poll_view_test.exs | 29 | ||||
| -rw-r--r-- | test/web/oauth/app_test.exs | 11 | 
16 files changed, 490 insertions, 84 deletions
| diff --git a/test/config_test.exs b/test/config_test.exs index a46ab4302..1556e4237 100644 --- a/test/config_test.exs +++ b/test/config_test.exs @@ -28,6 +28,34 @@ defmodule Pleroma.ConfigTest do      assert Pleroma.Config.get([:azerty, :uiop], true) == true    end +  describe "nil values" do +    setup do +      Pleroma.Config.put(:lorem, nil) +      Pleroma.Config.put(:ipsum, %{dolor: [sit: nil]}) +      Pleroma.Config.put(:dolor, sit: %{amet: nil}) + +      on_exit(fn -> Enum.each(~w(lorem ipsum dolor)a, &Pleroma.Config.delete/1) end) +    end + +    test "get/1 with an atom for nil value" do +      assert Pleroma.Config.get(:lorem) == nil +    end + +    test "get/2 with an atom for nil value" do +      assert Pleroma.Config.get(:lorem, true) == nil +    end + +    test "get/1 with a list of keys for nil value" do +      assert Pleroma.Config.get([:ipsum, :dolor, :sit]) == nil +      assert Pleroma.Config.get([:dolor, :sit, :amet]) == nil +    end + +    test "get/2 with a list of keys for nil value" do +      assert Pleroma.Config.get([:ipsum, :dolor, :sit], true) == nil +      assert Pleroma.Config.get([:dolor, :sit, :amet], true) == nil +    end +  end +    test "get/1 when value is false" do      Pleroma.Config.put([:instance, :false_test], false)      Pleroma.Config.put([:instance, :nested], []) @@ -89,5 +117,23 @@ defmodule Pleroma.ConfigTest do      Pleroma.Config.put([:delete_me, :delete_me], hello: "world", world: "Hello")      Pleroma.Config.delete([:delete_me, :delete_me, :world])      assert Pleroma.Config.get([:delete_me, :delete_me]) == [hello: "world"] + +    assert Pleroma.Config.delete([:this_key_does_not_exist]) +    assert Pleroma.Config.delete([:non, :existing, :key]) +  end + +  test "fetch/1" do +    Pleroma.Config.put([:lorem], :ipsum) +    Pleroma.Config.put([:ipsum], dolor: :sit) + +    assert Pleroma.Config.fetch([:lorem]) == {:ok, :ipsum} +    assert Pleroma.Config.fetch(:lorem) == {:ok, :ipsum} +    assert Pleroma.Config.fetch([:ipsum, :dolor]) == {:ok, :sit} +    assert Pleroma.Config.fetch([:lorem, :ipsum]) == :error +    assert Pleroma.Config.fetch([:loremipsum]) == :error +    assert Pleroma.Config.fetch(:loremipsum) == :error + +    Pleroma.Config.delete([:lorem]) +    Pleroma.Config.delete([:ipsum])    end  end diff --git a/test/emails/mailer_test.exs b/test/emails/mailer_test.exs index e6e34cba8..3da45056b 100644 --- a/test/emails/mailer_test.exs +++ b/test/emails/mailer_test.exs @@ -19,6 +19,7 @@ defmodule Pleroma.Emails.MailerTest do    test "not send email when mailer is disabled" do      Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false)      Mailer.deliver(@email) +    :timer.sleep(100)      refute_email_sent(        from: {"Pleroma", "noreply@example.com"}, @@ -30,6 +31,7 @@ defmodule Pleroma.Emails.MailerTest do    test "send email" do      Mailer.deliver(@email) +    :timer.sleep(100)      assert_email_sent(        from: {"Pleroma", "noreply@example.com"}, @@ -41,6 +43,7 @@ defmodule Pleroma.Emails.MailerTest do    test "perform" do      Mailer.perform(:deliver_async, @email, []) +    :timer.sleep(100)      assert_email_sent(        from: {"Pleroma", "noreply@example.com"}, diff --git a/test/fixtures/mastodon-question-activity.json b/test/fixtures/mastodon-question-activity.json index ac329c7d5..3648b9f90 100644 --- a/test/fixtures/mastodon-question-activity.json +++ b/test/fixtures/mastodon-question-activity.json @@ -49,7 +49,6 @@        "en": "<p>Why is Tenshi eating a corndog so cute?</p>"      },      "endTime": "2019-05-11T09:03:36Z", -    "closed": "2019-05-11T09:03:36Z",      "attachment": [],      "tag": [],      "replies": { diff --git a/test/fixtures/tesla_mock/poll_attachment.json b/test/fixtures/tesla_mock/poll_attachment.json new file mode 100644 index 000000000..92e822dc8 --- /dev/null +++ b/test/fixtures/tesla_mock/poll_attachment.json @@ -0,0 +1,99 @@ +{ +  "@context": [ +    "https://www.w3.org/ns/activitystreams", +    "https://patch.cx/schemas/litepub-0.1.jsonld", +    { +      "@language": "und" +    } +  ], +  "actor": "https://patch.cx/users/rin", +  "anyOf": [], +  "attachment": [ +    { +      "mediaType": "image/jpeg", +      "name": "screenshot_mpv:Totoro@01:18:44.345.jpg", +      "type": "Document", +      "url": "https://shitposter.club/media/3bb4c4d402f8fdcc7f80963c3d7cf6f10f936897fd374922ade33199d2f86d87.jpg?name=screenshot_mpv%3ATotoro%4001%3A18%3A44.345.jpg" +    } +  ], +  "attributedTo": "https://patch.cx/users/rin", +  "cc": [ +    "https://patch.cx/users/rin/followers" +  ], +  "closed": "2020-06-19T23:22:02.754678Z", +  "content": "<span class=\"h-card\"><a class=\"u-url mention\" data-user=\"9vwjTNzEWEM1TfkBGq\" href=\"https://mastodon.sdf.org/users/rinpatch\" rel=\"ugc\">@<span>rinpatch</span></a></span>", +  "closed": "2019-09-19T00:32:36.785333", +  "content": "can you vote on this poll?", +  "id": "https://patch.cx/objects/tesla_mock/poll_attachment", +  "oneOf": [ +    { +      "name": "a", +      "replies": { +        "totalItems": 0, +        "type": "Collection" +      }, +      "type": "Note" +    }, +    { +      "name": "A", +      "replies": { +        "totalItems": 0, +        "type": "Collection" +      }, +      "type": "Note" +    }, +    { +      "name": "Aa", +      "replies": { +        "totalItems": 0, +        "type": "Collection" +      }, +      "type": "Note" +    }, +    { +      "name": "AA", +      "replies": { +        "totalItems": 0, +        "type": "Collection" +      }, +      "type": "Note" +    }, +    { +      "name": "AAa", +      "replies": { +        "totalItems": 1, +        "type": "Collection" +      }, +      "type": "Note" +    }, +    { +      "name": "AAA", +      "replies": { +        "totalItems": 3, +        "type": "Collection" +      }, +      "type": "Note" +    } +  ], +  "published": "2020-06-19T23:12:02.786113Z", +  "sensitive": false, +  "summary": "", +  "tag": [ +    { +      "href": "https://mastodon.sdf.org/users/rinpatch", +      "name": "@rinpatch@mastodon.sdf.org", +      "type": "Mention" +    } +  ], +  "to": [ +    "https://www.w3.org/ns/activitystreams#Public", +    "https://mastodon.sdf.org/users/rinpatch" +  ], +  "type": "Question", +  "voters": [ +    "https://shitposter.club/users/moonman", +    "https://skippers-bin.com/users/7v1w1r8ce6", +    "https://mastodon.sdf.org/users/rinpatch", +    "https://mastodon.social/users/emelie" +  ] +} diff --git a/test/migrations/20200802170532_fix_legacy_tags_test.exs b/test/migrations/20200802170532_fix_legacy_tags_test.exs new file mode 100644 index 000000000..3b4dee407 --- /dev/null +++ b/test/migrations/20200802170532_fix_legacy_tags_test.exs @@ -0,0 +1,24 @@ +defmodule Pleroma.Repo.Migrations.FixLegacyTagsTest do +  alias Pleroma.User +  use Pleroma.DataCase +  import Pleroma.Factory +  import Pleroma.Tests.Helpers + +  setup_all do: require_migration("20200802170532_fix_legacy_tags") + +  test "change/0 converts legacy user tags into correct values", %{migration: migration} do +    user = insert(:user, tags: ["force_nsfw", "force_unlisted", "verified"]) +    user2 = insert(:user) + +    assert :ok == migration.change() + +    fixed_user = User.get_by_id(user.id) +    fixed_user2 = User.get_by_id(user2.id) + +    assert fixed_user.tags == ["mrf_tag:media-force-nsfw", "mrf_tag:force-unlisted", "verified"] +    assert fixed_user2.tags == [] + +    # user2 should not have been updated +    assert fixed_user2.updated_at == fixed_user2.inserted_at +  end +end diff --git a/test/object/fetcher_test.exs b/test/object/fetcher_test.exs index d9098ea1b..16cfa7f5c 100644 --- a/test/object/fetcher_test.exs +++ b/test/object/fetcher_test.exs @@ -177,6 +177,13 @@ defmodule Pleroma.Object.FetcherTest do                   "https://mastodon.example.org/users/userisgone404"                 )      end + +    test "it can fetch pleroma polls with attachments" do +      {:ok, object} = +        Fetcher.fetch_object_from_id("https://patch.cx/objects/tesla_mock/poll_attachment") + +      assert object +    end    end    describe "pruning" do diff --git a/test/support/helpers.ex b/test/support/helpers.ex index 5cbf2e291..ecd4b1e18 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -17,9 +17,19 @@ defmodule Pleroma.Tests.Helpers do    defmacro clear_config(config_path, do: yield) do      quote do -      initial_setting = Config.get(unquote(config_path)) +      initial_setting = Config.fetch(unquote(config_path))        unquote(yield) -      on_exit(fn -> Config.put(unquote(config_path), initial_setting) end) + +      on_exit(fn -> +        case initial_setting do +          :error -> +            Config.delete(unquote(config_path)) + +          {:ok, value} -> +            Config.put(unquote(config_path), value) +        end +      end) +        :ok      end    end diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index 19a202654..eeeba7880 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -82,6 +82,14 @@ defmodule HttpRequestMock do       }}    end +  def get("https://patch.cx/objects/tesla_mock/poll_attachment", _, _, _) do +    {:ok, +     %Tesla.Env{ +       status: 200, +       body: File.read!("test/fixtures/tesla_mock/poll_attachment.json") +     }} +  end +    def get(          "https://mastodon.social/.well-known/webfinger?resource=https://mastodon.social/users/emelie",          _, diff --git a/test/upload/filter/exiftool_test.exs b/test/upload/filter/exiftool_test.exs index a1b7e46cd..8ed7d650b 100644 --- a/test/upload/filter/exiftool_test.exs +++ b/test/upload/filter/exiftool_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.Upload.Filter.ExiftoolTest do    alias Pleroma.Upload.Filter    test "apply exiftool filter" do +    assert Pleroma.Utils.command_available?("exiftool") +      File.cp!(        "test/fixtures/DSCN0010.jpg",        "test/fixtures/DSCN0010_tmp.jpg" diff --git a/test/web/activity_pub/object_validators/delete_validation_test.exs b/test/web/activity_pub/object_validators/delete_validation_test.exs index 42cd18298..02683b899 100644 --- a/test/web/activity_pub/object_validators/delete_validation_test.exs +++ b/test/web/activity_pub/object_validators/delete_validation_test.exs @@ -87,7 +87,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidationTest do        {:error, cng} = ObjectValidator.validate(invalid_other_actor, []) -      assert {:actor, {"is not allowed to delete object", []}} in cng.errors +      assert {:actor, {"is not allowed to modify object", []}} in cng.errors      end      test "it's valid if the actor of the object is a local superuser", diff --git a/test/web/activity_pub/transmogrifier/answer_handling_test.exs b/test/web/activity_pub/transmogrifier/answer_handling_test.exs new file mode 100644 index 000000000..0f6605c3f --- /dev/null +++ b/test/web/activity_pub/transmogrifier/answer_handling_test.exs @@ -0,0 +1,78 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Transmogrifier.AnswerHandlingTest do +  use Pleroma.DataCase + +  alias Pleroma.Activity +  alias Pleroma.Object +  alias Pleroma.Web.ActivityPub.Transmogrifier +  alias Pleroma.Web.CommonAPI + +  import Pleroma.Factory + +  setup_all do +    Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) +    :ok +  end + +  test "incoming, rewrites Note to Answer and increments vote counters" do +    user = insert(:user) + +    {:ok, activity} = +      CommonAPI.post(user, %{ +        status: "suya...", +        poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10} +      }) + +    object = Object.normalize(activity) + +    data = +      File.read!("test/fixtures/mastodon-vote.json") +      |> Poison.decode!() +      |> Kernel.put_in(["to"], user.ap_id) +      |> Kernel.put_in(["object", "inReplyTo"], object.data["id"]) +      |> Kernel.put_in(["object", "to"], user.ap_id) + +    {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) +    answer_object = Object.normalize(activity) +    assert answer_object.data["type"] == "Answer" +    assert answer_object.data["inReplyTo"] == object.data["id"] + +    new_object = Object.get_by_ap_id(object.data["id"]) +    assert new_object.data["replies_count"] == object.data["replies_count"] + +    assert Enum.any?( +             new_object.data["oneOf"], +             fn +               %{"name" => "suya..", "replies" => %{"totalItems" => 1}} -> true +               _ -> false +             end +           ) +  end + +  test "outgoing, rewrites Answer to Note" do +    user = insert(:user) + +    {:ok, poll_activity} = +      CommonAPI.post(user, %{ +        status: "suya...", +        poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10} +      }) + +    poll_object = Object.normalize(poll_activity) +    # TODO: Replace with CommonAPI vote creation when implemented +    data = +      File.read!("test/fixtures/mastodon-vote.json") +      |> Poison.decode!() +      |> Kernel.put_in(["to"], user.ap_id) +      |> Kernel.put_in(["object", "inReplyTo"], poll_object.data["id"]) +      |> Kernel.put_in(["object", "to"], user.ap_id) + +    {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) +    {:ok, data} = Transmogrifier.prepare_outgoing(activity.data) + +    assert data["object"]["type"] == "Note" +  end +end diff --git a/test/web/activity_pub/transmogrifier/question_handling_test.exs b/test/web/activity_pub/transmogrifier/question_handling_test.exs new file mode 100644 index 000000000..9fb965d7f --- /dev/null +++ b/test/web/activity_pub/transmogrifier/question_handling_test.exs @@ -0,0 +1,123 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Transmogrifier.QuestionHandlingTest do +  use Pleroma.DataCase + +  alias Pleroma.Activity +  alias Pleroma.Object +  alias Pleroma.Web.ActivityPub.Transmogrifier +  alias Pleroma.Web.CommonAPI + +  import Pleroma.Factory + +  setup_all do +    Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) +    :ok +  end + +  test "Mastodon Question activity" do +    data = File.read!("test/fixtures/mastodon-question-activity.json") |> Poison.decode!() + +    {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) + +    object = Object.normalize(activity, false) + +    assert object.data["closed"] == "2019-05-11T09:03:36Z" + +    assert object.data["context"] == activity.data["context"] + +    assert object.data["context"] == +             "tag:mastodon.sdf.org,2019-05-10:objectId=15095122:objectType=Conversation" + +    assert object.data["context_id"] + +    assert object.data["anyOf"] == [] + +    assert Enum.sort(object.data["oneOf"]) == +             Enum.sort([ +               %{ +                 "name" => "25 char limit is dumb", +                 "replies" => %{"totalItems" => 0, "type" => "Collection"}, +                 "type" => "Note" +               }, +               %{ +                 "name" => "Dunno", +                 "replies" => %{"totalItems" => 0, "type" => "Collection"}, +                 "type" => "Note" +               }, +               %{ +                 "name" => "Everyone knows that!", +                 "replies" => %{"totalItems" => 1, "type" => "Collection"}, +                 "type" => "Note" +               }, +               %{ +                 "name" => "I can't even fit a funny", +                 "replies" => %{"totalItems" => 1, "type" => "Collection"}, +                 "type" => "Note" +               } +             ]) + +    user = insert(:user) + +    {:ok, reply_activity} = CommonAPI.post(user, %{status: "hewwo", in_reply_to_id: activity.id}) + +    reply_object = Object.normalize(reply_activity, false) + +    assert reply_object.data["context"] == object.data["context"] +    assert reply_object.data["context_id"] == object.data["context_id"] +  end + +  test "Mastodon Question activity with HTML tags in plaintext" do +    options = [ +      %{ +        "type" => "Note", +        "name" => "<input type=\"date\">", +        "replies" => %{"totalItems" => 0, "type" => "Collection"} +      }, +      %{ +        "type" => "Note", +        "name" => "<input type=\"date\"/>", +        "replies" => %{"totalItems" => 0, "type" => "Collection"} +      }, +      %{ +        "type" => "Note", +        "name" => "<input type=\"date\" />", +        "replies" => %{"totalItems" => 1, "type" => "Collection"} +      }, +      %{ +        "type" => "Note", +        "name" => "<input type=\"date\"></input>", +        "replies" => %{"totalItems" => 1, "type" => "Collection"} +      } +    ] + +    data = +      File.read!("test/fixtures/mastodon-question-activity.json") +      |> Poison.decode!() +      |> Kernel.put_in(["object", "oneOf"], options) + +    {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) +    object = Object.normalize(activity, false) + +    assert Enum.sort(object.data["oneOf"]) == Enum.sort(options) +  end + +  test "returns an error if received a second time" do +    data = File.read!("test/fixtures/mastodon-question-activity.json") |> Poison.decode!() + +    assert {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) + +    assert {:error, {:validate_object, {:error, _}}} = Transmogrifier.handle_incoming(data) +  end + +  test "accepts a Question with no content" do +    data = +      File.read!("test/fixtures/mastodon-question-activity.json") +      |> Poison.decode!() +      |> Kernel.put_in(["object", "content"], "") + +    assert {:ok, %Activity{local: false}} = Transmogrifier.handle_incoming(data) +  end +end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 828964a36..6dd9a3fec 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -225,23 +225,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert Enum.at(object.data["tag"], 2) == "moo"      end -    test "it works for incoming questions" do -      data = File.read!("test/fixtures/mastodon-question-activity.json") |> Poison.decode!() - -      {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) - -      object = Object.normalize(activity) - -      assert Enum.all?(object.data["oneOf"], fn choice -> -               choice["name"] in [ -                 "Dunno", -                 "Everyone knows that!", -                 "25 char limit is dumb", -                 "I can't even fit a funny" -               ] -             end) -    end -      test "it works for incoming listens" do        data = %{          "@context" => "https://www.w3.org/ns/activitystreams", @@ -271,38 +254,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert object.data["length"] == 180_000      end -    test "it rewrites Note votes to Answers and increments vote counters on question activities" do -      user = insert(:user) - -      {:ok, activity} = -        CommonAPI.post(user, %{ -          status: "suya...", -          poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10} -        }) - -      object = Object.normalize(activity) - -      data = -        File.read!("test/fixtures/mastodon-vote.json") -        |> Poison.decode!() -        |> Kernel.put_in(["to"], user.ap_id) -        |> Kernel.put_in(["object", "inReplyTo"], object.data["id"]) -        |> Kernel.put_in(["object", "to"], user.ap_id) - -      {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) -      answer_object = Object.normalize(activity) -      assert answer_object.data["type"] == "Answer" -      object = Object.get_by_ap_id(object.data["id"]) - -      assert Enum.any?( -               object.data["oneOf"], -               fn -                 %{"name" => "suya..", "replies" => %{"totalItems" => 1}} -> true -                 _ -> false -               end -             ) -    end -      test "it works for incoming notices with contentMap" do        data =          File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!() @@ -677,7 +628,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do                     %{                       "href" =>                         "https://peertube.moe/static/webseed/df5f464b-be8d-46fb-ad81-2d4c2d1630e3-480.mp4", -                     "mediaType" => "video/mp4" +                     "mediaType" => "video/mp4", +                     "type" => "Link"                     }                   ]                 } @@ -696,7 +648,8 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do                     %{                       "href" =>                         "https://framatube.org/static/webseed/6050732a-8a7a-43d4-a6cd-809525a1d206-1080.mp4", -                     "mediaType" => "video/mp4" +                     "mediaType" => "video/mp4", +                     "type" => "Link"                     }                   ]                 } @@ -1269,30 +1222,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do      end    end -  test "Rewrites Answers to Notes" do -    user = insert(:user) - -    {:ok, poll_activity} = -      CommonAPI.post(user, %{ -        status: "suya...", -        poll: %{options: ["suya", "suya.", "suya.."], expires_in: 10} -      }) - -    poll_object = Object.normalize(poll_activity) -    # TODO: Replace with CommonAPI vote creation when implemented -    data = -      File.read!("test/fixtures/mastodon-vote.json") -      |> Poison.decode!() -      |> Kernel.put_in(["to"], user.ap_id) -      |> Kernel.put_in(["object", "inReplyTo"], poll_object.data["id"]) -      |> Kernel.put_in(["object", "to"], user.ap_id) - -    {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) -    {:ok, data} = Transmogrifier.prepare_outgoing(activity.data) - -    assert data["object"]["type"] == "Note" -  end -    describe "fix_explicit_addressing" do      setup do        user = insert(:user) @@ -1540,8 +1469,13 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do                 "attachment" => [                   %{                     "mediaType" => "video/mp4", +                   "type" => "Document",                     "url" => [ -                     %{"href" => "https://peertube.moe/stat-480.mp4", "mediaType" => "video/mp4"} +                     %{ +                       "href" => "https://peertube.moe/stat-480.mp4", +                       "mediaType" => "video/mp4", +                       "type" => "Link" +                     }                     ]                   }                 ] @@ -1558,14 +1492,24 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do                 "attachment" => [                   %{                     "mediaType" => "video/mp4", +                   "type" => "Document",                     "url" => [ -                     %{"href" => "https://pe.er/stat-480.mp4", "mediaType" => "video/mp4"} +                     %{ +                       "href" => "https://pe.er/stat-480.mp4", +                       "mediaType" => "video/mp4", +                       "type" => "Link" +                     }                     ]                   },                   %{                     "mediaType" => "video/mp4", +                   "type" => "Document",                     "url" => [ -                     %{"href" => "https://pe.er/stat-480.mp4", "mediaType" => "video/mp4"} +                     %{ +                       "href" => "https://pe.er/stat-480.mp4", +                       "mediaType" => "video/mp4", +                       "type" => "Link" +                     }                     ]                   }                 ] diff --git a/test/web/mastodon_api/controllers/filter_controller_test.exs b/test/web/mastodon_api/controllers/filter_controller_test.exs index f29547d13..0d426ec34 100644 --- a/test/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/web/mastodon_api/controllers/filter_controller_test.exs @@ -64,11 +64,31 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do    test "get a filter" do      %{user: user, conn: conn} = oauth_access(["read:filters"]) +    # check whole_word false      query = %Pleroma.Filter{        user_id: user.id,        filter_id: 2,        phrase: "knight", -      context: ["home"] +      context: ["home"], +      whole_word: false +    } + +    {:ok, filter} = Pleroma.Filter.create(query) + +    conn = get(conn, "/api/v1/filters/#{filter.filter_id}") + +    assert response = json_response_and_validate_schema(conn, 200) +    assert response["whole_word"] == false + +    # check whole_word true +    %{user: user, conn: conn} = oauth_access(["read:filters"]) + +    query = %Pleroma.Filter{ +      user_id: user.id, +      filter_id: 3, +      phrase: "knight", +      context: ["home"], +      whole_word: true      }      {:ok, filter} = Pleroma.Filter.create(query) @@ -76,6 +96,7 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do      conn = get(conn, "/api/v1/filters/#{filter.filter_id}")      assert response = json_response_and_validate_schema(conn, 200) +    assert response["whole_word"] == true    end    test "update a filter" do @@ -86,7 +107,8 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do        filter_id: 2,        phrase: "knight",        context: ["home"], -      hide: true +      hide: true, +      whole_word: true      }      {:ok, _filter} = Pleroma.Filter.create(query) @@ -108,6 +130,7 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do      assert response["phrase"] == new.phrase      assert response["context"] == new.context      assert response["irreversible"] == true +    assert response["whole_word"] == true    end    test "delete a filter" do diff --git a/test/web/mastodon_api/views/poll_view_test.exs b/test/web/mastodon_api/views/poll_view_test.exs index 76672f36c..b7e2f17ef 100644 --- a/test/web/mastodon_api/views/poll_view_test.exs +++ b/test/web/mastodon_api/views/poll_view_test.exs @@ -135,4 +135,33 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do      assert result[:expires_at] == nil      assert result[:expired] == false    end + +  test "doesn't strips HTML tags" do +    user = insert(:user) + +    {:ok, activity} = +      CommonAPI.post(user, %{ +        status: "What's with the smug face?", +        poll: %{ +          options: [ +            "<input type=\"date\">", +            "<input type=\"date\" >", +            "<input type=\"date\"/>", +            "<input type=\"date\"></input>" +          ], +          expires_in: 20 +        } +      }) + +    object = Object.normalize(activity) + +    assert %{ +             options: [ +               %{title: "<input type=\"date\">", votes_count: 0}, +               %{title: "<input type=\"date\" >", votes_count: 0}, +               %{title: "<input type=\"date\"/>", votes_count: 0}, +               %{title: "<input type=\"date\"></input>", votes_count: 0} +             ] +           } = PollView.render("show.json", %{object: object}) +  end  end diff --git a/test/web/oauth/app_test.exs b/test/web/oauth/app_test.exs index 899af648e..993a490e0 100644 --- a/test/web/oauth/app_test.exs +++ b/test/web/oauth/app_test.exs @@ -29,5 +29,16 @@ defmodule Pleroma.Web.OAuth.AppTest do        assert exist_app.id == app.id        assert exist_app.scopes == ["read", "write", "follow", "push"]      end + +    test "has unique client_id" do +      insert(:oauth_app, client_name: "", redirect_uris: "", client_id: "boop") + +      error = +        catch_error(insert(:oauth_app, client_name: "", redirect_uris: "", client_id: "boop")) + +      assert %Ecto.ConstraintError{} = error +      assert error.constraint == "apps_client_id_index" +      assert error.type == :unique +    end    end  end | 
