package log_test import ( "bytes" "encoding/json" "strings" "testing" brokerlog "kode.naiv.no/olemd/forgejo-mcp-broker/internal/log" ) func TestNew_WritesJSON(t *testing.T) { var buf bytes.Buffer l := brokerlog.New(&buf, false) l.Info("hello", "key", "value") var rec map[string]any if err := json.Unmarshal(buf.Bytes(), &rec); err != nil { t.Fatalf("output is not valid JSON: %v\ngot: %s", err, buf.String()) } if rec["msg"] != "hello" { t.Errorf("msg = %v, want hello", rec["msg"]) } if rec["service"] != "fjmcp-broker" { t.Errorf("service = %v, want fjmcp-broker", rec["service"]) } if rec["key"] != "value" { t.Errorf("key = %v, want value", rec["key"]) } } func TestNew_DebugSuppressedByDefault(t *testing.T) { var buf bytes.Buffer l := brokerlog.New(&buf, false) l.Debug("debug-only") if buf.Len() > 0 { t.Errorf("debug record should be suppressed at info level, got: %s", buf.String()) } } func TestNew_DebugIncludedWhenEnabled(t *testing.T) { var buf bytes.Buffer l := brokerlog.New(&buf, true) l.Debug("debug-enabled") if !strings.Contains(buf.String(), "debug-enabled") { t.Errorf("debug record missing with debug=true, got: %s", buf.String()) } } func TestDiscard_NoOutput(t *testing.T) { l := brokerlog.Discard() l.Info("ignored") l.Error("also ignored") // Nothing to assert except that these calls don't panic. }