2022-12-20 05:55:14 -08:00
from unittest . mock import Mock
import pytest
from core . html import ContentRenderer , html_to_plaintext , sanitize_html
2022-11-27 11:09:08 -08:00
def test_html_to_plaintext ( ) :
assert html_to_plaintext ( " <p>Hi!</p> " ) == " Hi! "
assert html_to_plaintext ( " <p>Hi!<br>There</p> " ) == " Hi! \n There "
assert (
html_to_plaintext ( " <p>Hi!</p> \n \n <p>How are you?</p> " ) == " Hi! \n \n How are you? "
)
assert (
html_to_plaintext ( " <p>Hi!</p> \n \n <p>How are<br> you?</p><p>today</p> " )
== " Hi! \n \n How are \n you? \n \n today "
)
2022-11-28 21:34:14 -08:00
2023-01-17 22:41:33 -08:00
assert (
html_to_plaintext (
' <p><a href= " https://fedi.takahe.social/with/a/long/path " > '
' <b>The</b> <img src= " takahe.png " > Link</a> '
' <a href= " " >Empty href</a> '
" <a>Empty A</a></p> "
)
== " https://fedi.takahe.social/with/a/long/path Empty href Empty A "
)
2022-11-28 21:34:14 -08:00
def test_sanitize_post ( ) :
2022-12-20 03:39:45 -08:00
assert sanitize_html ( " <p>Hello!</p> " ) == " <p>Hello!</p> "
assert sanitize_html ( " <p>It's great</p> " ) == " <p>It's great</p> "
2022-12-20 05:10:35 -08:00
# Note that we only want to linkify things with protocol prefixes to prevent
# too many false positives.
assert sanitize_html ( " <p>test.com</p> " ) == " <p>test.com</p> "
assert (
sanitize_html ( " <p>https://test.com</p> " )
== ' <p><a href= " https://test.com " rel= " nofollow " >https://test.com</a></p> '
)
assert (
sanitize_html ( " <p>@someone@subdomain.some-domain.com</p> " )
== " <p>@someone@subdomain.some-domain.com</p> "
)
2022-12-20 05:55:14 -08:00
2023-01-16 10:59:46 -08:00
def test_shorten_url ( ) :
full_url = (
" https://social.example.com/a-long/path/2023/01/16/that-should-be-shortened "
)
assert (
sanitize_html ( f " <p> { full_url } </p> " )
== f ' <p><a href= " { full_url } " rel= " nofollow " class= " ellipsis " title= " { full_url } " >social.example.com/a-long/path</a></p> '
)
assert (
sanitize_html (
f ' <p><a href= " { full_url } " >This is a long link text, but cannot be shortened as a URL</a></p> '
)
== f ' <p><a href= " { full_url } " rel= " nofollow " >This is a long link text, but cannot be shortened as a URL</a></p> '
)
2022-12-20 05:55:14 -08:00
@pytest.mark.django_db
2022-12-22 08:55:31 -08:00
def test_link_preservation ( ) :
2022-12-20 05:55:14 -08:00
"""
We want to :
- Preserve incoming links from other servers
- Linkify mentions and hashtags
- Not have these all step on each other !
"""
renderer = ContentRenderer ( local = True )
fake_mention = Mock ( )
fake_mention . username = " andrew "
fake_mention . domain_id = " aeracode.org "
fake_mention . urls . view = " /@andrew@aeracode.org/ "
fake_post = Mock ( )
fake_post . mentions . all . return_value = [ fake_mention ]
fake_post . author . domain . uri_domain = " example.com "
2022-12-22 08:55:31 -08:00
fake_post . emojis . all . return_value = [ ]
2022-12-20 05:55:14 -08:00
assert (
renderer . render_post (
' Hello @andrew, I want to link to this <span>#</span>hashtag: <a href= " http://example.com/@andrew/#notahashtag " >here</a> and rewrite <a href= " https://example.com/tags/thishashtag/ " >#thishashtag</a> ' ,
fake_post ,
)
== ' Hello <a href= " /@andrew@aeracode.org/ " >@andrew</a>, I want to link to this <a href= " /tags/hashtag/ " class= " hashtag " >#hashtag</a>: <a href= " http://example.com/@andrew/#notahashtag " rel= " nofollow " >here</a> and rewrite <a href= " /tags/thishashtag/ " class= " hashtag " >#thishashtag</a> '
)
2022-12-24 20:04:25 -08:00
2023-01-15 21:32:04 -08:00
@pytest.mark.django_db
def test_list_rendering ( ) :
"""
We want to :
- Preserve incoming links from other servers
- Linkify mentions and hashtags
- Not have these all step on each other !
"""
renderer = ContentRenderer ( local = True )
fake_mention = Mock ( )
fake_mention . username = " andrew "
fake_mention . domain_id = " aeracode.org "
fake_mention . urls . view = " /@andrew@aeracode.org/ "
fake_post = Mock ( )
fake_post . mentions . all . return_value = [ fake_mention ]
fake_post . author . domain . uri_domain = " example.com "
fake_post . emojis . all . return_value = [ ]
assert (
renderer . render_post (
" <p>Ok. The roster so far is:</p><ul><li>Infosec.exchange (mastodon)</li><li>pixel.Infosec.exchange (pixelfed)</li><li>video.Infosec.exchange (peertube)</li><li>relay.Infosec.exchange (activitypub relay)</li><li>risky.af (alt mastodon)</li></ul><p>What’ s next? I think I promised some people here bookwyrm</p> " ,
fake_post ,
)
== " <p>Ok. The roster so far is:</p><p>Infosec.exchange (mastodon)<br>pixel.Infosec.exchange (pixelfed)<br>video.Infosec.exchange (peertube)<br>relay.Infosec.exchange (activitypub relay)<br>risky.af (alt mastodon)</p><p>What’ s next? I think I promised some people here bookwyrm</p> "
)
2022-12-24 20:04:25 -08:00
@pytest.mark.django_db
def test_link_mixcase_mentions ( ) :
renderer = ContentRenderer ( local = True )
fake_mention = Mock ( )
fake_mention . username = " Manfre "
fake_mention . domain_id = " manfre.net "
fake_mention . urls . view = " /@Manfre@manfre.net/ "
fake_mention2 = Mock ( )
fake_mention2 . username = " manfre "
fake_mention2 . domain_id = " takahe.social "
fake_mention2 . urls . view = " https://takahe.social/@manfre@takahe.social/ "
2022-12-25 13:37:31 -08:00
unfetched_mention = Mock ( )
unfetched_mention . username = None
unfetched_mention . domain_id = None
unfetched_mention . urls . view = " /None@None/ "
2022-12-24 20:04:25 -08:00
fake_post = Mock ( )
2022-12-25 13:37:31 -08:00
fake_post . mentions . all . return_value = [
fake_mention ,
fake_mention2 ,
unfetched_mention ,
]
2022-12-24 20:04:25 -08:00
fake_post . author . domain . uri_domain = " example.com "
fake_post . emojis . all . return_value = [ ]
2022-12-25 13:37:31 -08:00
assert renderer . render_post (
" @Manfre@manfre.net @mAnFrE@takahe.social @manfre@manfre.net @unfetched@manfre.net " ,
fake_post ,
) == (
' <a href= " /@Manfre@manfre.net/ " >@Manfre</a> '
' <a href= " https://takahe.social/@manfre@takahe.social/ " >@mAnFrE@takahe.social</a> '
' <a href= " /@Manfre@manfre.net/ " >@manfre</a> '
" @unfetched@manfre.net "
2022-12-24 20:04:25 -08:00
)