# tests/test_sanitizer.py # Тестирует модуль SanitizerProcessor. import pytest from bs4 import BeautifulSoup from etpgrf.sanitizer import SanitizerProcessor from etpgrf.config import SANITIZE_NONE, SANITIZE_ETPGRF, SANITIZE_ALL_HTML def test_sanitizer_mode_none(): """ Проверяет, что в режиме SANITIZE_NONE (по умолчанию) ничего не происходит. """ html_input = '
«Hello world.
' soup = BeautifulSoup(html_input, 'html.parser') # Тестируем с mode=None и mode=False processor_none = SanitizerProcessor(mode=SANITIZE_NONE) processor_false = SanitizerProcessor(mode=False) result_soup_none = processor_none.process(soup) result_soup_false = processor_false.process(soup) assert str(result_soup_none) == html_input assert str(result_soup_false) == html_input def test_sanitizer_mode_all_html(): """ Проверяет, что в режиме SANITIZE_ALL_HTML удаляются все теги. """ html_input = 'Hello world! Click me.
' soup = BeautifulSoup(html_input, 'html.parser') processor = SanitizerProcessor(mode=SANITIZE_ALL_HTML) result_text = processor.process(soup) assert result_text == "Hello world! Click me." ETPGRF_SANITIZE_TEST_CASES = [ # ID, Описание, Входной HTML, Ожидаемый HTML ( "simple_unwrap", "Простое разворачивание span'а с одним etp-классом", '«Hello
', '«Hello
' ), ( "aggressive_unwrap", "Агрессивное разворачивание span'а со смешанными классами", 'Hello»
', 'Hello»
' ), ( "keep_user_span", "Не трогаем span'ы с пользовательскими классами", 'Hello world
', 'Hello world
' ), ( "keep_other_tags", "Не трогаем другие теги", 'And note.
', 'And note.
' ), ] @pytest.mark.parametrize("case_id, description, html_input, expected_html", ETPGRF_SANITIZE_TEST_CASES) def test_sanitizer_mode_etpgrf(case_id, description, html_input, expected_html): """ Проверяет, что в режиме SANITIZE_ETPGRF удаляется только разметка висячей пунктуации. """ soup = BeautifulSoup(html_input, 'html.parser') processor = SanitizerProcessor(mode=SANITIZE_ETPGRF) result_soup = processor.process(soup) assert str(result_soup) == expected_html