template/pkg/logger/logger_test.go
djmil 7bc91b0890 pkg/logger: replace NewDevelopment with NewCLI(level, debugFile)
Two modes for interactive CLI use — driven by debugFile presence:
- Normal (debugFile=""): human text on screen, INFO and above.
- Debug  (debugFile set): same screen + full JSON trace to file.

Auto-detects TTY; falls back to 12-factor JSON when piped/redirected.
IsInteractive() exposes TTY detection for call sites that need it.

Terminal format: INFO has no prefix (program's normal voice);
WARN prints "warning: …"; ERROR prints "error: …"; DEBUG "debug: …".

Breaking: NewDevelopment removed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 16:48:34 +00:00

59 lines
1.1 KiB
Go

package logger_test
import (
"testing"
"gitea.djmil.dev/go/template/pkg/logger"
"gitea.djmil.dev/go/template/pkg/testutil"
)
func TestNewCLI(t *testing.T) {
tests := []struct {
level string
wantErr bool
}{
{level: "debug"},
{level: "info"},
{level: "warn"},
{level: "error"},
{level: "invalid", wantErr: true},
{level: "", wantErr: true},
}
for _, tc := range tests {
t.Run(tc.level, func(t *testing.T) {
// In tests stderr is not a terminal — NewCLI uses JSON path.
r := logger.NewCLI(tc.level, "")
if tc.wantErr {
testutil.ResultErr(t, r)
return
}
testutil.ResultOkNotNil(t, r)
})
}
}
func TestNew(t *testing.T) {
tests := []struct {
level string
wantErr bool
}{
{level: "debug"},
{level: "info"},
{level: "warn"},
{level: "error"},
{level: "invalid", wantErr: true},
{level: "", wantErr: true},
}
for _, tc := range tests {
t.Run(tc.level, func(t *testing.T) {
r := logger.New(tc.level)
if tc.wantErr {
testutil.ResultErr(t, r)
return
}
testutil.ResultOkNotNil(t, r)
})
}
}