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  }