"""Curatarea textului OCR si alegerea interogarii de cautare. Fara tesseract si fara retea: `ocr.run` e singurul care atinge procese externe si nu e testat aici — restul sunt functii pure peste text. """ from __future__ import annotations import ocr def test_clean_scoate_liniile_goale_si_ramele(): raw = "Eroare la salvare\n\n \n|||||\n----\nORA-01722: invalid number\n" assert ocr.clean(raw) == "Eroare la salvare\nORA-01722: invalid number" def test_clean_normalizeaza_spatiile_si_taie_duplicatele(): raw = "ORA-00001: unique constraint\nORA-00001: unique constraint\n" # a doua linie e identica dupa normalizare — tesseract repeta uneori randuri assert ocr.clean(raw) == "ORA-00001: unique constraint" def test_clean_plafoneaza_si_marcheaza_trunchierea(): out = ocr.clean("\n".join(f"linia numarul {i}" for i in range(500)), max_chars=100) assert len(out) < 200 assert out.endswith("[…text trunchiat]") def test_error_lines_gaseste_codurile_oracle_si_mesajele_romanesti(): text = ( "Fisier Editare Ajutor\n" "Nr. crt. Denumire Cantitate\n" "ORA-12154: TNS:could not resolve\n" "Documentul nu exista in baza de date\n" "Total general 1.234,00\n" ) assert ocr.error_lines(text) == [ "ORA-12154: TNS:could not resolve", "Documentul nu exista in baza de date", ] def test_error_lines_limiteaza_numarul(): text = "\n".join(f"eroare {i}" for i in range(20)) assert len(ocr.error_lines(text, limit=3)) == 3 def test_retrieval_query_pune_legenda_prima_apoi_erorile(): q = ocr.retrieval_query("nu pot factura", "Meniu principal\nORA-00942: table or view does not exist") assert q == "nu pot factura\nORA-00942: table or view does not exist" def test_retrieval_query_fara_linii_de_eroare_cade_pe_primele_linii(): # O captura fara niciun cuvant-cheie tot trebuie cautata cumva; mai bine # aproximativ decat deloc. text = "\n".join(f"linia {i}" for i in range(20)) q = ocr.retrieval_query("", text) assert q.splitlines() == [f"linia {i}" for i in range(8)] def test_retrieval_query_doar_legenda_cand_ocr_e_gol(): assert ocr.retrieval_query("cum sterg o factura?", "") == "cum sterg o factura?"