github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/release/values_test.go (about)

     1  package release_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/helmwave/helmwave/pkg/release"
     8  	"github.com/helmwave/helmwave/pkg/template"
     9  	"github.com/helmwave/helmwave/tests"
    10  	"github.com/stretchr/testify/suite"
    11  	"gopkg.in/yaml.v3"
    12  )
    13  
    14  type ValuesTestSuite struct {
    15  	suite.Suite
    16  
    17  	ctx context.Context
    18  }
    19  
    20  func TestValuesTestSuite(t *testing.T) {
    21  	t.Parallel()
    22  	suite.Run(t, new(ValuesTestSuite))
    23  }
    24  
    25  func (ts *ValuesTestSuite) SetupTest() {
    26  	ts.ctx = tests.GetContext(ts.T())
    27  }
    28  
    29  func (ts *ValuesTestSuite) TestProhibitDst() {
    30  	type config struct {
    31  		Values []release.ValuesReference
    32  	}
    33  
    34  	src := `
    35  values:
    36  - src: 1
    37    dst: a
    38  - src: 2
    39    dst: b
    40  `
    41  	c := &config{}
    42  
    43  	err := yaml.Unmarshal([]byte(src), c)
    44  	ts.Require().NoError(err)
    45  
    46  	err = release.ProhibitDst(c.Values)
    47  	ts.Require().Error(err)
    48  }
    49  
    50  func (ts *ValuesTestSuite) TestList() {
    51  	type config struct {
    52  		Values []release.ValuesReference
    53  	}
    54  
    55  	src := `
    56  values:
    57  - a
    58  - b
    59  `
    60  	c := &config{}
    61  
    62  	err := yaml.Unmarshal([]byte(src), c)
    63  	ts.Require().NoError(err)
    64  
    65  	ts.Require().Equal(&config{
    66  		Values: []release.ValuesReference{
    67  			{Src: "a"},
    68  			{Src: "b"},
    69  		},
    70  	}, c)
    71  }
    72  
    73  func (ts *ValuesTestSuite) TestMap() {
    74  	type config struct {
    75  		Values []release.ValuesReference
    76  	}
    77  
    78  	src := `
    79  values:
    80  - src: 1
    81    render: false
    82  - src: 2
    83    strict: true
    84  `
    85  	c := &config{}
    86  
    87  	err := yaml.Unmarshal([]byte(src), c)
    88  	ts.Require().NoError(err)
    89  
    90  	ts.Require().Equal(&config{
    91  		Values: []release.ValuesReference{
    92  			{Src: "1", Strict: false},
    93  			{Src: "2", Strict: true},
    94  		},
    95  	}, c)
    96  }
    97  
    98  func (ts *ValuesTestSuite) TestBuildNonExistingNonStrict() {
    99  	r := release.NewConfig()
   100  	r.ValuesF = []release.ValuesReference{
   101  		{
   102  			Src:    "nonexisting.values",
   103  			Strict: false,
   104  		},
   105  	}
   106  
   107  	err := r.BuildValues(ts.ctx, ".", template.TemplaterSprig)
   108  
   109  	ts.Require().NoError(err)
   110  	ts.Require().Empty(r.Values())
   111  }
   112  
   113  func (ts *ValuesTestSuite) TestBuildNonExistingStrict() {
   114  	r := release.NewConfig()
   115  	r.ValuesF = []release.ValuesReference{
   116  		{
   117  			Src:    "nonexisting.values",
   118  			Strict: true,
   119  		},
   120  	}
   121  
   122  	err := r.BuildValues(ts.ctx, ".", template.TemplaterSprig)
   123  
   124  	ts.Require().Error(err)
   125  }
   126  
   127  func (ts *ValuesTestSuite) TestJSONSchema() {
   128  	schema := (&release.ValuesReference{}).JSONSchema()
   129  
   130  	ts.Require().NotNil(schema)
   131  
   132  	ts.NotNil(schema.Properties.GetPair("src"))
   133  	ts.NotNil(schema.Properties.GetPair("dst"))
   134  	ts.NotNil(schema.Properties.GetPair("delimiter_left"))
   135  	ts.NotNil(schema.Properties.GetPair("delimiter_right"))
   136  	ts.NotNil(schema.Properties.GetPair("strict"))
   137  	ts.NotNil(schema.Properties.GetPair("renderer"))
   138  }