github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/render/planner/execute_test.go (about) 1 package planner 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/go-kit/kit/log" 8 "github.com/mitchellh/cli" 9 "github.com/spf13/afero" 10 "github.com/stretchr/testify/require" 11 ) 12 13 type testcase struct { 14 Name string 15 Plan func(p *CLIPlanner) Plan 16 Expect map[string]string 17 } 18 19 func TestExecute(t *testing.T) { 20 21 cases := []testcase{ 22 { 23 Name: "one step, one file", 24 Plan: func(p *CLIPlanner) Plan { 25 return Plan{ 26 { 27 Description: "lol", 28 Dest: "./install.sh", 29 Execute: func(ctx context.Context) error { 30 return p.Fs.WriteFile("install.sh", []byte("fake"), 0755) 31 }, 32 }, 33 } 34 }, 35 Expect: map[string]string{ 36 "install.sh": "fake", 37 }, 38 }, 39 } 40 41 for _, test := range cases { 42 t.Run(test.Name, func(t *testing.T) { 43 req := require.New(t) 44 mockFS := afero.Afero{Fs: afero.NewMemMapFs()} 45 planner := &CLIPlanner{ 46 Logger: log.NewNopLogger(), 47 UI: cli.NewMockUi(), 48 Fs: mockFS, 49 } 50 51 plan := test.Plan(planner) 52 err := planner.Execute(context.Background(), plan) 53 req.NoError(err) 54 55 for file, expected := range test.Expect { 56 actual, err := mockFS.ReadFile(file) 57 req.NoError(err) 58 req.Equal(expected, string(actual)) 59 } 60 }) 61 } 62 }