Add unit test
Signed-off-by: Nemanja Zeljkovic <nocturo@gmail.com>
This commit is contained in:
parent
f2013a777c
commit
abc98d7deb
|
|
@ -4571,3 +4571,245 @@ func TestPrepareSyncReleases_ValueControlReleaseOverride(t *testing.T) {
|
||||||
require.Equal(t, tt.flags, r.flags, "Wrong value control flag for release %s", r.release.Name)
|
require.Equal(t, tt.flags, r.flags, "Wrong value control flag for release %s", r.release.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMergeAppendValues(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
existing any
|
||||||
|
incoming any
|
||||||
|
expected any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "nil existing returns incoming",
|
||||||
|
existing: nil,
|
||||||
|
incoming: "test-value",
|
||||||
|
expected: "test-value",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "nil existing with map incoming",
|
||||||
|
existing: nil,
|
||||||
|
incoming: map[string]any{"key": "value"},
|
||||||
|
expected: map[string]any{"key": "value"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "scalar existing with scalar incoming",
|
||||||
|
existing: "old-value",
|
||||||
|
incoming: "new-value",
|
||||||
|
expected: "new-value",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "scalar existing with map incoming",
|
||||||
|
existing: "old-value",
|
||||||
|
incoming: map[string]any{"key": "value"},
|
||||||
|
expected: map[string]any{"key": "value"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with scalar incoming",
|
||||||
|
existing: map[string]any{"key": "value"},
|
||||||
|
incoming: "new-value",
|
||||||
|
expected: "new-value",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - simple merge",
|
||||||
|
existing: map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2",
|
||||||
|
},
|
||||||
|
incoming: map[string]any{
|
||||||
|
"key2": "new-value2",
|
||||||
|
"key3": "value3",
|
||||||
|
},
|
||||||
|
expected: map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "new-value2",
|
||||||
|
"key3": "value3",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - nested merge",
|
||||||
|
existing: map[string]any{
|
||||||
|
"level1": map[string]any{
|
||||||
|
"level2": map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
incoming: map[string]any{
|
||||||
|
"level1": map[string]any{
|
||||||
|
"level2": map[string]any{
|
||||||
|
"key2": "new-value2",
|
||||||
|
"key3": "value3",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: map[string]any{
|
||||||
|
"level1": map[string]any{
|
||||||
|
"level2": map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "new-value2",
|
||||||
|
"key3": "value3",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - deep nested merge",
|
||||||
|
existing: map[string]any{
|
||||||
|
"a": map[string]any{
|
||||||
|
"b": map[string]any{
|
||||||
|
"c": map[string]any{
|
||||||
|
"d": "value-d",
|
||||||
|
"e": "value-e",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
incoming: map[string]any{
|
||||||
|
"a": map[string]any{
|
||||||
|
"b": map[string]any{
|
||||||
|
"c": map[string]any{
|
||||||
|
"e": "new-value-e",
|
||||||
|
"f": "value-f",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: map[string]any{
|
||||||
|
"a": map[string]any{
|
||||||
|
"b": map[string]any{
|
||||||
|
"c": map[string]any{
|
||||||
|
"d": "value-d",
|
||||||
|
"e": "new-value-e",
|
||||||
|
"f": "value-f",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - mixed types",
|
||||||
|
existing: map[string]any{
|
||||||
|
"string": "old-string",
|
||||||
|
"int": 42,
|
||||||
|
"bool": true,
|
||||||
|
"slice": []any{"item1", "item2"},
|
||||||
|
"nested": map[string]any{
|
||||||
|
"key": "nested-value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
incoming: map[string]any{
|
||||||
|
"string": "new-string",
|
||||||
|
"int": 100,
|
||||||
|
"bool": false,
|
||||||
|
"slice": []any{"item3", "item4"},
|
||||||
|
"nested": map[string]any{
|
||||||
|
"new-key": "new-nested-value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: map[string]any{
|
||||||
|
"string": "new-string",
|
||||||
|
"int": 100,
|
||||||
|
"bool": false,
|
||||||
|
"slice": []any{"item3", "item4"},
|
||||||
|
"nested": map[string]any{
|
||||||
|
"key": "nested-value",
|
||||||
|
"new-key": "new-nested-value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - empty maps",
|
||||||
|
existing: map[string]any{},
|
||||||
|
incoming: map[string]any{},
|
||||||
|
expected: map[string]any{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - empty existing",
|
||||||
|
existing: map[string]any{},
|
||||||
|
incoming: map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2",
|
||||||
|
},
|
||||||
|
expected: map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - empty incoming",
|
||||||
|
existing: map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2",
|
||||||
|
},
|
||||||
|
incoming: map[string]any{},
|
||||||
|
expected: map[string]any{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "map existing with map incoming - complex nested structure",
|
||||||
|
existing: map[string]any{
|
||||||
|
"config": map[string]any{
|
||||||
|
"database": map[string]any{
|
||||||
|
"host": "localhost",
|
||||||
|
"port": 5432,
|
||||||
|
"credentials": map[string]any{
|
||||||
|
"username": "admin",
|
||||||
|
"password": "secret",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"cache": map[string]any{
|
||||||
|
"enabled": true,
|
||||||
|
"ttl": 300,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
incoming: map[string]any{
|
||||||
|
"config": map[string]any{
|
||||||
|
"database": map[string]any{
|
||||||
|
"host": "production-db",
|
||||||
|
"credentials": map[string]any{
|
||||||
|
"password": "new-secret",
|
||||||
|
"ssl": true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"cache": map[string]any{
|
||||||
|
"ttl": 600,
|
||||||
|
},
|
||||||
|
"logging": map[string]any{
|
||||||
|
"level": "info",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: map[string]any{
|
||||||
|
"config": map[string]any{
|
||||||
|
"database": map[string]any{
|
||||||
|
"host": "production-db",
|
||||||
|
"port": 5432,
|
||||||
|
"credentials": map[string]any{
|
||||||
|
"username": "admin",
|
||||||
|
"password": "new-secret",
|
||||||
|
"ssl": true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"cache": map[string]any{
|
||||||
|
"enabled": true,
|
||||||
|
"ttl": 600,
|
||||||
|
},
|
||||||
|
"logging": map[string]any{
|
||||||
|
"level": "info",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
result := mergeAppendValues(tt.existing, tt.incoming)
|
||||||
|
assert.Equal(t, tt.expected, result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue