package state import ( "reflect" "testing" ) func TestReadFromYaml(t *testing.T) { yamlFile := "example/path/to/yaml/file" yamlContent := []byte(`releases: - name: myrelease namespace: mynamespace chart: mychart `) state, err := readFromYaml(yamlContent, yamlFile) if err != nil { t.Errorf("unxpected error: %v", err) } if state.Releases[0].Name != "myrelease" { t.Errorf("unexpected release name: expected=myrelease actual=%s", state.Releases[0].Name) } if state.Releases[0].Namespace != "mynamespace" { t.Errorf("unexpected chart namespace: expected=mynamespace actual=%s", state.Releases[0].Chart) } if state.Releases[0].Chart != "mychart" { t.Errorf("unexpected chart name: expected=mychart actual=%s", state.Releases[0].Chart) } } func TestReadFromYaml_DeprecatedReleaseReferences(t *testing.T) { yamlFile := "example/path/to/yaml/file" yamlContent := []byte(`charts: - name: myrelease chart: mychart `) state, err := readFromYaml(yamlContent, yamlFile) if err != nil { t.Errorf("unxpected error: %v", err) } if state.Releases[0].Name != "myrelease" { t.Errorf("unexpected release name: expected=myrelease actual=%s", state.Releases[0].Name) } if state.Releases[0].Chart != "mychart" { t.Errorf("unexpected chart name: expected=mychart actual=%s", state.Releases[0].Chart) } } func TestReadFromYaml_ConflictingReleasesConfig(t *testing.T) { yamlFile := "example/path/to/yaml/file" yamlContent := []byte(`charts: - name: myrelease1 chart: mychart1 releases: - name: myrelease2 chart: mychart2 `) _, err := readFromYaml(yamlContent, yamlFile) if err == nil { t.Error("expected error") } } func TestHelmState_applyDefaultsTo(t *testing.T) { type fields struct { BaseChartPath string Context string DeprecatedReleases []ReleaseSpec Namespace string Repositories []RepositorySpec Releases []ReleaseSpec } type args struct { spec ReleaseSpec } specWithNamespace := ReleaseSpec{ Chart: "test/chart", Version: "0.1", Verify: false, Name: "test-charts", Namespace: "test-namespace", Values: nil, SetValues: nil, EnvValues: nil, } specWithoutNamespace := specWithNamespace specWithoutNamespace.Namespace = "" specWithNamespaceFromFields := specWithNamespace specWithNamespaceFromFields.Namespace = "test-namespace-field" fieldsWithNamespace := fields{ BaseChartPath: ".", Context: "test_context", DeprecatedReleases: nil, Namespace: specWithNamespaceFromFields.Namespace, Repositories: nil, Releases: []ReleaseSpec{ specWithNamespace, }, } fieldsWithoutNamespace := fieldsWithNamespace fieldsWithoutNamespace.Namespace = "" tests := []struct { name string fields fields args args want ReleaseSpec }{ { name: "Has a namespace from spec", fields: fieldsWithoutNamespace, args: args{ spec: specWithNamespace, }, want: specWithNamespace, }, { name: "Has a namespace from flags", fields: fieldsWithoutNamespace, args: args{ spec: specWithNamespace, }, want: specWithNamespace, }, { name: "Has a namespace from flags and from spec", fields: fieldsWithNamespace, args: args{ spec: specWithNamespace, }, want: specWithNamespaceFromFields, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { state := &HelmState{ BaseChartPath: tt.fields.BaseChartPath, Context: tt.fields.Context, DeprecatedReleases: tt.fields.DeprecatedReleases, Namespace: tt.fields.Namespace, Repositories: tt.fields.Repositories, Releases: tt.fields.Releases, } if got := state.applyDefaultsTo(tt.args.spec); !reflect.DeepEqual(got, tt.want) { t.Errorf("HelmState.applyDefaultsTo() = %v, want %v", got, tt.want) } }) } }