github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/release/delete-asset/delete_asset_test.go (about) 1 package deleteasset 2 3 import ( 4 "bytes" 5 "io" 6 "net/http" 7 "testing" 8 9 "github.com/ungtb10d/cli/v2/internal/ghrepo" 10 "github.com/ungtb10d/cli/v2/pkg/cmdutil" 11 "github.com/ungtb10d/cli/v2/pkg/httpmock" 12 "github.com/ungtb10d/cli/v2/pkg/iostreams" 13 "github.com/google/shlex" 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func Test_NewCmdDeleteAsset(t *testing.T) { 19 tests := []struct { 20 name string 21 args string 22 isTTY bool 23 want DeleteAssetOptions 24 wantErr string 25 }{ 26 { 27 name: "tag and asset arguments", 28 args: "v1.2.3 test-asset", 29 isTTY: true, 30 want: DeleteAssetOptions{ 31 TagName: "v1.2.3", 32 SkipConfirm: false, 33 AssetName: "test-asset", 34 }, 35 }, 36 { 37 name: "skip confirm", 38 args: "v1.2.3 test-asset -y", 39 isTTY: true, 40 want: DeleteAssetOptions{ 41 TagName: "v1.2.3", 42 SkipConfirm: true, 43 AssetName: "test-asset", 44 }, 45 }, 46 { 47 name: "no arguments", 48 args: "", 49 isTTY: true, 50 wantErr: "accepts 2 arg(s), received 0", 51 }, 52 { 53 name: "one arguments", 54 args: "v1.2.3", 55 isTTY: true, 56 wantErr: "accepts 2 arg(s), received 1", 57 }, 58 } 59 for _, tt := range tests { 60 t.Run(tt.name, func(t *testing.T) { 61 ios, _, _, _ := iostreams.Test() 62 ios.SetStdoutTTY(tt.isTTY) 63 ios.SetStdinTTY(tt.isTTY) 64 ios.SetStderrTTY(tt.isTTY) 65 66 f := &cmdutil.Factory{ 67 IOStreams: ios, 68 } 69 70 var opts *DeleteAssetOptions 71 cmd := NewCmdDeleteAsset(f, func(o *DeleteAssetOptions) error { 72 opts = o 73 return nil 74 }) 75 76 argv, err := shlex.Split(tt.args) 77 require.NoError(t, err) 78 cmd.SetArgs(argv) 79 80 cmd.SetIn(&bytes.Buffer{}) 81 cmd.SetOut(io.Discard) 82 cmd.SetErr(io.Discard) 83 84 _, err = cmd.ExecuteC() 85 if tt.wantErr != "" { 86 require.EqualError(t, err, tt.wantErr) 87 return 88 } else { 89 require.NoError(t, err) 90 } 91 92 assert.Equal(t, tt.want.TagName, opts.TagName) 93 assert.Equal(t, tt.want.SkipConfirm, opts.SkipConfirm) 94 assert.Equal(t, tt.want.AssetName, opts.AssetName) 95 }) 96 } 97 } 98 99 func Test_deleteAssetRun(t *testing.T) { 100 tests := []struct { 101 name string 102 isTTY bool 103 opts DeleteAssetOptions 104 wantErr string 105 wantStdout string 106 wantStderr string 107 }{ 108 { 109 name: "skipping confirmation", 110 isTTY: true, 111 opts: DeleteAssetOptions{ 112 TagName: "v1.2.3", 113 SkipConfirm: true, 114 AssetName: "test-asset", 115 }, 116 wantStdout: ``, 117 wantStderr: "✓ Deleted asset test-asset from release v1.2.3\n", 118 }, 119 { 120 name: "non-interactive", 121 isTTY: false, 122 opts: DeleteAssetOptions{ 123 TagName: "v1.2.3", 124 SkipConfirm: false, 125 AssetName: "test-asset", 126 }, 127 wantStdout: ``, 128 wantStderr: ``, 129 }, 130 } 131 for _, tt := range tests { 132 t.Run(tt.name, func(t *testing.T) { 133 ios, _, stdout, stderr := iostreams.Test() 134 ios.SetStdoutTTY(tt.isTTY) 135 ios.SetStdinTTY(tt.isTTY) 136 ios.SetStderrTTY(tt.isTTY) 137 138 fakeHTTP := &httpmock.Registry{} 139 fakeHTTP.Register(httpmock.REST("GET", "repos/OWNER/REPO/releases/tags/v1.2.3"), httpmock.StringResponse(`{ 140 "tag_name": "v1.2.3", 141 "draft": false, 142 "url": "https://api.github.com/repos/OWNER/REPO/releases/23456", 143 "assets": [ 144 { 145 "url": "https://api.github.com/repos/OWNER/REPO/releases/assets/1", 146 "id": 1, 147 "name": "test-asset" 148 } 149 ] 150 }`)) 151 fakeHTTP.Register(httpmock.REST("DELETE", "repos/OWNER/REPO/releases/assets/1"), httpmock.StatusStringResponse(204, "")) 152 153 tt.opts.IO = ios 154 tt.opts.HttpClient = func() (*http.Client, error) { 155 return &http.Client{Transport: fakeHTTP}, nil 156 } 157 tt.opts.BaseRepo = func() (ghrepo.Interface, error) { 158 return ghrepo.FromFullName("OWNER/REPO") 159 } 160 161 err := deleteAssetRun(&tt.opts) 162 if tt.wantErr != "" { 163 require.EqualError(t, err, tt.wantErr) 164 return 165 } else { 166 require.NoError(t, err) 167 } 168 169 assert.Equal(t, tt.wantStdout, stdout.String()) 170 assert.Equal(t, tt.wantStderr, stderr.String()) 171 }) 172 } 173 }