repo_description: Deploy Kubernetes Helm Charts
repo_topics: chart helm kubernetes
code: package environment
  
  import (
  	"github.com/google/go-cmp/cmp"
  	"testing"
  )
  
  // See https://github.com/roboll/helmfile/issues/1150
  func TestMerge_OverwriteNilValue_Issue1150(t *testing.T) {
  	dst := &Environment{
  		Name: "dst",
  		Values: map[string]interface{}{
  			"components": map[string]interface{}{
  				"etcd-operator": nil,
  			},
  		},
  		Defaults: nil,
  	}
  
  	src := &Environment{
  		Name: "src",
  		Values: map[string]interface{}{
  			"components": map[string]interface{}{
  				"etcd-operator": map[string]interface{}{
  					"version": "0.10.3",
  				},
  			},
  		},
  		Defaults: nil,
  	}
  
  	merged, err := dst.Merge(src)
  	if err != nil {
  		t.Fatal(err)
  	}
  
  	actual := merged.Values
  
  	expected := map[string]interface{}{
  		"components": map[string]interface{}{
  			"etcd-operator": map[string]interface{}{
  				"version": "0.10.3",
  			},
  		},
  	}
  
  	if diff := cmp.Diff(expected, actual); diff != "" {
  		t.Errorf(diff)
  	}
  }
  
  // See https://github.com/roboll/helmfile/issues/1154
  func TestMerge_OverwriteWithNilValue_Issue1154(t *testing.T) {
  	dst := &Environment{
  		Name: "dst",
  		Values: map[string]interface{}{
  			"components": map[string]interface{}{
  				"etcd-operator": map[string]interface{}{
  					"version": "0.10.0",
  				},
  			},
  		},
  		Defaults: nil,
  	}
  
  	src := &Environment{
  		Name: "src",
  		Values: map[string]interface{}{
  			"components": map[string]interface{}{
  				"etcd-operator": map[string]interface{}{
  					"version": "0.10.3",
  				},
  				"prometheus": nil,
  			},
  		},
  		Defaults: nil,
  	}
  
  	merged, err := dst.Merge(src)
  	if err != nil {
  		t.Fatal(err)
  	}
  
  	actual := merged.Values
  
  	expected := map[string]interface{}{
  		"components": map[string]interface{}{
  			"etcd-operator": map[string]interface{}{
  				"version": "0.10.3",
  			},
  			"prometheus": nil,
  		},
  	}
  
  	if diff := cmp.Diff(expected, actual); diff != "" {
  		t.Errorf(diff)
  	}
  }
  