github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/build_values_internal_test.go (about) 1 package plan 2 3 import ( 4 "context" 5 "errors" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/helmwave/helmwave/pkg/release" 11 "github.com/helmwave/helmwave/pkg/template" 12 "github.com/helmwave/helmwave/tests" 13 "github.com/stretchr/testify/suite" 14 ) 15 16 type BuildValuesTestSuite struct { 17 suite.Suite 18 19 ctx context.Context 20 } 21 22 func TestBuildValuesTestSuite(t *testing.T) { 23 t.Parallel() 24 suite.Run(t, new(BuildValuesTestSuite)) 25 } 26 27 func (ts *BuildValuesTestSuite) SetupTest() { 28 ts.ctx = tests.GetContext(ts.T()) 29 } 30 31 func (ts *BuildValuesTestSuite) createPlan(tmpDir string) *Plan { 32 ts.T().Helper() 33 34 p := New(filepath.Join(tmpDir, Dir)) 35 p.templater = template.TemplaterSprig 36 37 return p 38 } 39 40 func (ts *BuildValuesTestSuite) TestValuesEmpty() { 41 tmpDir := ts.T().TempDir() 42 p := ts.createPlan(tmpDir) 43 44 p.body = &planBody{} 45 46 ts.Require().NoError(p.buildValues(ts.ctx)) 47 } 48 49 func (ts *BuildValuesTestSuite) TestValuesBuildError() { 50 tmpDir := ts.T().TempDir() 51 p := ts.createPlan(tmpDir) 52 53 tmpValues := filepath.Join(tmpDir, "blablavalues.yaml") 54 ts.Require().NoError(os.WriteFile(tmpValues, []byte("a: b"), 0o600)) 55 56 mockedRelease := &MockReleaseConfig{} 57 mockedRelease.On("Name").Return("redis") 58 mockedRelease.On("Namespace").Return("defaultblabla") 59 mockedRelease.On("Uniq").Return() 60 mockedRelease.On("Values").Return([]release.ValuesReference{ 61 {Src: tmpValues}, 62 }) 63 64 errBuildValues := errors.New("values build error") 65 mockedRelease.On("BuildValues").Return(errBuildValues) 66 67 p.body = &planBody{ 68 Releases: release.Configs{mockedRelease}, 69 } 70 71 ts.Require().ErrorIs(p.buildValues(ts.ctx), errBuildValues) 72 mockedRelease.AssertExpectations(ts.T()) 73 } 74 75 func (ts *BuildValuesTestSuite) TestSuccess() { 76 tmpDir := ts.T().TempDir() 77 p := ts.createPlan(tmpDir) 78 79 valuesName := "blablavalues.yaml" 80 valuesContents := []byte("a: b") 81 tmpValues := filepath.Join(tmpDir, valuesName) 82 ts.Require().NoError(os.WriteFile(tmpValues, valuesContents, 0o600)) 83 84 mockedRelease := &MockReleaseConfig{} 85 mockedRelease.On("Name").Return("redis") 86 mockedRelease.On("Values").Return([]release.ValuesReference{ 87 {Src: tmpValues}, 88 }) 89 mockedRelease.On("Namespace").Return("defaultblabla") 90 mockedRelease.On("BuildValues").Return(nil) 91 mockedRelease.On("Uniq").Return() 92 93 p.body = &planBody{ 94 Releases: release.Configs{mockedRelease}, 95 } 96 97 ts.Require().NoError(p.buildValues(ts.ctx)) 98 mockedRelease.AssertExpectations(ts.T()) 99 }