2025-09-11 13:25:40 +02:00
|
|
|
package util
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"testing"
|
|
|
|
|
|
2026-03-12 10:09:43 +01:00
|
|
|
"github.com/reconquest/pkg/log"
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2025-09-11 13:25:40 +02:00
|
|
|
"github.com/urfave/cli/v3"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func runWithArgs(args []string) error {
|
|
|
|
|
cmd := &cli.Command{
|
|
|
|
|
Flags: []cli.Flag{
|
|
|
|
|
&cli.BoolFlag{Name: "title-from-h1"},
|
|
|
|
|
&cli.BoolFlag{Name: "title-from-filename"},
|
2026-03-03 14:19:57 +01:00
|
|
|
&cli.StringFlag{Name: "content-appearance"},
|
2025-09-11 13:25:40 +02:00
|
|
|
},
|
2026-03-03 14:19:57 +01:00
|
|
|
Before: CheckFlags,
|
2025-09-11 13:25:40 +02:00
|
|
|
Action: func(ctx context.Context, cmd *cli.Command) error {
|
|
|
|
|
return nil
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
return cmd.Run(context.Background(), args)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestCheckMutuallyExclusiveTitleFlags(t *testing.T) {
|
|
|
|
|
t.Run("neither flag set", func(t *testing.T) {
|
|
|
|
|
err := runWithArgs([]string{"cmd"})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("only title-from-h1 set", func(t *testing.T) {
|
|
|
|
|
err := runWithArgs([]string{"cmd", "--title-from-h1"})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("only title-from-filename set", func(t *testing.T) {
|
|
|
|
|
err := runWithArgs([]string{"cmd", "--title-from-filename"})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("both flags set", func(t *testing.T) {
|
|
|
|
|
err := runWithArgs([]string{"cmd", "--title-from-h1", "--title-from-filename"})
|
|
|
|
|
if err == nil {
|
|
|
|
|
t.Errorf("expected error, got nil")
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
2026-03-03 14:19:57 +01:00
|
|
|
|
|
|
|
|
func TestContentAppearanceFlagValidation(t *testing.T) {
|
|
|
|
|
t.Run("fixed is accepted", func(t *testing.T) {
|
|
|
|
|
err := runWithArgs([]string{"cmd", "--content-appearance", "fixed"})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("full-width is accepted", func(t *testing.T) {
|
|
|
|
|
err := runWithArgs([]string{"cmd", "--content-appearance", "full-width"})
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("invalid value is rejected", func(t *testing.T) {
|
|
|
|
|
err := runWithArgs([]string{"cmd", "--content-appearance", "nope"})
|
|
|
|
|
if err == nil {
|
|
|
|
|
t.Errorf("expected error, got nil")
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
2026-03-12 10:09:43 +01:00
|
|
|
|
|
|
|
|
func Test_setLogLevel(t *testing.T) {
|
|
|
|
|
type args struct {
|
|
|
|
|
lvl string
|
|
|
|
|
}
|
|
|
|
|
tests := map[string]struct {
|
|
|
|
|
args args
|
|
|
|
|
want log.Level
|
|
|
|
|
expectedErr string
|
|
|
|
|
}{
|
|
|
|
|
"invalid": {args: args{lvl: "INVALID"}, want: log.LevelInfo, expectedErr: "unknown log level: INVALID"},
|
|
|
|
|
"empty": {args: args{lvl: ""}, want: log.LevelInfo, expectedErr: "unknown log level: "},
|
|
|
|
|
"info": {args: args{lvl: log.LevelInfo.String()}, want: log.LevelInfo},
|
|
|
|
|
"debug": {args: args{lvl: log.LevelDebug.String()}, want: log.LevelDebug},
|
|
|
|
|
"trace": {args: args{lvl: log.LevelTrace.String()}, want: log.LevelTrace},
|
|
|
|
|
"warning": {args: args{lvl: log.LevelWarning.String()}, want: log.LevelWarning},
|
|
|
|
|
"error": {args: args{lvl: log.LevelError.String()}, want: log.LevelError},
|
|
|
|
|
"fatal": {args: args{lvl: log.LevelFatal.String()}, want: log.LevelFatal},
|
|
|
|
|
}
|
|
|
|
|
for name, tt := range tests {
|
|
|
|
|
t.Run(name, func(t *testing.T) {
|
|
|
|
|
cmd := &cli.Command{
|
|
|
|
|
Name: "test",
|
|
|
|
|
Flags: []cli.Flag{
|
|
|
|
|
&cli.StringFlag{
|
|
|
|
|
Name: "log-level",
|
|
|
|
|
Value: tt.args.lvl,
|
|
|
|
|
Usage: "set the log level. Possible values: TRACE, DEBUG, INFO, WARNING, ERROR, FATAL.",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
err := SetLogLevel(cmd)
|
|
|
|
|
if tt.expectedErr != "" {
|
|
|
|
|
assert.EqualError(t, err, tt.expectedErr)
|
|
|
|
|
} else {
|
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
assert.Equal(t, tt.want, log.GetLevel())
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|