# # This file is part of pretix (Community Edition). # # Copyright (C) 2014-2020 Raphael Michel and contributors # Copyright (C) 2020-2021 rami.io GmbH and contributors # # This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General # Public License as published by the Free Software Foundation in version 3 of the License. # # ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are # applicable granting you additional permissions and placing additional restrictions on your usage of this software. # Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive # this file, see . # # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more # details. # # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # import pytest from pretix.base.templatetags.rich_text import ( ALLOWED_ATTRIBUTES, ALLOWED_TAGS, markdown_compile_email, rich_text, rich_text_snippet, ) @pytest.mark.parametrize( "link", [ # Test link detection ( "google.com", 'google.com', ), # Test link escaping ("google\\.com", "google.com"), # Test abslink_callback ("[Call](tel:+12345)", 'Call'), ( "[Foo](/foo)", 'Foo', ), ("mail@example.org", 'mail@example.org'), # Test truelink_callback ( "evilsite.com", 'evilsite.com', ), ( "cool-example.eu", 'cool-example.eu', ), ( 'Evil GmbH & Co. KG', 'Evil GmbH & Co. KG', ), ( 'Evil Site', 'Evil Site', ), ( 'evilsite.com', 'evilsite.com', ), ( 'goodsite.com', 'https://evilsite.com', ), ( 'goodsite.com', 'https://goodsite.com.evilsite.com', ), ( 'evilsite.com', 'evilsite.com', ), ("broken", "broken"), ], ) def test_linkify_abs(link): input, output = link assert rich_text_snippet(input, safelinks=False) == output assert rich_text(input, safelinks=False) == f"

{output}

" assert markdown_compile_email(input) == f"

{output}

" @pytest.mark.parametrize( "content,result", [ ("a\nb", "

a
\nb

"), ("a \nb", "

a
\nb

"), ("a\n\nb", "

a

\n

b

"), ], ) def test_newline_handling(content, result): assert rich_text(content, safelinks=False) == result @pytest.mark.parametrize( "content,result", [ ("a\nb", "

a\nb

"), ("a \nb", "

a
\nb

"), ("a\n\nb", "

a

\n

b

"), ], ) def test_newline_handling_email(content, result): assert markdown_compile_email(content) == result @pytest.mark.parametrize( "content,result,result_snippet", [ # attributes ('foo', "

foo

", "foo"), ( 'foo', "

foo

", "foo", ), # protocols ('foo', "

foo

", "foo"), # tags ("", "<script>foo</script>", "foo"), ], ) def test_cleanup(content, result, result_snippet): assert rich_text(content) == result assert rich_text_snippet(content) == result_snippet assert markdown_compile_email(content) == result def test_markdown_email_custom_allowlist(): source = "![my image](https://example.org/my-image.jpg)" html = markdown_compile_email( source, allowed_tags=ALLOWED_TAGS + ["img"], allowed_attributes=dict(ALLOWED_ATTRIBUTES, img=["src", "alt", "title"]), ) assert html == '

my image

'