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  }