Files
GTI_GERENCIADOR_FISCAL/tests/test_sgv_capabilities.py
T

46 lines
2.3 KiB
Python

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"