github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/plan/validate_test.go (about) 1 package plan_test 2 3 import ( 4 "context" 5 "errors" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/helmwave/helmwave/pkg/repo" 11 "github.com/helmwave/helmwave/tests" 12 13 "github.com/helmwave/helmwave/pkg/plan" 14 "github.com/helmwave/helmwave/pkg/release" 15 "github.com/helmwave/helmwave/pkg/template" 16 log "github.com/sirupsen/logrus" 17 "github.com/stretchr/testify/suite" 18 ) 19 20 type ValidateTestSuite struct { 21 suite.Suite 22 23 ctx context.Context 24 } 25 26 func TestValidateTestSuite(t *testing.T) { 27 t.Parallel() 28 suite.Run(t, new(ValidateTestSuite)) 29 } 30 31 func (ts *ValidateTestSuite) SetupTest() { 32 ts.ctx = tests.GetContext(ts.T()) 33 } 34 35 func (ts *ValidateTestSuite) TestInvalidRelease() { 36 tmpDir := ts.T().TempDir() 37 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 38 body := p.NewBody() 39 40 err := errors.New("test error") 41 42 mockedRelease := &plan.MockReleaseConfig{} 43 mockedRelease.On("Validate").Return(err) 44 45 p.SetReleases(mockedRelease) 46 47 ts.Require().ErrorIs(err, body.ValidateReleases()) 48 ts.Require().ErrorIs(err, body.Validate()) 49 50 mockedRelease.AssertExpectations(ts.T()) 51 } 52 53 func (ts *ValidateTestSuite) TestInvalidRepository() { 54 tmpDir := ts.T().TempDir() 55 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 56 body := p.NewBody() 57 58 err := errors.New("test error") 59 60 mockedRepo := &plan.MockRepositoryConfig{} 61 mockedRepo.On("Validate").Return(err) 62 63 p.SetRepositories(mockedRepo) 64 65 ts.Require().ErrorIs(err, body.ValidateRepositories()) 66 ts.Require().ErrorIs(err, body.Validate()) 67 68 mockedRepo.AssertExpectations(ts.T()) 69 } 70 71 func (ts *ValidateTestSuite) TestValidateValues() { 72 tmpDir := ts.T().TempDir() 73 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 74 75 valuesContents := []byte("a: b") 76 tmpValues := filepath.Join(tmpDir, "valuesName") 77 ts.Require().NoError(os.WriteFile(tmpValues, valuesContents, 0o600)) 78 79 mockedRelease := &plan.MockReleaseConfig{} 80 mockedRelease.On("Name").Return(ts.T().Name()) 81 mockedRelease.On("Namespace").Return(ts.T().Name()) 82 mockedRelease.On("Uniq").Return() 83 mockedRelease.On("Logger").Return(log.WithField("test", ts.T().Name())) 84 v := release.ValuesReference{Src: tmpValues} 85 ts.Require().NoError(v.SetViaRelease(ts.ctx, mockedRelease, tmpDir, template.TemplaterSprig, nil)) 86 mockedRelease.On("Values").Return([]release.ValuesReference{v}) 87 88 p.SetReleases(mockedRelease) 89 90 ts.Require().NoError(p.ValidateValuesImport()) 91 92 mockedRelease.AssertExpectations(ts.T()) 93 } 94 95 func (ts *ValidateTestSuite) TestValidateValuesNotFound() { 96 tmpDir := ts.T().TempDir() 97 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 98 99 valuesContents := []byte("a: b") 100 tmpValues := filepath.Join(tmpDir, "valuesName") 101 ts.Require().NoError(os.WriteFile(tmpValues, valuesContents, 0o600)) 102 103 mockedRelease := &plan.MockReleaseConfig{} 104 mockedRelease.On("Logger").Return(log.WithField("test", ts.T().Name())) 105 v := release.ValuesReference{Src: tmpValues} 106 mockedRelease.On("Values").Return([]release.ValuesReference{v}) 107 108 p.SetReleases(mockedRelease) 109 110 ts.Require().Error(p.ValidateValuesImport()) 111 112 mockedRelease.AssertExpectations(ts.T()) 113 } 114 115 func (ts *ValidateTestSuite) TestValidateValuesNoReleases() { 116 tmpDir := ts.T().TempDir() 117 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 118 119 p.NewBody() 120 121 ts.Require().NoError(p.ValidateValuesImport()) 122 } 123 124 func (ts *ValidateTestSuite) TestValidateRepositoryDuplicate() { 125 tmpDir := ts.T().TempDir() 126 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 127 body := p.NewBody() 128 129 mockedRepo := &plan.MockRepositoryConfig{} 130 mockedRepo.On("Name").Return("blabla") 131 mockedRepo.On("Validate").Return(nil) 132 133 p.SetRepositories(mockedRepo, mockedRepo) 134 135 var e *repo.DuplicateError 136 137 ts.Require().ErrorAs(body.ValidateRepositories(), &e) 138 ts.Equal("blabla", e.Name) 139 140 ts.Require().ErrorAs(body.Validate(), &e) 141 ts.Equal("blabla", e.Name) 142 143 mockedRepo.AssertExpectations(ts.T()) 144 } 145 146 func (ts *ValidateTestSuite) TestValidateReleaseDuplicate() { 147 tmpDir := ts.T().TempDir() 148 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 149 body := p.NewBody() 150 151 mockedRelease := &plan.MockReleaseConfig{} 152 mockedRelease.On("Name").Return("blabla") 153 mockedRelease.On("Namespace").Return("defaultblabla") 154 mockedRelease.On("Uniq").Return() 155 mockedRelease.On("Validate").Return(nil) 156 157 p.SetReleases(mockedRelease, mockedRelease) 158 159 var e *release.DuplicateError 160 161 ts.Require().ErrorAs(body.ValidateReleases(), &e) 162 ts.Equal(mockedRelease.Uniq(), e.Uniq) 163 164 ts.Require().ErrorAs(body.Validate(), &e) 165 ts.Equal(mockedRelease.Uniq(), e.Uniq) 166 167 mockedRelease.AssertExpectations(ts.T()) 168 } 169 170 func (ts *ValidateTestSuite) TestValidateEmpty() { 171 tmpDir := ts.T().TempDir() 172 p := plan.New(filepath.Join(tmpDir, plan.Dir)) 173 body := p.NewBody() 174 175 ts.Require().NoError(body.Validate()) 176 }