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  }