from core.utils import _matches_pattern, find_first_matching_file def test_matches_pattern_simple_contains(): assert _matches_pattern("Factura_123.pdf", "factura") assert _matches_pattern("otro_factura_1.tif", "FACTURA") assert not _matches_pattern("recibo_123.txt", "factura") def test_matches_pattern_wildcard_without_extension(): # Patrón sin extensión se aplica sobre el nombre sin extensión assert _matches_pattern("Factura_1.pdf", "*_1") assert _matches_pattern("doc_OK1.tif", "doc_*1") assert not _matches_pattern("Factura_10.pdf", "*_1") # termina en _10 def test_matches_pattern_wildcard_with_extension(): # Patrón con extensión válida se aplica al nombre completo assert _matches_pattern("Factura_OK1.pdf", "*_OK?.pdf") assert not _matches_pattern("Factura_OK1.tif", "*_OK?.pdf") assert not _matches_pattern("Factura_OK12.pdf", "*_OK?.pdf") # demasiados caracteres def test_matches_pattern_only_allowed_exts(): # Extensiones que no sean pdf/tif/tiff se ignoran assert not _matches_pattern("Factura_1.png", "*_1") def test_find_first_matching_file_uses_helper_and_sorts(): files = [ "Z_Factura_1.pdf", "A_Factura_1.pdf", "B_Factura_2.tif", "nota.txt", ] # Sin comodines: contiene assert find_first_matching_file(files, "Factura_") == "A_Factura_1.pdf" # Con comodines sin extensión assert find_first_matching_file(files, "*_2") == "B_Factura_2.tif" # Con comodines + extensión explícita assert find_first_matching_file(files, "*_1.pdf") == "A_Factura_1.pdf"