...
1 package cmdopts
2
3 import (
4 "os"
5 "testing"
6
7 "github.com/cybertec-postgresql/pgwatch/v3/internal/log"
8 flags "github.com/jessevdk/go-flags"
9 "github.com/stretchr/testify/assert"
10 )
11
12
13 func NewCmdOptions(args ...string) *Options {
14 cmdOpts := new(Options)
15 _, _ = flags.NewParser(cmdOpts, flags.PrintErrors).ParseArgs(args)
16 return cmdOpts
17 }
18
19 func TestParseFail(t *testing.T) {
20 tests := [][]string{
21 {0: "go-test", "--unknown-option"},
22 {0: "go-test", "-c", "client01", "-f", "foo"},
23 }
24 for _, d := range tests {
25 os.Args = d
26 _, err := New(nil)
27 assert.Error(t, err)
28 }
29 }
30
31 func TestParseSuccess(t *testing.T) {
32 tests := [][]string{
33 {0: "go-test", "--help"},
34 }
35 for _, d := range tests {
36 os.Args = d
37 c, err := New(nil)
38 assert.True(t, c.Help)
39 assert.Error(t, err)
40 }
41 }
42
43 func TestLogLevel(t *testing.T) {
44 c := &Options{Logging: log.CmdOpts{LogLevel: "debug"}}
45 assert.True(t, c.Verbose())
46 c = &Options{Logging: log.CmdOpts{LogLevel: "info"}}
47 assert.False(t, c.Verbose())
48 }
49
50 func TestNewCmdOptions(t *testing.T) {
51 c := NewCmdOptions("-c", "config_unit_test", "--password=somestrong")
52 assert.NotNil(t, c)
53 }
54
55 func TestConfig(t *testing.T) {
56 os.Args = []string{0: "config_test", "--sources=sample.config.yaml"}
57 _, err := New(nil)
58 assert.NoError(t, err)
59
60 os.Args = []string{0: "config_test", "--unknown"}
61 _, err = New(nil)
62 assert.Error(t, err)
63
64 os.Args = []string{0: "config_test"}
65 t.Setenv("PW_SOURCES", "postgresql://foo:baz@bar/test")
66 _, err = New(nil)
67 assert.NoError(t, err)
68 }
69