# -*- coding: utf-8 -*- # BSD 2-Clause License # # Apprise - Push Notification Library. # Copyright (c) 2023, Chris Caron # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from apprise import NotifyFormat from apprise.conversion import convert_between import pytest # Disable logging for a cleaner testing output import logging logging.disable(logging.CRITICAL) def test_conversion_html_to_text(): """conversion: Test HTML to plain text """ def to_html(body): """ A function to simply html conversion tests """ return convert_between(NotifyFormat.HTML, NotifyFormat.TEXT, body) assert to_html("No HTML code here.") == "No HTML code here." clist = to_html("") assert "Lots and lots" in clist assert "of lists." in clist assert "To be or not to be." in to_html( "
To be or not to be.
") cspace = to_html( "

Fancy heading

" "

And a paragraph too.
Plus line break.

") assert "Fancy heading" in cspace assert "And a paragraph too.\nPlus line break." in cspace assert to_html( "" "

Some obnoxious text here.

") == "Some obnoxious text here." assert to_html( "

line 1

" "

line 2

" "

line 3

") == "line 1\nline 2\nline 3" # Case sensitivity assert to_html( "

line 1

" "

line 2

" "

line 3

") == "line 1\nline 2\nline 3" # double new lines (testing
and
) assert to_html( "some information

and more information") == \ "some information\n\nand more information" # # Test bad tags # # first 2 entries are okay, but last will do as best as it can assert to_html( "

line 1" "

line 2" "

line 3>") == "line 1\nline 2\nline 3>" # Make sure we ignore fields that aren't important to us assert to_html( "" "

line 1

" "Another line without being enclosed") == \ "line 1\nAnother line without being enclosed" # Test cases when there are no new lines (we're dealing with just inline # entries); an empty entry as well assert to_html("test " "my link") == \ "test my link" #

missing assert to_html("
line 1 bold
" " my link" "

3rd line") == \ "line 1 bold\nmy link\n3rd line" #


on it's own assert to_html("
") == "---" assert to_html("
") == "---" # We need to handle HTML Encodings assert to_html(""" ignore this entry Let's handle special html encoding
""") == "Let's handle special html encoding\n---" # If you give nothing, you get nothing in return assert to_html("") == "" with pytest.raises(TypeError): # Invalid input assert to_html(None) with pytest.raises(TypeError): # Invalid input assert to_html(42) with pytest.raises(TypeError): # Invalid input assert to_html(object) def test_conversion_text_to(): """conversion: Test Text to all types """ response = convert_between( NotifyFormat.TEXT, NotifyFormat.HTML, "Test MessageBody") assert response == \ '<title>Test Message</title><body>Body<'\ '/body>'