github.com/thajeztah/cli@v0.0.0-20240223162942-dc6bfac81a8b/cli/command/secret/remove_test.go (about)

     1  package secret
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/docker/cli/internal/test"
    10  	"github.com/pkg/errors"
    11  	"gotest.tools/v3/assert"
    12  	is "gotest.tools/v3/assert/cmp"
    13  )
    14  
    15  func TestSecretRemoveErrors(t *testing.T) {
    16  	testCases := []struct {
    17  		args             []string
    18  		secretRemoveFunc func(context.Context, string) error
    19  		expectedError    string
    20  	}{
    21  		{
    22  			args:          []string{},
    23  			expectedError: "requires at least 1 argument.",
    24  		},
    25  		{
    26  			args: []string{"foo"},
    27  			secretRemoveFunc: func(_ context.Context, name string) error {
    28  				return errors.Errorf("error removing secret")
    29  			},
    30  			expectedError: "error removing secret",
    31  		},
    32  	}
    33  	for _, tc := range testCases {
    34  		cmd := newSecretRemoveCommand(
    35  			test.NewFakeCli(&fakeClient{
    36  				secretRemoveFunc: tc.secretRemoveFunc,
    37  			}),
    38  		)
    39  		cmd.SetArgs(tc.args)
    40  		cmd.SetOut(io.Discard)
    41  		assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
    42  	}
    43  }
    44  
    45  func TestSecretRemoveWithName(t *testing.T) {
    46  	names := []string{"foo", "bar"}
    47  	var removedSecrets []string
    48  	cli := test.NewFakeCli(&fakeClient{
    49  		secretRemoveFunc: func(_ context.Context, name string) error {
    50  			removedSecrets = append(removedSecrets, name)
    51  			return nil
    52  		},
    53  	})
    54  	cmd := newSecretRemoveCommand(cli)
    55  	cmd.SetArgs(names)
    56  	assert.NilError(t, cmd.Execute())
    57  	assert.Check(t, is.DeepEqual(names, strings.Split(strings.TrimSpace(cli.OutBuffer().String()), "\n")))
    58  	assert.Check(t, is.DeepEqual(names, removedSecrets))
    59  }
    60  
    61  func TestSecretRemoveContinueAfterError(t *testing.T) {
    62  	names := []string{"foo", "bar"}
    63  	var removedSecrets []string
    64  
    65  	cli := test.NewFakeCli(&fakeClient{
    66  		secretRemoveFunc: func(_ context.Context, name string) error {
    67  			removedSecrets = append(removedSecrets, name)
    68  			if name == "foo" {
    69  				return errors.Errorf("error removing secret: %s", name)
    70  			}
    71  			return nil
    72  		},
    73  	})
    74  
    75  	cmd := newSecretRemoveCommand(cli)
    76  	cmd.SetOut(io.Discard)
    77  	cmd.SetArgs(names)
    78  	assert.Error(t, cmd.Execute(), "error removing secret: foo")
    79  	assert.Check(t, is.DeepEqual(names, removedSecrets))
    80  }