feat(platform): close AI expense value loop
Add tenant-safe value, telemetry, connector, commercial, and production-readiness foundations.
This commit is contained in:
131
server/tests/test_savings_models.py
Normal file
131
server/tests/test_savings_models.py
Normal file
@@ -0,0 +1,131 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app.models.savings import (
|
||||
ProfileBaselineSnapshot,
|
||||
SavingsEvent,
|
||||
SavingsEvidenceLink,
|
||||
SavingsOpportunity,
|
||||
SavingsRealization,
|
||||
)
|
||||
|
||||
|
||||
def _constraint_names(model: type[object]) -> set[str]:
|
||||
return {
|
||||
str(constraint.name)
|
||||
for constraint in model.__table__.constraints # type: ignore[attr-defined]
|
||||
if constraint.name is not None
|
||||
}
|
||||
|
||||
|
||||
def test_savings_models_declare_tenant_safe_fact_and_audit_invariants() -> None:
|
||||
assert {
|
||||
ProfileBaselineSnapshot.__table__.name,
|
||||
SavingsOpportunity.__table__.name,
|
||||
SavingsRealization.__table__.name,
|
||||
SavingsEvidenceLink.__table__.name,
|
||||
SavingsEvent.__table__.name,
|
||||
} == {
|
||||
"profile_baseline_snapshots",
|
||||
"savings_opportunities",
|
||||
"savings_realizations",
|
||||
"savings_evidence_links",
|
||||
"savings_events",
|
||||
}
|
||||
|
||||
assert {
|
||||
"uq_profile_baseline_snapshots_tenant_id",
|
||||
"uq_profile_baseline_snapshots_tenant_key",
|
||||
"ck_profile_baseline_snapshots_historical_shape",
|
||||
"ck_profile_baseline_snapshots_policy_shape",
|
||||
"ck_profile_baseline_snapshots_quality_status",
|
||||
"ck_profile_baseline_snapshots_keys",
|
||||
}.issubset(_constraint_names(ProfileBaselineSnapshot))
|
||||
assert {
|
||||
"uq_savings_opportunities_tenant_id",
|
||||
"uq_savings_opportunities_tenant_key",
|
||||
"fk_savings_opportunities_tenant_case",
|
||||
"fk_savings_opportunities_tenant_event",
|
||||
"fk_savings_opportunities_tenant_baseline",
|
||||
"fk_savings_opportunities_tenant_ai_decision",
|
||||
"ck_savings_opportunities_net_math",
|
||||
"ck_savings_opportunities_interval",
|
||||
"ck_savings_opportunities_currencies",
|
||||
"ck_savings_opportunities_acceptance",
|
||||
"ck_savings_opportunities_started",
|
||||
"ck_savings_opportunities_realized",
|
||||
"ck_savings_opportunities_verified",
|
||||
"ck_savings_opportunities_closed",
|
||||
}.issubset(_constraint_names(SavingsOpportunity))
|
||||
assert {
|
||||
"uq_savings_realizations_tenant_id",
|
||||
"uq_savings_realizations_tenant_key",
|
||||
"uq_savings_realizations_tenant_opportunity_benefit_id",
|
||||
"uq_savings_realizations_tenant_benefit_id",
|
||||
"fk_savings_realizations_tenant_opportunity",
|
||||
"fk_savings_realizations_tenant_case",
|
||||
"fk_savings_realizations_tenant_event",
|
||||
"fk_savings_realizations_tenant_reversal",
|
||||
"fk_savings_realizations_tenant_canonical",
|
||||
"ck_savings_realizations_amount_direction",
|
||||
"ck_savings_realizations_duplicate_target",
|
||||
"ck_savings_realizations_confirmation",
|
||||
"ck_savings_realizations_net_math",
|
||||
"ck_savings_realizations_currencies",
|
||||
}.issubset(_constraint_names(SavingsRealization))
|
||||
assert {
|
||||
"uq_savings_evidence_links_tenant_id",
|
||||
"uq_savings_evidence_links_tenant_key",
|
||||
"fk_savings_evidence_links_tenant_baseline",
|
||||
"fk_savings_evidence_links_tenant_opportunity",
|
||||
"fk_savings_evidence_links_tenant_realization",
|
||||
"ck_savings_evidence_links_entity_shape",
|
||||
"ck_savings_evidence_links_verifier",
|
||||
"ck_savings_evidence_links_keys",
|
||||
}.issubset(_constraint_names(SavingsEvidenceLink))
|
||||
assert {
|
||||
"uq_savings_events_tenant_id",
|
||||
"uq_savings_events_actor_request",
|
||||
"uq_savings_events_aggregate_version",
|
||||
"fk_savings_events_tenant_baseline",
|
||||
"fk_savings_events_tenant_opportunity",
|
||||
"fk_savings_events_tenant_realization",
|
||||
"ck_savings_events_aggregate_shape",
|
||||
"ck_savings_events_version",
|
||||
"ck_savings_events_request",
|
||||
}.issubset(_constraint_names(SavingsEvent))
|
||||
|
||||
assert not SavingsOpportunity.__table__.c.claim_id.foreign_keys
|
||||
assert not SavingsOpportunity.__table__.c.claim_item_id.foreign_keys
|
||||
assert not SavingsRealization.__table__.c.claim_id.foreign_keys
|
||||
assert not SavingsRealization.__table__.c.claim_item_id.foreign_keys
|
||||
|
||||
realization_constraints = {
|
||||
constraint.name: constraint for constraint in SavingsRealization.__table__.constraints
|
||||
}
|
||||
reversal_fk = realization_constraints["fk_savings_realizations_tenant_reversal"]
|
||||
assert tuple(reversal_fk.column_keys) == (
|
||||
"tenant_id",
|
||||
"opportunity_id",
|
||||
"benefit_key",
|
||||
"reversal_of_realization_id",
|
||||
)
|
||||
canonical_fk = realization_constraints["fk_savings_realizations_tenant_canonical"]
|
||||
assert tuple(canonical_fk.column_keys) == (
|
||||
"tenant_id",
|
||||
"benefit_key",
|
||||
"canonical_realization_id",
|
||||
)
|
||||
confirmation = realization_constraints["ck_savings_realizations_confirmation"]
|
||||
assert "finance_confirmer_id <> recorded_by_id" in str(confirmation.sqltext)
|
||||
assert "realization_type = 'reversal'" in str(confirmation.sqltext)
|
||||
|
||||
canonical_index = next(
|
||||
index
|
||||
for index in SavingsRealization.__table__.indexes
|
||||
if index.name == "uq_savings_realizations_actual_canonical_benefit"
|
||||
)
|
||||
assert canonical_index.unique is True
|
||||
predicate = str(canonical_index.dialect_options["postgresql"]["where"])
|
||||
assert "realization_type = 'actual'" in predicate
|
||||
assert "dedupe_status = 'canonical'" in predicate
|
||||
assert SavingsEvent.__table__.c.response_json.nullable is False
|
||||
Reference in New Issue
Block a user