import re import pytest from app.service import _normalize_text, _int_to_gujarati, _split_into_chunks from app.schemas import GenerateRequest from pydantic import ValidationError # ── _int_to_gujarati ────────────────────────────────────────────────────────── def test_zero(): assert _int_to_gujarati(0) == 'શૂન્ય' def test_one(): assert _int_to_gujarati(1) == 'એક' def test_nine(): assert _int_to_gujarati(9) == 'નવ' def test_ten(): assert _int_to_gujarati(10) == 'દસ' def test_eleven(): assert _int_to_gujarati(11) == 'અગિયાર' def test_nineteen(): assert _int_to_gujarati(19) == 'ઓગણીસ' def test_twenty_one(): assert _int_to_gujarati(21) == 'એકવીસ' def test_fifty(): assert _int_to_gujarati(50) == 'પચાસ' def test_ninety_nine(): assert _int_to_gujarati(99) == 'નવ્વાણું' def test_hundred(): assert _int_to_gujarati(100) == 'સો' def test_one_fifty(): assert _int_to_gujarati(150) == 'સો પચાસ' def test_two_hundred(): assert _int_to_gujarati(200) == 'બસ્સો' def test_two_fifty(): assert _int_to_gujarati(250) == 'બસ્સો પચાસ' def test_one_thousand(): assert _int_to_gujarati(1000) == 'એક હજાર' def test_one_two_fifty(): assert _int_to_gujarati(1250) == 'એક હજાર બસ્સો પચાસ' def test_two_thousand(): assert _int_to_gujarati(2000) == 'બે હજાર' def test_fifty_thousand():assert _int_to_gujarati(50000) == 'પચાસ હજાર' def test_one_lakh(): assert _int_to_gujarati(100000) == 'એક લાખ' def test_one_crore(): assert _int_to_gujarati(10000000)== 'એક કરોડ' def test_year(): assert _int_to_gujarati(2024) == 'બે હજાર ચોવીસ' # ── _normalize_text — basic ─────────────────────────────────────────────────── def test_gu_single(): assert _normalize_text('૧') == 'એક' def test_gu_comma(): assert _normalize_text('૧,૨૫૦') == 'એક હજાર બસ્સો પચાસ' def test_ar_comma(): assert _normalize_text('1,250') == 'એક હજાર બસ્સો પચાસ' def test_rupee(): assert _normalize_text('₹500') == 'રૂપિયા પાંચ સો' def test_rupee_gu(): assert _normalize_text('₹50,000') == 'રૂપિયા પચાસ હજાર' def test_percent(): assert _normalize_text('50%') == 'પચાસ ટકા' def test_year_gu(): assert _normalize_text('૨૦૨૪') == 'બે હજાર ચોવીસ' def test_plain_gujarati_unchanged(): assert _normalize_text('નમસ્તે') == 'નમસ્તે' def test_mixed_sentence(): result = _normalize_text('આ ₹1,250 ની કિંમત છે') assert 'એક હજાર બસ્સો પચાસ' in result # ── _normalize_text — edge cases ───────────────────────────────────────────── def test_decimal(): assert _normalize_text('3.14') == 'ત્રણ પોઈન્ટ એક ચાર' def test_decimal_gu(): assert _normalize_text('૩.૧૪') == 'ત્રણ પોઈન્ટ એક ચાર' def test_indian_lakh(): assert _normalize_text('1,00,000') == 'એક લાખ' def test_indian_crore(): assert _normalize_text('1,00,00,000') == 'એક કરોડ' def test_phone(): assert _normalize_text('9876543210') == 'નવ આઠ સાત છ પાંચ ચાર ત્રણ બે એક શૂન્ય' def test_ord1(): assert _normalize_text('1st') == 'એક' def test_ord2(): assert _normalize_text('2nd') == 'બે' def test_ord3(): assert _normalize_text('3rd') == 'ત્રણ' def test_ord4(): assert _normalize_text('4th') == 'ચાર' def test_ord_upper(): assert _normalize_text('1ST') == 'એક' # ── _split_into_chunks ──────────────────────────────────────────────────────── def test_leading_comma_stripped(): chunks = _split_into_chunks('ગયો?, મેં જાઉં.', 20) assert not any(c.startswith(',') for c in chunks) def test_speakable_chunks_only(): chunks = _split_into_chunks('Hello world. !!!', 20) assert all(re.search(r'[\w઀-૿]', c) for c in chunks) def test_long_text_chunks_user_input(): text = 'નમસ્તે! તમારું સ્વાગત છે. આજે તમારો દિવસ કેમ ગયો?' normalized = _normalize_text(text) chunks = _split_into_chunks(normalized, 20) assert len(chunks) >= 1 for c in chunks: assert not c.startswith(',') assert re.search(r'[\w઀-૿]', c) # ── Schema validation ───────────────────────────────────────────────────────── def test_schema_rejects_whitespace(): with pytest.raises(ValidationError): GenerateRequest(text=' ', description='x', speaker='Yash', language='Gujarati') def test_schema_rejects_punctuation(): with pytest.raises(ValidationError): GenerateRequest(text='!!!', description='x', speaker='Yash', language='Gujarati') def test_schema_accepts_gujarati(): req = GenerateRequest(text='નમસ્તે', description='x', speaker='Yash', language='Gujarati') assert req.text == 'નમસ્તે' def test_schema_accepts_number_in_text(): req = GenerateRequest(text='test ૧', description='x', speaker='Yash', language='Gujarati') assert req.text == 'test ૧'