package logger_test import ( "context" "log/slog" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "sneak.berlin/go/dnswatcher/internal/globals" "sneak.berlin/go/dnswatcher/internal/logger" ) func newTestLogger(t *testing.T) *logger.Logger { t.Helper() g := &globals.Globals{Appname: "dnswatcher", Version: "test"} l, err := logger.New(nil, logger.Params{Globals: g}) require.NoError(t, err) return l } // TestNewReturnsUsableLogger checks that the constructor yields a // working *slog.Logger. func TestNewReturnsUsableLogger(t *testing.T) { t.Parallel() l := newTestLogger(t) require.NotNil(t, l.Get(), "Get must return a non-nil logger") } // TestDefaultLevelExcludesDebug verifies the default configuration // logs at info: debug records are suppressed, info records pass. func TestDefaultLevelExcludesDebug(t *testing.T) { t.Parallel() log := newTestLogger(t).Get() ctx := context.Background() assert.False(t, log.Enabled(ctx, slog.LevelDebug), "debug must be suppressed at the default level") assert.True(t, log.Enabled(ctx, slog.LevelInfo), "info must be enabled at the default level") } // TestEnableDebugLoggingChangesLevel verifies the debug and non-debug // configurations differ as intended: enabling debug makes debug // records pass where they previously did not. func TestEnableDebugLoggingChangesLevel(t *testing.T) { t.Parallel() l := newTestLogger(t) log := l.Get() ctx := context.Background() require.False(t, log.Enabled(ctx, slog.LevelDebug), "debug must start disabled") l.EnableDebugLogging() assert.True(t, log.Enabled(ctx, slog.LevelDebug), "debug must be enabled after EnableDebugLogging") }