package audit import ( "testing" "time" ) func TestSummarizeAuditDetails(t *testing.T) { present, length, digest := summarizeAuditDetails("apiToken=secret-value") if !present { t.Fatal("expected details to be marked present") } if length != len("apiToken=secret-value") { t.Fatalf("length = %d", length) } if digest == "" { t.Fatal("expected non-empty digest") } emptyPresent, emptyLength, emptyDigest := summarizeAuditDetails("") if emptyPresent || emptyLength != 0 || emptyDigest != "" { t.Fatalf("unexpected empty summary: %v %d %q", emptyPresent, emptyLength, emptyDigest) } } func TestConsoleLogger_Log(t *testing.T) { logger := NewConsoleLogger() event := Event{ ID: "test-id-123", Timestamp: time.Now(), EventType: "login", User: "testuser", IP: "192.168.1.100", Path: "/api/login", Success: true, Details: "Basic auth login", } err := logger.Log(event) if err != nil { t.Errorf("ConsoleLogger.Log() returned error: %v", err) } } func TestConsoleLogger_Log_Failed(t *testing.T) { logger := NewConsoleLogger() event := Event{ ID: "test-id-456", Timestamp: time.Now(), EventType: "login", User: "baduser", IP: "10.0.0.5", Path: "/api/login", Success: false, Details: "Invalid credentials", } err := logger.Log(event) if err != nil { t.Errorf("ConsoleLogger.Log() returned error: %v", err) } } func TestConsoleLogger_Query(t *testing.T) { logger := NewConsoleLogger() events, err := logger.Query(QueryFilter{}) if err != nil { t.Errorf("ConsoleLogger.Query() returned error: %v", err) } if len(events) != 0 { t.Errorf("ConsoleLogger.Query() should return empty slice, got %d events", len(events)) } } func TestConsoleLogger_Count(t *testing.T) { logger := NewConsoleLogger() count, err := logger.Count(QueryFilter{}) if err != nil { t.Errorf("ConsoleLogger.Count() returned error: %v", err) } if count != 0 { t.Errorf("ConsoleLogger.Count() should return 0, got %d", count) } } func TestConsoleLogger_Close(t *testing.T) { logger := NewConsoleLogger() err := logger.Close() if err != nil { t.Errorf("ConsoleLogger.Close() returned error: %v", err) } } func TestSetLogger_GetLogger(t *testing.T) { // Create a custom logger for testing customLogger := NewConsoleLogger() SetLogger(customLogger) got := GetLogger() if got != customLogger { t.Error("GetLogger() did not return the logger set by SetLogger()") } } func TestLog_ConvenienceFunction(t *testing.T) { // Set a console logger SetLogger(NewConsoleLogger()) // This should not panic Log("test_event", "user", "127.0.0.1", "/test", true, "test details") } func TestGetLogger_DefaultsToConsole(t *testing.T) { // Reset global state for this test loggerMu.Lock() globalLogger = nil loggerMu.Unlock() logger := GetLogger() if logger == nil { t.Error("GetLogger() returned nil") } _, ok := logger.(*ConsoleLogger) if !ok { t.Error("GetLogger() should return ConsoleLogger by default") } }