package observability import ( "bytes" "io" "os" "strings" "testing" ) func TestNewLogger(t *testing.T) { logger := NewLogger("test") if logger == nil { t.Fatal("expected non-nil logger") } if logger.prefix != "test" { t.Errorf("expected prefix 'test', got %s", logger.prefix) } } func TestLogger_Info(t *testing.T) { // Capture stderr oldStderr := os.Stderr r, w, _ := os.Pipe() os.Stderr = w logger := NewLogger("test") logger.Info("test message") w.Close() os.Stderr = oldStderr var buf bytes.Buffer io.Copy(&buf, r) output := buf.String() if !strings.Contains(output, "INFO") { t.Error("expected INFO in output") } if !strings.Contains(output, "test message") { t.Error("expected 'test message' in output") } } func TestLogger_Error(t *testing.T) { oldStderr := os.Stderr r, w, _ := os.Pipe() os.Stderr = w logger := NewLogger("test") logger.Error("error message", nil) w.Close() os.Stderr = oldStderr var buf bytes.Buffer io.Copy(&buf, r) output := buf.String() if !strings.Contains(output, "ERROR") { t.Error("expected ERROR in output") } if !strings.Contains(output, "error message") { t.Error("expected 'error message' in output") } } func TestLogger_Debug(t *testing.T) { oldStderr := os.Stderr r, w, _ := os.Pipe() os.Stderr = w logger := NewLogger("test") logger.Debug("debug message") w.Close() os.Stderr = oldStderr var buf bytes.Buffer io.Copy(&buf, r) output := buf.String() if !strings.Contains(output, "DEBUG") { t.Error("expected DEBUG in output") } if !strings.Contains(output, "debug message") { t.Error("expected 'debug message' in output") } } func TestLogger_WithFields(t *testing.T) { logger := NewLogger("test") fieldsLogger := logger.WithFields(map[string]any{ "key1": "value1", "key2": 42, }) if fieldsLogger == logger { t.Error("expected different logger instance") } if len(fieldsLogger.fields) != 2 { t.Errorf("expected 2 fields, got %d", len(fieldsLogger.fields)) } } func TestLogger_Name(t *testing.T) { logger := NewLogger("myservice") if logger.prefix != "myservice" { t.Errorf("expected prefix 'myservice', got %s", logger.prefix) } }