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  }