package api import ( "encoding/json" "net/http" "net/http/httptest" "testing" "crypto-miner-server/internal/db" "crypto-miner-server/internal/pool" ) func TestGetOathLedgerLimit(t *testing.T) { database, err := db.New(t.TempDir()) if err != nil { t.Fatal(err) } t.Cleanup(func() { _ = database.Close() }) bridge := &OathLedgerBridge{DB: database} if err := bridge.Record("comrade", db.OathGraft, "tgt-1", "#ff00aa", db.OathOutcomeSuccess, map[string]string{"source": "src-1"}, map[string]string{"graft_tier": "dns_txt"}); err != nil { t.Fatal(err) } fh := NewFleetHandler(database, nil, nil, nil, nil, pool.Config{}, t.TempDir()) req := httptest.NewRequest(http.MethodGet, "/api/v1/fleet/oath-ledger?limit=5", nil) rec := httptest.NewRecorder() fh.GetOathLedger(rec, req) if rec.Code != http.StatusOK { t.Fatalf("status = %d body=%s", rec.Code, rec.Body.String()) } var rows []db.OathLedgerEntry if err := json.Unmarshal(rec.Body.Bytes(), &rows); err != nil { t.Fatal(err) } if len(rows) != 1 || rows[0].ActionType != db.OathGraft || rows[0].Actor != "comrade" { t.Fatalf("unexpected rows: %+v", rows) } } func TestOathLedgerBridgePersistsCourtRow(t *testing.T) { database, err := db.New(t.TempDir()) if err != nil { t.Fatal(err) } t.Cleanup(func() { _ = database.Close() }) hub := NewWSHub(database) bridge := &OathLedgerBridge{DB: database, Hub: hub} if err := bridge.Record("ai_council:judge", db.OathCourtL4Decision, "a1", "", db.OathOutcomeSuccess, map[string]string{"verdict": "retry"}, map[string]string{"executed": "spread_now"}); err != nil { t.Fatal(err) } rows, err := database.ListOathLedger(1) if err != nil || len(rows) != 1 || rows[0].ActionType != db.OathCourtL4Decision { t.Fatalf("db rows: %+v err=%v", rows, err) } }