import importlib.util import sys from pathlib import Path ROOT = Path(__file__).parents[1] spec = importlib.util.spec_from_file_location("sgv_capabilities", ROOT / "scripts" / "sgv_capabilities.py") cap = importlib.util.module_from_spec(spec); sys.modules[spec.name] = cap; spec.loader.exec_module(cap) def columns(**over): base = {f: 37 for f in cap.WRITE_TARGETS} base.update({"ALIQUOTA": 16, "IPI": 27, cap.ORIGIN_FIELD: 8}) base.update(over) return base def test_capabilities_are_column_driven_not_version_driven(): caps = cap.detect_capabilities(columns()) assert all(caps.values()) and len(caps) == 15 missing = {k: v for k, v in columns().items() if k not in ("CEST", "COD_ORIGEM_MERCADORIA")} caps = cap.detect_capabilities(missing) assert caps["supports_cest"] is False and caps["supports_origin"] is False and caps["supports_ncm"] is True def test_type_incompatibility_disables_capability(): assert cap.detect_capabilities(columns(IPI=37))["supports_ipi"] is False # text column cannot hold a numeric IPI rate assert cap.detect_capabilities(columns(CST_ENTRADA=8))["supports_cst_entry"] is True # SMALLINT/INTEGER codes accepted def test_schema_classification(): ok = cap.field_compatibility(columns()) assert cap.classify_schema(True, True, "abc", "abc", ok) == "REFERENCE_SCHEMA_MATCH" assert cap.classify_schema(True, True, "xyz", "abc", ok) == "COMPATIBLE_WITH_VARIATIONS" # different hash is not a failure assert cap.classify_schema(False, True, "abc", "abc", ok) == "INCOMPATIBLE" bad = cap.field_compatibility({k: v for k, v in columns().items() if k != "CFOP"}) assert cap.classify_schema(True, True, "xyz", "abc", bad) == "INCOMPATIBLE" no_origin = cap.field_compatibility({k: v for k, v in columns().items() if k != cap.ORIGIN_FIELD}) assert cap.classify_schema(True, True, "xyz", "abc", no_origin) == "COMPATIBLE_WITH_VARIATIONS" # origin is optional (only PROBABLE) def test_segment_from_evidence_not_filename(): seg, _, ev = cap.infer_segment({"restaurant_tables_rows": 700, "kitchen_products": 200, "recipes": 0, "service_orders": 0, "vehicle_products": 0, "grade_items": 0, "nfce_items": 0}, "") assert seg == "RESTAURANT" and ev assert cap.infer_segment({}, "MM MODAS")[0] == "APPAREL" assert cap.infer_segment({}, "")[0] == "UNKNOWN"