Files
photoprism/internal/config/cli_flag_test.go
2024-12-06 09:08:38 +01:00

211 lines
4.8 KiB
Go

package config
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/urfave/cli/v2"
)
func TestCliFlag_Skip(t *testing.T) {
withTags := CliFlag{
Flag: &cli.StringFlag{
Name: "with-tags",
Usage: "`STRING`",
EnvVars: EnvVars("WITH_TAGS"),
},
Tags: []string{"foo", "bar"},
}
noTags := CliFlag{
Flag: &cli.StringFlag{
Name: "no-tags",
Usage: "`STRING`",
EnvVars: EnvVars("NO_TAGS"),
},
Tags: []string{},
}
t.Run("True", func(t *testing.T) {
assert.True(t, withTags.Skip([]string{"baz"}))
assert.False(t, noTags.Skip([]string{"baz"}))
})
t.Run("False", func(t *testing.T) {
assert.False(t, withTags.Skip([]string{"foo"}))
assert.False(t, noTags.Skip([]string{"foo"}))
})
}
func TestCliFlag_EnvVars(t *testing.T) {
t.Run("None", func(t *testing.T) {
testFlag := CliFlag{
Flag: &cli.StringFlag{
Name: "test",
Usage: "`STRING`",
EnvVars: nil,
},
Tags: []string{"foo", "bar"},
}
assert.Equal(t, "test", testFlag.Name())
assert.Equal(t, []string{"test"}, testFlag.Names())
assert.Equal(t, "test", testFlag.String())
assert.Equal(t, "", testFlag.EnvVar())
assert.Equal(t, []string{}, testFlag.EnvVars())
})
t.Run("One", func(t *testing.T) {
testFlag := CliFlag{
Flag: &cli.StringFlag{
Name: "test",
Usage: "`STRING`",
EnvVars: EnvVars("BAR_BAZ"),
},
Tags: []string{"foo", "bar"},
}
assert.Equal(t, "test", testFlag.Name())
assert.Equal(t, []string{"test"}, testFlag.Names())
assert.Equal(t, "test", testFlag.String())
assert.Equal(t, "PHOTOPRISM_BAR_BAZ", testFlag.EnvVar())
assert.Equal(t, []string{"PHOTOPRISM_BAR_BAZ"}, testFlag.EnvVars())
})
t.Run("Multiple", func(t *testing.T) {
testFlag := CliFlag{
Flag: &cli.StringFlag{
Name: "test",
Aliases: []string{"t"},
Usage: "`STRING`",
EnvVars: EnvVars("FOO_1", "ORIGINALS_PATH"),
},
Tags: []string{"foo", "bar"},
}
assert.Equal(t, "test", testFlag.Name())
assert.Equal(t, []string{"test", "t"}, testFlag.Names())
assert.Equal(t, "test, t", testFlag.String())
assert.Equal(t, "PHOTOPRISM_FOO_1, PHOTOPRISM_ORIGINALS_PATH", testFlag.EnvVar())
assert.Equal(t, []string{"PHOTOPRISM_FOO_1", "PHOTOPRISM_ORIGINALS_PATH"}, testFlag.EnvVars())
})
}
func TestCliFlag_Hidden(t *testing.T) {
hidden := CliFlag{
Flag: &cli.StringFlag{
Name: "is-hidden",
Usage: "`STRING`",
EnvVars: []string{"PHOTOPRISM_HIDDEN"},
Hidden: true,
},
Tags: []string{"foo", "bar"},
}
visible := CliFlag{
Flag: &cli.StringFlag{
Name: "is-visible",
Usage: "`STRING`",
EnvVars: []string{"PHOTOPRISM_VISIBLE"},
Hidden: false,
},
Tags: []string{},
}
t.Run("True", func(t *testing.T) {
assert.True(t, hidden.Hidden())
})
t.Run("False", func(t *testing.T) {
assert.False(t, visible.Hidden())
})
}
func TestCliFlag_Default(t *testing.T) {
hasdefault := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-with-default",
Usage: "`STRING`",
EnvVars: []string{"PHOTOPRISM_DEFAULT"},
},
DocDefault: "default-value",
Tags: []string{"foo", "bar"},
}
nodefault := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-without-default",
Usage: "`STRING`",
EnvVars: []string{"PHOTOPRISM_NODEFAULT"},
},
Tags: []string{},
}
assert.Equal(t, "default-value", hasdefault.Default())
assert.Equal(t, "", nodefault.Default())
}
func TestCliFlag_EnvVar(t *testing.T) {
hasDefault := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-with-default",
Usage: "`STRING`",
EnvVars: []string{"PHOTOPRISM_DEFAULT"},
},
DocDefault: "default-value",
Tags: []string{"foo", "bar"},
}
assert.Equal(t, "PHOTOPRISM_DEFAULT", hasDefault.EnvVar())
}
func TestCliFlag_CommandFlag(t *testing.T) {
hasdefault := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-with-default",
Usage: "`STRING`",
EnvVars: []string{"PHOTOPRISM_DEFAULT"},
},
DocDefault: "default-value",
Tags: []string{"foo", "bar"},
}
assert.Equal(t, "--flag-with-default", hasdefault.CommandFlag())
}
func TestCliFlag_Usage(t *testing.T) {
community := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-community",
Usage: "`STRING`",
},
DocDefault: "default-value",
Tags: []string{"foo", "bar"},
}
essentials := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-essentials",
Usage: "`STRING`",
},
Tags: []string{"essentials"},
}
plus := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-plus",
Usage: "`STRING`",
},
Tags: []string{"plus"},
}
pro := CliFlag{
Flag: &cli.StringFlag{
Name: "flag-pro",
Usage: "`STRING`",
},
Tags: []string{"pro"},
}
assert.Contains(t, community.Usage(), "STRING")
assert.Contains(t, essentials.Usage(), "*essentials*")
assert.Contains(t, plus.Usage(), "*plus*")
assert.Contains(t, pro.Usage(), "*pro*")
}