github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/gist/delete/delete_test.go (about) 1 package delete 2 3 import ( 4 "bytes" 5 "net/http" 6 "testing" 7 8 "github.com/ungtb10d/cli/v2/internal/config" 9 "github.com/ungtb10d/cli/v2/pkg/cmdutil" 10 "github.com/ungtb10d/cli/v2/pkg/httpmock" 11 "github.com/ungtb10d/cli/v2/pkg/iostreams" 12 "github.com/google/shlex" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestNewCmdDelete(t *testing.T) { 17 tests := []struct { 18 name string 19 cli string 20 wants DeleteOptions 21 }{ 22 { 23 name: "valid selector", 24 cli: "123", 25 wants: DeleteOptions{ 26 Selector: "123", 27 }, 28 }, 29 } 30 31 for _, tt := range tests { 32 t.Run(tt.name, func(t *testing.T) { 33 f := &cmdutil.Factory{} 34 35 argv, err := shlex.Split(tt.cli) 36 assert.NoError(t, err) 37 var gotOpts *DeleteOptions 38 cmd := NewCmdDelete(f, func(opts *DeleteOptions) error { 39 gotOpts = opts 40 return nil 41 }) 42 43 cmd.SetArgs(argv) 44 cmd.SetIn(&bytes.Buffer{}) 45 cmd.SetOut(&bytes.Buffer{}) 46 cmd.SetErr(&bytes.Buffer{}) 47 48 _, err = cmd.ExecuteC() 49 assert.NoError(t, err) 50 51 assert.Equal(t, tt.wants.Selector, gotOpts.Selector) 52 }) 53 } 54 } 55 56 func Test_deleteRun(t *testing.T) { 57 tests := []struct { 58 name string 59 opts DeleteOptions 60 httpStubs func(*httpmock.Registry) 61 wantErr bool 62 wantStdout string 63 wantStderr string 64 }{ 65 { 66 name: "successfully delete", 67 opts: DeleteOptions{ 68 Selector: "1234", 69 }, 70 httpStubs: func(reg *httpmock.Registry) { 71 reg.Register(httpmock.REST("DELETE", "gists/1234"), 72 httpmock.StatusStringResponse(200, "{}")) 73 }, 74 wantErr: false, 75 wantStdout: "", 76 wantStderr: "", 77 }, 78 { 79 name: "not found", 80 opts: DeleteOptions{ 81 Selector: "1234", 82 }, 83 httpStubs: func(reg *httpmock.Registry) { 84 reg.Register(httpmock.REST("DELETE", "gists/1234"), 85 httpmock.StatusStringResponse(404, "{}")) 86 }, 87 wantErr: true, 88 wantStdout: "", 89 wantStderr: "", 90 }, 91 } 92 93 for _, tt := range tests { 94 reg := &httpmock.Registry{} 95 if tt.httpStubs != nil { 96 tt.httpStubs(reg) 97 } 98 99 tt.opts.HttpClient = func() (*http.Client, error) { 100 return &http.Client{Transport: reg}, nil 101 } 102 tt.opts.Config = func() (config.Config, error) { 103 return config.NewBlankConfig(), nil 104 } 105 ios, _, _, _ := iostreams.Test() 106 ios.SetStdoutTTY(false) 107 ios.SetStdinTTY(false) 108 tt.opts.IO = ios 109 110 t.Run(tt.name, func(t *testing.T) { 111 err := deleteRun(&tt.opts) 112 reg.Verify(t) 113 if tt.wantErr { 114 assert.Error(t, err) 115 if tt.wantStderr != "" { 116 assert.EqualError(t, err, tt.wantStderr) 117 } 118 return 119 } 120 assert.NoError(t, err) 121 122 }) 123 } 124 }