feat(ai): add expense application feedback ledger
This commit is contained in:
@@ -16,6 +16,7 @@ from sqlalchemy.pool import StaticPool
|
||||
from app.api.deps import get_db
|
||||
from app.db.base import Base
|
||||
from app.main import create_app
|
||||
from app.models.ai_learning import AIDecision, AIDecisionFeedback, WorkflowOutcome
|
||||
from app.models.budget import BudgetAllocation, BudgetReservation, BudgetTransaction
|
||||
from app.models.employee import Employee
|
||||
from app.models.expense_case import BusinessEvent, ExpenseCaseLink
|
||||
@@ -982,6 +983,23 @@ def test_application_preview_action_submits_without_orchestrator_run(monkeypatch
|
||||
assert event.expense_case_id == case_link.expense_case_id
|
||||
assert event.payload_json["previous_status"] == "draft"
|
||||
assert event.payload_json["next_status"] == "submitted"
|
||||
decision = db.scalar(select(AIDecision).where(AIDecision.expense_claim_id == claim.id))
|
||||
feedback = db.scalar(
|
||||
select(AIDecisionFeedback).where(AIDecisionFeedback.expense_claim_id == claim.id)
|
||||
)
|
||||
outcome = db.scalar(
|
||||
select(WorkflowOutcome).where(WorkflowOutcome.expense_claim_id == claim.id)
|
||||
)
|
||||
assert decision is not None
|
||||
assert decision.expense_case_id == case_link.expense_case_id
|
||||
assert decision.correlation_id == event.correlation_id
|
||||
assert decision.business_event_id == event.id
|
||||
assert feedback is not None
|
||||
assert feedback.feedback_type == "accepted"
|
||||
assert feedback.action_type == "submit"
|
||||
assert outcome is not None
|
||||
assert outcome.outcome_type == "application_submitted"
|
||||
assert outcome.business_event_id == event.id
|
||||
assert any(
|
||||
isinstance(flag, dict)
|
||||
and flag.get("event_type") == "expense_application_submission"
|
||||
@@ -1033,6 +1051,9 @@ def test_application_direct_submit_rolls_back_budget_when_case_event_fails(
|
||||
assert list(db.scalars(select(BudgetTransaction)).all()) == []
|
||||
assert list(db.scalars(select(ExpenseCaseLink)).all()) == []
|
||||
assert list(db.scalars(select(BusinessEvent)).all()) == []
|
||||
assert list(db.scalars(select(AIDecision)).all()) == []
|
||||
assert list(db.scalars(select(AIDecisionFeedback)).all()) == []
|
||||
assert list(db.scalars(select(WorkflowOutcome)).all()) == []
|
||||
|
||||
|
||||
def test_application_preview_action_saves_draft_with_detail_reference(monkeypatch, tmp_path) -> None:
|
||||
|
||||
Reference in New Issue
Block a user