diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/formatter_test.exs | 114 | ||||
| -rw-r--r-- | test/web/common_api/common_api_utils_test.exs | 32 | 
2 files changed, 65 insertions, 81 deletions
| diff --git a/test/formatter_test.exs b/test/formatter_test.exs index f14077d25..7d8864bf4 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -21,22 +21,16 @@ defmodule Pleroma.FormatterTest do        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>" -      tags = Formatter.parse_tags(text) - -      assert expected_text == -               Formatter.add_hashtag_links({[], text}, tags) |> Formatter.finalize() +      assert {^expected_text, [], _tags} = Formatter.linkify(text)      end      test "does not turn html characters to tags" do -      text = "Fact #3: pleroma does what mastodon't" +      text = "#fact_3: pleroma does what mastodon't"        expected_text = -        "Fact <a class='hashtag' data-tag='3' href='http://localhost:4001/tag/3' rel='tag'>#3</a>: pleroma does what mastodon't" - -      tags = Formatter.parse_tags(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" -      assert expected_text == -               Formatter.add_hashtag_links({[], text}, tags) |> Formatter.finalize() +      assert {^expected_text, [], _tags} = Formatter.linkify(text)      end    end @@ -47,79 +41,79 @@ defmodule Pleroma.FormatterTest do        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> ." -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      assert {^expected, [], []} = Formatter.linkify(text)        text = "https://mastodon.social/@lambadalambda"        expected =          "<a href=\"https://mastodon.social/@lambadalambda\">https://mastodon.social/@lambadalambda</a>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      assert {^expected, [], []} = Formatter.linkify(text)        text = "@lambadalambda"        expected = "@lambadalambda" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      assert {^expected, [], []} = Formatter.linkify(text)        text = "xmpp:contact@hacktivis.me"        expected = "<a href=\"xmpp:contact@hacktivis.me\">xmpp:contact@hacktivis.me</a>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      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>" -      assert Formatter.add_links({[], text}) |> Formatter.finalize() == expected +      assert {^expected, [], []} = Formatter.linkify(text)      end    end @@ -136,12 +130,9 @@ defmodule Pleroma.FormatterTest do        archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) -      mentions = Pleroma.Formatter.parse_mentions(text) - -      {subs, text} = Formatter.add_user_links({[], text}, mentions) +      {text, mentions, []} = Formatter.linkify(text) -      assert length(subs) == 3 -      Enum.each(subs, fn {uuid, _} -> assert String.contains?(text, uuid) end) +      assert length(mentions) == 3        expected_text =          "<span class='h-card'><a data-user='#{gsimg.id}' class='u-url mention' href='#{ @@ -152,7 +143,7 @@ defmodule Pleroma.FormatterTest do            archaeme_remote.id          }' class='u-url mention' href='#{archaeme_remote.ap_id}'>@<span>archaeme</span></a></span>" -      assert expected_text == Formatter.finalize({subs, text}) +      assert expected_text == text      end      test "gives a replacement for user links when the user is using Osada" do @@ -160,48 +151,35 @@ defmodule Pleroma.FormatterTest do        text = "@mike@osada.macgirvin.com test" -      mentions = Formatter.parse_mentions(text) +      {text, mentions, []} = Formatter.linkify(text) -      {subs, text} = Formatter.add_user_links({[], text}, mentions) - -      assert length(subs) == 1 -      Enum.each(subs, fn {uuid, _} -> assert String.contains?(text, uuid) end) +      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" -      assert expected_text == Formatter.finalize({subs, text}) +      assert expected_text == text      end      test "gives a replacement for single-character local nicknames" do        text = "@o hi"        o = insert(:user, %{nickname: "o"}) -      mentions = Formatter.parse_mentions(text) - -      {subs, text} = Formatter.add_user_links({[], text}, mentions) +      {text, mentions, []} = Formatter.linkify(text) -      assert length(subs) == 1 -      Enum.each(subs, fn {uuid, _} -> assert String.contains?(text, uuid) end) +      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" -      assert expected_text == Formatter.finalize({subs, text}) +      assert expected_text == text      end      test "does not give a replacement for single-character local nicknames who don't exist" do        text = "@a hi" -      mentions = Formatter.parse_mentions(text) - -      {subs, text} = Formatter.add_user_links({[], text}, mentions) - -      assert Enum.empty?(subs) -      Enum.each(subs, fn {uuid, _} -> assert String.contains?(text, uuid) end) -        expected_text = "@a hi" -      assert expected_text == Formatter.finalize({subs, text}) +      assert {^expected_text, [] = _mentions, [] = _tags} = Formatter.linkify(text)      end    end @@ -209,14 +187,14 @@ defmodule Pleroma.FormatterTest do      test "parses tags in the text" do        text = "Here's a #Test. Maybe these are #working or not. What about #漢字? And #は。" -      expected = [ +      expected_tags = [          {"#Test", "test"},          {"#working", "working"}, -        {"#漢字", "漢字"}, -        {"#は", "は"} +        {"#は", "は"}, +        {"#漢字", "漢字"}        ] -      assert Formatter.parse_tags(text) == expected +      assert {_text, [], ^expected_tags} = Formatter.linkify(text)      end    end @@ -230,15 +208,15 @@ defmodule Pleroma.FormatterTest do      archaeme = insert(:user, %{nickname: "archaeme"})      archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"}) -    expected_result = [ -      {"@gsimg", gsimg}, +    expected_mentions = [        {"@archaeme", archaeme},        {"@archaeme@archae.me", archaeme_remote}, -      {"@o", o}, -      {"@jimm", jimm} +      {"@gsimg", gsimg}, +      {"@jimm", jimm}, +      {"@o", o}      ] -    assert Formatter.parse_mentions(text) == expected_result +    assert {_text, ^expected_mentions, []} = Formatter.linkify(text)    end    test "it adds cool emoji" do @@ -281,22 +259,10 @@ defmodule Pleroma.FormatterTest do      assert Formatter.get_emoji(text) == []    end -  describe "/mentions_escape" do -    test "it returns text with escaped mention names" do -      text = """ -      @a_breakin_glass@cybre.space -      (also, little voice inside my head thinking "maybe this will encourage people -      pronouncing it properly instead of saying _raKEWdo_ ") -      """ - -      escape_text = """ -      @a\\_breakin\\_glass@cybre\\.space -      (also, little voice inside my head thinking \"maybe this will encourage people -      pronouncing it properly instead of saying _raKEWdo_ \") -      """ - -      mentions = [{"@a_breakin_glass@cybre.space", %{}}] -      assert Formatter.mentions_escape(text, mentions) == escape_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" + +    assert Formatter.html_escape(text, "text/plain") == expected    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 faed6b685..dc7b4c229 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -57,19 +57,19 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do      assert expected == Utils.emoji_from_profile(user)    end -  describe "format_input/4" do +  describe "format_input/3" do      test "works for bare text/plain" do        text = "hello world!"        expected = "hello world!" -      output = Utils.format_input(text, [], [], "text/plain") +      {output, [], []} = Utils.format_input(text, "text/plain")        assert output == expected        text = "hello world!\n\nsecond paragraph!"        expected = "hello world!<br><br>second paragraph!" -      output = Utils.format_input(text, [], [], "text/plain") +      {output, [], []} = Utils.format_input(text, "text/plain")        assert output == expected      end @@ -78,14 +78,14 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        text = "<p>hello world!</p>"        expected = "<p>hello world!</p>" -      output = Utils.format_input(text, [], [], "text/html") +      {output, [], []} = Utils.format_input(text, "text/html")        assert output == expected        text = "<p>hello world!</p>\n\n<p>second paragraph</p>"        expected = "<p>hello world!</p>\n\n<p>second paragraph</p>" -      output = Utils.format_input(text, [], [], "text/html") +      {output, [], []} = Utils.format_input(text, "text/html")        assert output == expected      end @@ -94,14 +94,32 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do        text = "**hello world**"        expected = "<p><strong>hello world</strong></p>\n" -      output = Utils.format_input(text, [], [], "text/markdown") +      {output, [], []} = Utils.format_input(text, "text/markdown")        assert output == expected        text = "**hello world**\n\n*another paragraph*"        expected = "<p><strong>hello world</strong></p>\n<p><em>another paragraph</em></p>\n" -      output = Utils.format_input(text, [], [], "text/markdown") +      {output, [], []} = Utils.format_input(text, "text/markdown") + +      assert output == expected +    end + +    test "works for text/markdown with mentions" do +      {:ok, user} = +        UserBuilder.insert(%{nickname: "user__test", ap_id: "http://foo.com/user__test"}) + +      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='#{ +          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='#{ +          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" + +      {output, _, _} = Utils.format_input(text, "text/markdown")        assert output == expected      end | 
