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  }