github.com/xeptore/docker-cli@v20.10.14+incompatible/cli/command/volume/list_test.go (about) 1 package volume 2 3 import ( 4 "io/ioutil" 5 "testing" 6 7 "github.com/docker/cli/cli/config/configfile" 8 "github.com/docker/cli/internal/test" 9 . "github.com/docker/cli/internal/test/builders" // Import builders to get the builder function as package function 10 "github.com/docker/docker/api/types" 11 "github.com/docker/docker/api/types/filters" 12 volumetypes "github.com/docker/docker/api/types/volume" 13 "github.com/pkg/errors" 14 "gotest.tools/v3/assert" 15 "gotest.tools/v3/golden" 16 ) 17 18 func TestVolumeListErrors(t *testing.T) { 19 testCases := []struct { 20 args []string 21 flags map[string]string 22 volumeListFunc func(filter filters.Args) (volumetypes.VolumeListOKBody, error) 23 expectedError string 24 }{ 25 { 26 args: []string{"foo"}, 27 expectedError: "accepts no argument", 28 }, 29 { 30 volumeListFunc: func(filter filters.Args) (volumetypes.VolumeListOKBody, error) { 31 return volumetypes.VolumeListOKBody{}, errors.Errorf("error listing volumes") 32 }, 33 expectedError: "error listing volumes", 34 }, 35 } 36 for _, tc := range testCases { 37 cmd := newListCommand( 38 test.NewFakeCli(&fakeClient{ 39 volumeListFunc: tc.volumeListFunc, 40 }), 41 ) 42 cmd.SetArgs(tc.args) 43 for key, value := range tc.flags { 44 cmd.Flags().Set(key, value) 45 } 46 cmd.SetOut(ioutil.Discard) 47 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 48 } 49 } 50 51 func TestVolumeListWithoutFormat(t *testing.T) { 52 cli := test.NewFakeCli(&fakeClient{ 53 volumeListFunc: func(filter filters.Args) (volumetypes.VolumeListOKBody, error) { 54 return volumetypes.VolumeListOKBody{ 55 Volumes: []*types.Volume{ 56 Volume(), 57 Volume(VolumeName("foo"), VolumeDriver("bar")), 58 Volume(VolumeName("baz"), VolumeLabels(map[string]string{ 59 "foo": "bar", 60 })), 61 }, 62 }, nil 63 }, 64 }) 65 cmd := newListCommand(cli) 66 assert.NilError(t, cmd.Execute()) 67 golden.Assert(t, cli.OutBuffer().String(), "volume-list-without-format.golden") 68 } 69 70 func TestVolumeListWithConfigFormat(t *testing.T) { 71 cli := test.NewFakeCli(&fakeClient{ 72 volumeListFunc: func(filter filters.Args) (volumetypes.VolumeListOKBody, error) { 73 return volumetypes.VolumeListOKBody{ 74 Volumes: []*types.Volume{ 75 Volume(), 76 Volume(VolumeName("foo"), VolumeDriver("bar")), 77 Volume(VolumeName("baz"), VolumeLabels(map[string]string{ 78 "foo": "bar", 79 })), 80 }, 81 }, nil 82 }, 83 }) 84 cli.SetConfigFile(&configfile.ConfigFile{ 85 VolumesFormat: "{{ .Name }} {{ .Driver }} {{ .Labels }}", 86 }) 87 cmd := newListCommand(cli) 88 assert.NilError(t, cmd.Execute()) 89 golden.Assert(t, cli.OutBuffer().String(), "volume-list-with-config-format.golden") 90 } 91 92 func TestVolumeListWithFormat(t *testing.T) { 93 cli := test.NewFakeCli(&fakeClient{ 94 volumeListFunc: func(filter filters.Args) (volumetypes.VolumeListOKBody, error) { 95 return volumetypes.VolumeListOKBody{ 96 Volumes: []*types.Volume{ 97 Volume(), 98 Volume(VolumeName("foo"), VolumeDriver("bar")), 99 Volume(VolumeName("baz"), VolumeLabels(map[string]string{ 100 "foo": "bar", 101 })), 102 }, 103 }, nil 104 }, 105 }) 106 cmd := newListCommand(cli) 107 cmd.Flags().Set("format", "{{ .Name }} {{ .Driver }} {{ .Labels }}") 108 assert.NilError(t, cmd.Execute()) 109 golden.Assert(t, cli.OutBuffer().String(), "volume-list-with-format.golden") 110 } 111 112 func TestVolumeListSortOrder(t *testing.T) { 113 cli := test.NewFakeCli(&fakeClient{ 114 volumeListFunc: func(filter filters.Args) (volumetypes.VolumeListOKBody, error) { 115 return volumetypes.VolumeListOKBody{ 116 Volumes: []*types.Volume{ 117 Volume(VolumeName("volume-2-foo")), 118 Volume(VolumeName("volume-10-foo")), 119 Volume(VolumeName("volume-1-foo")), 120 }, 121 }, nil 122 }, 123 }) 124 cmd := newListCommand(cli) 125 cmd.Flags().Set("format", "{{ .Name }}") 126 assert.NilError(t, cmd.Execute()) 127 golden.Assert(t, cli.OutBuffer().String(), "volume-list-sort.golden") 128 }