github.com/thajeztah/cli@v0.0.0-20240223162942-dc6bfac81a8b/cli/command/image/prune_test.go (about) 1 package image 2 3 import ( 4 "fmt" 5 "io" 6 "testing" 7 8 "github.com/docker/cli/internal/test" 9 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/filters" 11 "github.com/docker/docker/api/types/image" 12 "github.com/pkg/errors" 13 "gotest.tools/v3/assert" 14 is "gotest.tools/v3/assert/cmp" 15 "gotest.tools/v3/golden" 16 ) 17 18 func TestNewPruneCommandErrors(t *testing.T) { 19 testCases := []struct { 20 name string 21 args []string 22 expectedError string 23 imagesPruneFunc func(pruneFilter filters.Args) (types.ImagesPruneReport, error) 24 }{ 25 { 26 name: "wrong-args", 27 args: []string{"something"}, 28 expectedError: "accepts no arguments.", 29 }, 30 { 31 name: "prune-error", 32 args: []string{"--force"}, 33 expectedError: "something went wrong", 34 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 35 return types.ImagesPruneReport{}, errors.Errorf("something went wrong") 36 }, 37 }, 38 } 39 for _, tc := range testCases { 40 cmd := NewPruneCommand(test.NewFakeCli(&fakeClient{ 41 imagesPruneFunc: tc.imagesPruneFunc, 42 })) 43 cmd.SetOut(io.Discard) 44 cmd.SetArgs(tc.args) 45 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 46 } 47 } 48 49 func TestNewPruneCommandSuccess(t *testing.T) { 50 testCases := []struct { 51 name string 52 args []string 53 imagesPruneFunc func(pruneFilter filters.Args) (types.ImagesPruneReport, error) 54 }{ 55 { 56 name: "all", 57 args: []string{"--all"}, 58 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 59 assert.Check(t, is.Equal("false", pruneFilter.Get("dangling")[0])) 60 return types.ImagesPruneReport{}, nil 61 }, 62 }, 63 { 64 name: "force-deleted", 65 args: []string{"--force"}, 66 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 67 assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0])) 68 return types.ImagesPruneReport{ 69 ImagesDeleted: []image.DeleteResponse{{Deleted: "image1"}}, 70 SpaceReclaimed: 1, 71 }, nil 72 }, 73 }, 74 { 75 name: "label-filter", 76 args: []string{"--force", "--filter", "label=foobar"}, 77 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 78 assert.Check(t, is.Equal("foobar", pruneFilter.Get("label")[0])) 79 return types.ImagesPruneReport{}, nil 80 }, 81 }, 82 { 83 name: "force-untagged", 84 args: []string{"--force"}, 85 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 86 assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0])) 87 return types.ImagesPruneReport{ 88 ImagesDeleted: []image.DeleteResponse{{Untagged: "image1"}}, 89 SpaceReclaimed: 2, 90 }, nil 91 }, 92 }, 93 } 94 for _, tc := range testCases { 95 cli := test.NewFakeCli(&fakeClient{imagesPruneFunc: tc.imagesPruneFunc}) 96 cmd := NewPruneCommand(cli) 97 cmd.SetOut(io.Discard) 98 cmd.SetArgs(tc.args) 99 err := cmd.Execute() 100 assert.NilError(t, err) 101 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("prune-command-success.%s.golden", tc.name)) 102 } 103 }