2017-05-17 09:00:09 -07:00
defmodule Pleroma.FormatterTest do
alias Pleroma.Formatter
use Pleroma.DataCase
2017-06-14 04:58:56 -07:00
import Pleroma.Factory
2018-03-24 03:03:10 -07:00
describe " .add_hashtag_links " do
test " turns hashtags into links " do
text = " I love # cofe and # 2hu "
expected_text = " I love # <a href='http://localhost:4001/tag/cofe' rel='tag'>cofe</a> and # <a 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
end
end
describe " .add_links " do
2017-05-17 09:00:09 -07:00
test " turning urls into links " do
2017-06-18 04:29:30 -07:00
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>. "
2017-05-17 09:00:09 -07:00
2018-03-24 03:03:10 -07:00
assert Formatter . add_links ( { [ ] , text } ) |> Formatter . finalize == expected
2017-11-07 03:06:37 -08:00
text = " https://mastodon.social/@lambadalambda "
expected = " <a href='https://mastodon.social/@lambadalambda'>https://mastodon.social/@lambadalambda</a> "
2018-03-24 03:03:10 -07:00
assert Formatter . add_links ( { [ ] , text } ) |> Formatter . finalize == expected
2017-11-07 03:06:37 -08:00
text = " @lambadalambda "
expected = " @lambadalambda "
2018-03-24 03:03:10 -07:00
assert Formatter . add_links ( { [ ] , text } ) |> Formatter . finalize == expected
2017-11-07 03:06:37 -08:00
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> "
2018-03-24 03:03:10 -07:00
assert Formatter . add_links ( { [ ] , text } ) |> Formatter . finalize == expected
2017-12-07 11:38:31 -08:00
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> "
2018-03-24 03:03:10 -07:00
assert Formatter . add_links ( { [ ] , text } ) |> Formatter . finalize == expected
2017-12-07 11:38:31 -08:00
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> "
2018-03-24 03:03:10 -07:00
assert Formatter . add_links ( { [ ] , text } ) |> Formatter . finalize == expected
end
end
describe " add_user_links " do
test " gives a replacement for user links " do
text = " @gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me "
gsimg = insert ( :user , %{ nickname : " gsimg " } )
archaeme = insert ( :user , %{ nickname : " archaeme " } )
archaeme_remote = insert ( :user , %{ nickname : " archaeme@archae.me " } )
mentions = Pleroma.Formatter . parse_mentions ( text )
{ subs , text } = Formatter . add_user_links ( { [ ] , text } , mentions )
assert length ( subs ) == 3
Enum . each ( subs , fn ( { uuid , _ } ) -> assert String . contains? ( text , uuid ) end )
expected_text = " <span><a href=' #{ gsimg . ap_id } '>@<span>gsimg</span></a></span> According to <span><a href=' #{ archaeme . ap_id } '>@<span>archaeme</span></a></span>, that is @daggsy. Also hello <span><a href=' #{ archaeme_remote . ap_id } '>@<span>archaeme</span></a></span> "
assert expected_text == Formatter . finalize ( { subs , text } )
2017-05-17 09:00:09 -07:00
end
end
describe " .parse_tags " do
test " parses tags in the text " do
2017-06-18 10:04:46 -07:00
text = " Here's a # Test. Maybe these are # working or not. What about # 漢字? And # は。 "
2017-05-17 09:00:09 -07:00
expected = [
2017-06-18 10:04:46 -07:00
{ " # Test " , " test " } ,
2017-05-17 09:00:09 -07:00
{ " # working " , " working " } ,
{ " # 漢字 " , " 漢字 " } ,
{ " # は " , " は " }
]
assert Formatter . parse_tags ( text ) == expected
end
end
2017-06-14 04:58:56 -07:00
test " it can parse mentions and return the relevant users " do
text = " @gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me "
gsimg = insert ( :user , %{ nickname : " gsimg " } )
archaeme = insert ( :user , %{ nickname : " archaeme " } )
archaeme_remote = insert ( :user , %{ nickname : " archaeme@archae.me " } )
expected_result = [
{ " @gsimg " , gsimg } ,
{ " @archaeme " , archaeme } ,
{ " @archaeme@archae.me " , archaeme_remote } ,
]
assert Formatter . parse_mentions ( text ) == expected_result
end
2017-06-19 08:51:43 -07:00
test " it adds cool emoji " do
text = " I love :moominmamma: "
2017-09-16 06:47:45 -07:00
expected_result = " I love <img height='32px' width='32px' alt='moominmamma' title='moominmamma' src='/finmoji/128px/moominmamma-128.png' /> "
2017-06-19 08:51:43 -07:00
2017-09-16 07:14:23 -07:00
assert Formatter . emojify ( text ) == expected_result
end
test " it returns the emoji used in the text " do
text = " I love :moominmamma: "
assert Formatter . get_emoji ( text ) == [ { " moominmamma " , " /finmoji/128px/moominmamma-128.png " } ]
2017-06-19 08:51:43 -07:00
end
2017-05-17 09:00:09 -07:00
end