diff --git a/src/documents/tests/search/test_stem_pattern_text.py b/src/documents/tests/search/test_stem_pattern_text.py new file mode 100644 index 000000000..6dbb62c80 --- /dev/null +++ b/src/documents/tests/search/test_stem_pattern_text.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +import pytest + +from documents.search._tokenizer import stem_pattern_text + +pytestmark = pytest.mark.search + + +class TestStemPatternText: + def test_unsupported_language_returns_text_unchanged(self) -> None: + """ + GIVEN: + - A language code with no Snowball stemmer mapping + WHEN: + - A pattern run is stemmed for that language + THEN: + - The run is returned unchanged, since the stemming gate that + disables stemming for an unsupported language also disables + the pattern-side stemmer + """ + assert stem_pattern_text("running", "klingon") == "running" + + def test_run_past_remove_long_limit_returns_text_unchanged(self) -> None: + """ + GIVEN: + - A supported language and a run longer than the remove_long + filter's limit (129 characters, matching Document.title's + max_length) + WHEN: + - The over-long run is stemmed + THEN: + - The remove_long filter drops the token entirely, leaving no + stem to substitute, so the run is returned unchanged + """ + long_run = "a" * 130 + assert stem_pattern_text(long_run, "en") == long_run