github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/config/ls_test.go (about)

     1  package config
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/docker/cli/cli/config/configfile"
    10  	"github.com/docker/cli/internal/test"
    11  	"github.com/docker/cli/internal/test/builders"
    12  	"github.com/docker/docker/api/types"
    13  	"github.com/docker/docker/api/types/swarm"
    14  	"github.com/pkg/errors"
    15  	"gotest.tools/v3/assert"
    16  	is "gotest.tools/v3/assert/cmp"
    17  	"gotest.tools/v3/golden"
    18  )
    19  
    20  func TestConfigListErrors(t *testing.T) {
    21  	testCases := []struct {
    22  		args           []string
    23  		configListFunc func(context.Context, types.ConfigListOptions) ([]swarm.Config, error)
    24  		expectedError  string
    25  	}{
    26  		{
    27  			args:          []string{"foo"},
    28  			expectedError: "accepts no argument",
    29  		},
    30  		{
    31  			configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {
    32  				return []swarm.Config{}, errors.Errorf("error listing configs")
    33  			},
    34  			expectedError: "error listing configs",
    35  		},
    36  	}
    37  	for _, tc := range testCases {
    38  		cmd := newConfigListCommand(
    39  			test.NewFakeCli(&fakeClient{
    40  				configListFunc: tc.configListFunc,
    41  			}),
    42  		)
    43  		cmd.SetArgs(tc.args)
    44  		cmd.SetOut(io.Discard)
    45  		assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
    46  	}
    47  }
    48  
    49  func TestConfigList(t *testing.T) {
    50  	cli := test.NewFakeCli(&fakeClient{
    51  		configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {
    52  			return []swarm.Config{
    53  				*builders.Config(builders.ConfigID("ID-1-foo"),
    54  					builders.ConfigName("1-foo"),
    55  					builders.ConfigVersion(swarm.Version{Index: 10}),
    56  					builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
    57  					builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
    58  				),
    59  				*builders.Config(builders.ConfigID("ID-10-foo"),
    60  					builders.ConfigName("10-foo"),
    61  					builders.ConfigVersion(swarm.Version{Index: 11}),
    62  					builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
    63  					builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
    64  				),
    65  				*builders.Config(builders.ConfigID("ID-2-foo"),
    66  					builders.ConfigName("2-foo"),
    67  					builders.ConfigVersion(swarm.Version{Index: 11}),
    68  					builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
    69  					builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
    70  				),
    71  			}, nil
    72  		},
    73  	})
    74  	cmd := newConfigListCommand(cli)
    75  	assert.NilError(t, cmd.Execute())
    76  	golden.Assert(t, cli.OutBuffer().String(), "config-list-sort.golden")
    77  }
    78  
    79  func TestConfigListWithQuietOption(t *testing.T) {
    80  	cli := test.NewFakeCli(&fakeClient{
    81  		configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {
    82  			return []swarm.Config{
    83  				*builders.Config(builders.ConfigID("ID-foo"), builders.ConfigName("foo")),
    84  				*builders.Config(builders.ConfigID("ID-bar"), builders.ConfigName("bar"), builders.ConfigLabels(map[string]string{
    85  					"label": "label-bar",
    86  				})),
    87  			}, nil
    88  		},
    89  	})
    90  	cmd := newConfigListCommand(cli)
    91  	assert.Check(t, cmd.Flags().Set("quiet", "true"))
    92  	assert.NilError(t, cmd.Execute())
    93  	golden.Assert(t, cli.OutBuffer().String(), "config-list-with-quiet-option.golden")
    94  }
    95  
    96  func TestConfigListWithConfigFormat(t *testing.T) {
    97  	cli := test.NewFakeCli(&fakeClient{
    98  		configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {
    99  			return []swarm.Config{
   100  				*builders.Config(builders.ConfigID("ID-foo"), builders.ConfigName("foo")),
   101  				*builders.Config(builders.ConfigID("ID-bar"), builders.ConfigName("bar"), builders.ConfigLabels(map[string]string{
   102  					"label": "label-bar",
   103  				})),
   104  			}, nil
   105  		},
   106  	})
   107  	cli.SetConfigFile(&configfile.ConfigFile{
   108  		ConfigFormat: "{{ .Name }} {{ .Labels }}",
   109  	})
   110  	cmd := newConfigListCommand(cli)
   111  	assert.NilError(t, cmd.Execute())
   112  	golden.Assert(t, cli.OutBuffer().String(), "config-list-with-config-format.golden")
   113  }
   114  
   115  func TestConfigListWithFormat(t *testing.T) {
   116  	cli := test.NewFakeCli(&fakeClient{
   117  		configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {
   118  			return []swarm.Config{
   119  				*builders.Config(builders.ConfigID("ID-foo"), builders.ConfigName("foo")),
   120  				*builders.Config(builders.ConfigID("ID-bar"), builders.ConfigName("bar"), builders.ConfigLabels(map[string]string{
   121  					"label": "label-bar",
   122  				})),
   123  			}, nil
   124  		},
   125  	})
   126  	cmd := newConfigListCommand(cli)
   127  	assert.Check(t, cmd.Flags().Set("format", "{{ .Name }} {{ .Labels }}"))
   128  	assert.NilError(t, cmd.Execute())
   129  	golden.Assert(t, cli.OutBuffer().String(), "config-list-with-format.golden")
   130  }
   131  
   132  func TestConfigListWithFilter(t *testing.T) {
   133  	cli := test.NewFakeCli(&fakeClient{
   134  		configListFunc: func(_ context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {
   135  			assert.Check(t, is.Equal("foo", options.Filters.Get("name")[0]))
   136  			assert.Check(t, is.Equal("lbl1=Label-bar", options.Filters.Get("label")[0]))
   137  			return []swarm.Config{
   138  				*builders.Config(builders.ConfigID("ID-foo"),
   139  					builders.ConfigName("foo"),
   140  					builders.ConfigVersion(swarm.Version{Index: 10}),
   141  					builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
   142  					builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
   143  				),
   144  				*builders.Config(builders.ConfigID("ID-bar"),
   145  					builders.ConfigName("bar"),
   146  					builders.ConfigVersion(swarm.Version{Index: 11}),
   147  					builders.ConfigCreatedAt(time.Now().Add(-2*time.Hour)),
   148  					builders.ConfigUpdatedAt(time.Now().Add(-1*time.Hour)),
   149  				),
   150  			}, nil
   151  		},
   152  	})
   153  	cmd := newConfigListCommand(cli)
   154  	assert.Check(t, cmd.Flags().Set("filter", "name=foo"))
   155  	assert.Check(t, cmd.Flags().Set("filter", "label=lbl1=Label-bar"))
   156  	assert.NilError(t, cmd.Execute())
   157  	golden.Assert(t, cli.OutBuffer().String(), "config-list-with-filter.golden")
   158  }