89 lines
4.6 KiB
TypeScript
89 lines
4.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
isCapabilityRouteBlocked,
|
|
resolveAddressCapabilityRouteDecision,
|
|
resolveShadowRouteIntent
|
|
} from "../src/services/addressCapabilityPolicy";
|
|
|
|
describe("address capability policy", () => {
|
|
it("maps confirmed payables intent to compute exact capability", () => {
|
|
const decision = resolveAddressCapabilityRouteDecision("payables_confirmed_as_of_date");
|
|
expect(decision.capability_id).toBe("confirmed_payables_as_of_date");
|
|
expect(decision.capability_layer).toBe("compute");
|
|
expect(decision.capability_route_mode).toBe("exact");
|
|
expect(decision.capability_route_enabled).toBe(true);
|
|
expect(isCapabilityRouteBlocked(decision)).toBe(false);
|
|
});
|
|
|
|
it("maps confirmed receivables intent to compute exact capability", () => {
|
|
const decision = resolveAddressCapabilityRouteDecision("receivables_confirmed_as_of_date");
|
|
expect(decision.capability_id).toBe("confirmed_receivables_as_of_date");
|
|
expect(decision.capability_layer).toBe("compute");
|
|
expect(decision.capability_route_mode).toBe("exact");
|
|
expect(decision.capability_route_enabled).toBe(true);
|
|
expect(isCapabilityRouteBlocked(decision)).toBe(false);
|
|
});
|
|
|
|
it("maps confirmed VAT payable intent to compute exact capability", () => {
|
|
const decision = resolveAddressCapabilityRouteDecision("vat_payable_confirmed_as_of_date");
|
|
expect(decision.capability_id).toBe("confirmed_vat_payable_as_of_date");
|
|
expect(decision.capability_layer).toBe("compute");
|
|
expect(decision.capability_route_mode).toBe("exact");
|
|
expect(decision.capability_route_enabled).toBe(true);
|
|
expect(isCapabilityRouteBlocked(decision)).toBe(false);
|
|
});
|
|
|
|
it("maps inventory-on-hand intent to compute exact capability", () => {
|
|
const decision = resolveAddressCapabilityRouteDecision("inventory_on_hand_as_of_date");
|
|
expect(decision.capability_id).toBe("confirmed_inventory_on_hand_as_of_date");
|
|
expect(decision.capability_layer).toBe("compute");
|
|
expect(decision.capability_route_mode).toBe("exact");
|
|
expect(decision.capability_route_enabled).toBe(true);
|
|
expect(isCapabilityRouteBlocked(decision)).toBe(false);
|
|
});
|
|
|
|
it("marks inventory provenance intents as blocked exact-capability gaps", () => {
|
|
const decision = resolveAddressCapabilityRouteDecision("inventory_purchase_provenance_for_item");
|
|
expect(decision.capability_id).toBe("inventory_inventory_purchase_provenance_for_item");
|
|
expect(decision.capability_layer).toBe("compute");
|
|
expect(decision.capability_route_mode).toBe("exact");
|
|
expect(decision.capability_route_enabled).toBe(false);
|
|
expect(decision.capability_route_reason).toBe("inventory_provenance_route_not_implemented");
|
|
expect(isCapabilityRouteBlocked(decision)).toBe(true);
|
|
});
|
|
|
|
it("marks purchase-to-sale trace and aging intents as blocked exact-capability gaps", () => {
|
|
const chainDecision = resolveAddressCapabilityRouteDecision("inventory_purchase_to_sale_chain");
|
|
expect(chainDecision.capability_id).toBe("inventory_inventory_purchase_to_sale_chain");
|
|
expect(chainDecision.capability_route_mode).toBe("exact");
|
|
expect(chainDecision.capability_route_enabled).toBe(false);
|
|
expect(isCapabilityRouteBlocked(chainDecision)).toBe(true);
|
|
|
|
const agingDecision = resolveAddressCapabilityRouteDecision("inventory_aging_by_purchase_date");
|
|
expect(agingDecision.capability_id).toBe("inventory_inventory_aging_by_purchase_date");
|
|
expect(agingDecision.capability_route_mode).toBe("exact");
|
|
expect(agingDecision.capability_route_enabled).toBe(false);
|
|
expect(isCapabilityRouteBlocked(agingDecision)).toBe(true);
|
|
});
|
|
|
|
it("maps document drilldown intent to navigation capability", () => {
|
|
const decision = resolveAddressCapabilityRouteDecision("list_documents_by_contract");
|
|
expect(decision.capability_id).toBe("documents_drilldown");
|
|
expect(decision.capability_layer).toBe("navigation");
|
|
expect(decision.capability_route_mode).toBe("exact");
|
|
expect(decision.capability_route_enabled).toBe(true);
|
|
});
|
|
|
|
it("maps heuristic list intents to heuristic compute route mode", () => {
|
|
const decision = resolveAddressCapabilityRouteDecision("list_receivables_counterparties");
|
|
expect(decision.capability_id).toBe("receivables_candidates_list");
|
|
expect(decision.capability_layer).toBe("compute");
|
|
expect(decision.capability_route_mode).toBe("heuristic");
|
|
});
|
|
|
|
it("keeps shadow route disabled by default", () => {
|
|
expect(resolveShadowRouteIntent("payables_confirmed_as_of_date", "confirmed_balance")).toBeNull();
|
|
expect(resolveShadowRouteIntent("list_payables_counterparties", "confirmed_balance")).toBeNull();
|
|
});
|
|
});
|