from app.services.normalizer import TextNormalizer, matches


def test_digits():
    for value in ['5', '\u06f5', '\u0665', '  \u06f5 ', '\u0665 ']:
        assert TextNormalizer.normalize(value) == '5'


def test_persian_chars_and_spaces():
    for value in ['\u0642\u06cc\u0645\u062a', '\u0642\u064a\u0645\u062a', ' \u0642\u06cc\u0645\u062a ', '  \u0642\u064a\u0645\u062a  ']:
        assert TextNormalizer.normalize(value) == '\u0642\u06cc\u0645\u062a'
    assert TextNormalizer.normalize('\u0643\u062a\u0627\u0628') == '\u06a9\u062a\u0627\u0628'
    assert TextNormalizer.normalize('HELLO') == 'hello'
    assert TextNormalizer.normalize('a\u200cb') == 'a b'


def test_match_types():
    assert matches(' \u06f5 ', '5', 'exact')
    assert matches('hello price list', 'PRICE', 'contains')
    assert matches('abcdef', 'abc', 'starts_with')
    assert matches('abcdef', 'DEF', 'ends_with')
