github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/release/chart_test.go (about) 1 package release_test 2 3 import ( 4 "context" 5 "path/filepath" 6 "testing" 7 8 "github.com/helmwave/helmwave/pkg/plan" 9 "github.com/helmwave/helmwave/pkg/release" 10 "github.com/helmwave/helmwave/pkg/repo" 11 "github.com/helmwave/helmwave/tests" 12 "github.com/stretchr/testify/suite" 13 "gopkg.in/yaml.v3" 14 ) 15 16 type ChartTestSuite struct { 17 suite.Suite 18 19 ctx context.Context 20 } 21 22 func TestChartTestSuite(t *testing.T) { 23 suite.Run(t, new(ChartTestSuite)) 24 } 25 26 func (ts *ChartTestSuite) SetupSuite() { 27 ts.ctx = tests.GetContext(ts.T()) 28 29 var rs repo.Configs 30 str := ` 31 - name: bitnami 32 url: https://charts.bitnami.com/bitnami 33 ` 34 err := yaml.Unmarshal([]byte(str), &rs) 35 36 ts.Require().NoError(err) 37 ts.Require().Len(rs, 1) 38 39 ts.Require().NoError(plan.SyncRepositories(ts.ctx, rs)) 40 } 41 42 func (ts *ChartTestSuite) TestLocateChartLocal() { 43 tmpDir := ts.T().TempDir() 44 45 rel := release.NewConfig() 46 rel.ChartF.Name = filepath.Join(tmpDir, "blabla") 47 48 c, err := rel.GetChart() 49 ts.Require().Error(err) 50 ts.Require().Contains(err.Error(), "failed to locate chart") 51 ts.Require().Nil(c) 52 } 53 54 func (ts *ChartTestSuite) TestLoadChartLocal() { 55 tmpDir := ts.T().TempDir() 56 57 rel := release.NewConfig() 58 rel.ChartF.Name = tmpDir 59 60 c, err := rel.GetChart() 61 ts.Require().Error(err) 62 ts.Require().Contains(err.Error(), "failed to load chart") 63 ts.Require().Contains(err.Error(), "Chart.yaml file is missing") 64 ts.Require().Nil(c) 65 } 66 67 func (ts *ChartTestSuite) TestUnmarshalYAMLString() { 68 var rs release.Chart 69 str := "blabla" 70 err := yaml.Unmarshal([]byte(str), &rs) 71 72 ts.Require().NoError(err) 73 ts.Require().Equal(rs.Name, str) 74 } 75 76 func (ts *ChartTestSuite) TestUnmarshalYAMLMapping() { 77 var rs release.Chart 78 str := ` 79 name: blabla 80 version: 1.2.3 81 ` 82 err := yaml.Unmarshal([]byte(str), &rs) 83 84 ts.Require().NoError(err) 85 ts.Require().Equal("blabla", rs.Name) 86 ts.Require().Equal("1.2.3", rs.Version) 87 } 88 89 func (ts *ChartTestSuite) TestUnmarshalYAMLInvalid() { 90 var rs release.Chart 91 str := "[1, 2, 3]" 92 err := yaml.Unmarshal([]byte(str), &rs) 93 94 ts.Require().ErrorIs(err, release.ErrUnknownFormat) 95 } 96 97 func (ts *ChartTestSuite) TestIsRemote() { 98 c := &release.Chart{Name: "/nonexisting"} 99 100 ts.Require().True(c.IsRemote()) 101 102 c.Name = ts.T().TempDir() 103 104 ts.Require().False(c.IsRemote()) 105 } 106 107 func (ts *ChartTestSuite) TestChartDepsUpdRemote() { 108 rel := release.NewConfig() 109 rel.SetChartName("bitnami/redis") 110 111 err := rel.ChartDepsUpd() 112 113 ts.Require().NoError(err) 114 } 115 116 func (ts *ChartTestSuite) TestSkipChartDepsUpd() { 117 rel := release.NewConfig() 118 rel.ChartF.Name = ts.T().TempDir() 119 rel.ChartF.SkipDependencyUpdate = true 120 121 err := rel.ChartDepsUpd() 122 123 ts.Require().NoError(err) 124 } 125 126 func (ts *ChartTestSuite) TestChartDepsUpdInvalid() { 127 rel := release.NewConfig() 128 rel.ChartF.Name = ts.T().TempDir() 129 130 err := rel.ChartDepsUpd() 131 132 ts.Require().ErrorContains(err, "Chart.yaml file is missing") 133 } 134 135 func (ts *ChartTestSuite) TestDownloadChartRemote() { 136 rel := release.NewConfig() 137 rel.SetChartName("bitnami/redis") 138 139 err := rel.DownloadChart(ts.T().TempDir()) 140 141 ts.Require().NoError(err) 142 } 143 144 func (ts *ChartTestSuite) TestDownloadChartLocal() { 145 rel := release.NewConfig() 146 147 err := rel.DownloadChart(ts.T().TempDir()) 148 149 ts.Require().NoError(err) 150 }