# 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", "Не трогаем другие теги", '
Bold and italic
', '
Bold and italic
' ), ( "complex_case", "Сложный случай с несколькими разными span'ами", '

«Title»

And note.

', '

«Title»

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