| from backend.app.engine.nlp import MultilingualHandler, SpellCorrector | |
| class TestMultilingualHandler: | |
| def test_english_detected(self): | |
| lang = MultilingualHandler.detect_language("black leather jacket") | |
| assert lang == "en" | |
| def test_french_detected(self): | |
| lang = MultilingualHandler.detect_language("robe noir pour la femme") | |
| assert lang == "fr" | |
| def test_german_detected(self): | |
| lang = MultilingualHandler.detect_language("das kleid ist für die frau") | |
| assert lang == "de" | |
| def test_spanish_detected(self): | |
| lang = MultilingualHandler.detect_language("el vestido rojo para la mujer") | |
| assert lang == "es" | |
| def test_translate_french(self): | |
| translated, lang, was_translated = MultilingualHandler.translate_query("robe noir") | |
| assert "dress" in translated | |
| assert "black" in translated | |
| assert was_translated is True | |
| def test_english_passthrough(self): | |
| translated, lang, was_translated = MultilingualHandler.translate_query("black dress") | |
| assert translated == "black dress" | |
| assert was_translated is False | |
| assert lang == "en" | |
| def test_spanish_translate(self): | |
| translated, lang, was_translated = MultilingualHandler.translate_query("vestido rojo") | |
| assert "dress" in translated | |
| assert "red" in translated | |
| def test_cjk_detected(self): | |
| lang = MultilingualHandler.detect_language("黒いドレス") | |
| assert lang in ("ja", "zh") | |
| def test_non_latin_passthrough(self): | |
| translated, lang, was_translated = MultilingualHandler.translate_query("黒いドレス") | |
| assert was_translated is False | |
| class TestSpellCorrector: | |
| def test_correct_known_word(self): | |
| sc = SpellCorrector() | |
| sc.fit(["black leather jacket dress shoes boots"]) | |
| corrected = sc.correct_word("blak") | |
| assert corrected == "black" | |
| def test_no_correction_needed(self): | |
| sc = SpellCorrector() | |
| sc.fit(["black leather jacket"]) | |
| corrected = sc.correct_word("black") | |
| assert corrected == "black" | |
| def test_query_correction(self): | |
| sc = SpellCorrector() | |
| sc.fit(["black leather jacket dress shoes boots trainers hoodie"]) | |
| result, was_corrected = sc.correct_query("blak lether jaket") | |
| assert was_corrected is True | |
| assert "black" in result | |
| def test_short_words_skipped(self): | |
| sc = SpellCorrector() | |
| sc.fit(["black leather jacket"]) | |
| corrected = sc.correct_word("an") | |
| assert corrected == "an" | |
| def test_price_tokens_skipped(self): | |
| sc = SpellCorrector() | |
| sc.fit(["black dress"]) | |
| result, _ = sc.correct_query("dress £40") | |
| assert "£40" in result | |
| def test_not_ready_passthrough(self): | |
| sc = SpellCorrector() | |
| result, was_corrected = sc.correct_query("blak dress") | |
| assert result == "blak dress" | |
| assert was_corrected is False | |