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 }