from __future__ import annotations

import pytest

from jarvis_finance.audit.log import record_audit_event
from jarvis_finance.audit.validators import require_audit_for_confirmed_transaction
from jarvis_finance.storage.database import connect_memory
from jarvis_finance.storage.migrations import apply_migrations


def test_confirmed_transaction_requires_audit_entry() -> None:
    conn = connect_memory()
    apply_migrations(conn)
    conn.execute("INSERT INTO platforms(platform_id,name,platform_type,created_at) VALUES('p1','Demo','broker','now')")
    conn.execute("INSERT INTO accounts(account_id,platform_id,account_name,account_type,created_at) VALUES('a1','p1','Demo','brokerage','now')")
    conn.execute("""
        INSERT INTO transactions(transaction_id,transaction_type,account_id,trade_date,currency_original,source_type,is_confirmed,created_at)
        VALUES('t1','buy','a1','2026-01-01','CHF','manual',1,'now')
    """)
    with pytest.raises(ValueError):
        require_audit_for_confirmed_transaction(conn, "t1")
    record_audit_event(conn, source="test", action="buy", entity_type="transaction", entity_id="t1")
    require_audit_for_confirmed_transaction(conn, "t1")
