c17f41aaf8
- Introduced new tables for audit events and runtime state snapshots in the database schema. - Created data classes for AuditRecord and RuntimeStateRecord to represent the new entities. - Implemented AuditRepository and RuntimeStateRepository for inserting and retrieving records. - Enhanced the dashboard to include an audit trail section, displaying recent audit events. - Added tests for the new audit repository and runtime lifecycle functionalities. - Updated settings validation to ensure proper configuration for alerting features. - Integrated alert notifications across various components, including execution sequencer and loss limits.
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import UTC, datetime
|
|
|
|
from arbitrade.config.settings import Settings
|
|
from arbitrade.storage.db import DuckDBStore
|
|
from arbitrade.storage.repositories import AuditRecord, AuditRepository
|
|
|
|
|
|
def test_audit_repository_inserts_and_lists_recent(tmp_path) -> None:
|
|
settings = Settings(_env_file=None, DUCKDB_PATH=tmp_path / "audit.duckdb")
|
|
store = DuckDBStore(settings)
|
|
store.migrate()
|
|
repository = AuditRepository(store)
|
|
|
|
repository.insert(
|
|
AuditRecord(
|
|
occurred_at=datetime.now(UTC),
|
|
actor="dashboard_user",
|
|
event_type="dashboard.control.start",
|
|
decision="approved",
|
|
payload={"execution_status": "running"},
|
|
correlation_id="req-1",
|
|
)
|
|
)
|
|
|
|
recent = repository.list_recent(limit=5)
|
|
|
|
assert len(recent) == 1
|
|
assert recent[0].actor == "dashboard_user"
|
|
assert recent[0].event_type == "dashboard.control.start"
|
|
assert recent[0].decision == "approved"
|
|
assert recent[0].payload == {"execution_status": "running"}
|
|
assert recent[0].correlation_id == "req-1"
|