github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/config/list/list_test.go (about) 1 package list 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/ungtb10d/cli/v2/internal/config" 8 "github.com/ungtb10d/cli/v2/pkg/cmdutil" 9 "github.com/ungtb10d/cli/v2/pkg/iostreams" 10 "github.com/google/shlex" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestNewCmdConfigList(t *testing.T) { 15 tests := []struct { 16 name string 17 input string 18 output ListOptions 19 wantsErr bool 20 }{ 21 { 22 name: "no arguments", 23 input: "", 24 output: ListOptions{}, 25 wantsErr: false, 26 }, 27 { 28 name: "list with host", 29 input: "--host HOST.com", 30 output: ListOptions{Hostname: "HOST.com"}, 31 wantsErr: false, 32 }, 33 } 34 35 for _, tt := range tests { 36 t.Run(tt.name, func(t *testing.T) { 37 f := &cmdutil.Factory{ 38 Config: func() (config.Config, error) { 39 return config.NewBlankConfig(), nil 40 }, 41 } 42 43 argv, err := shlex.Split(tt.input) 44 assert.NoError(t, err) 45 46 var gotOpts *ListOptions 47 cmd := NewCmdConfigList(f, func(opts *ListOptions) error { 48 gotOpts = opts 49 return nil 50 }) 51 cmd.Flags().BoolP("help", "x", false, "") 52 53 cmd.SetArgs(argv) 54 cmd.SetIn(&bytes.Buffer{}) 55 cmd.SetOut(&bytes.Buffer{}) 56 cmd.SetErr(&bytes.Buffer{}) 57 58 _, err = cmd.ExecuteC() 59 if tt.wantsErr { 60 assert.Error(t, err) 61 return 62 } 63 64 assert.NoError(t, err) 65 assert.Equal(t, tt.output.Hostname, gotOpts.Hostname) 66 }) 67 } 68 } 69 70 func Test_listRun(t *testing.T) { 71 tests := []struct { 72 name string 73 input *ListOptions 74 config config.Config 75 stdout string 76 wantErr bool 77 }{ 78 { 79 name: "list", 80 config: func() config.Config { 81 cfg := config.NewBlankConfig() 82 cfg.Set("HOST", "git_protocol", "ssh") 83 cfg.Set("HOST", "editor", "/usr/bin/vim") 84 cfg.Set("HOST", "prompt", "disabled") 85 cfg.Set("HOST", "pager", "less") 86 cfg.Set("HOST", "http_unix_socket", "") 87 cfg.Set("HOST", "browser", "brave") 88 return cfg 89 }(), 90 input: &ListOptions{Hostname: "HOST"}, 91 stdout: `git_protocol=ssh 92 editor=/usr/bin/vim 93 prompt=disabled 94 pager=less 95 http_unix_socket= 96 browser=brave 97 `, 98 }, 99 } 100 101 for _, tt := range tests { 102 ios, _, stdout, _ := iostreams.Test() 103 tt.input.IO = ios 104 tt.input.Config = func() (config.Config, error) { 105 return tt.config, nil 106 } 107 108 t.Run(tt.name, func(t *testing.T) { 109 err := listRun(tt.input) 110 assert.NoError(t, err) 111 assert.Equal(t, tt.stdout, stdout.String()) 112 //assert.Equal(t, tt.stderr, stderr.String()) 113 }) 114 } 115 }