fix: parse map key

This commit is contained in:
debugtalk
2021-09-30 10:48:27 +08:00
parent 41c8aca424
commit 9ef0885cca
2 changed files with 17 additions and 4 deletions

View File

@@ -39,6 +39,8 @@ func parseHeaders(rawHeaders map[string]string, variablesMapping map[string]inte
if value, ok := parsedValue.(string); ok {
parsedHeaders[k] = value
} else {
// parsed value is not string, e.g. int, float, etc.
// convert to string
parsedHeaders[k] = fmt.Sprintf("%v", parsedValue)
}
}
@@ -55,8 +57,17 @@ func parseData(raw interface{}, variablesMapping map[string]interface{}) interfa
case reflect.Map: // convert any map to map[string]interface{}
parsedMap := make(map[string]interface{})
for _, k := range rawValue.MapKeys() {
parsedKey := parseString(k.String(), variablesMapping)
v := rawValue.MapIndex(k)
parsedMap[k.String()] = parseData(v.Interface(), variablesMapping)
parsedValue := parseData(v.Interface(), variablesMapping)
if key, ok := parsedKey.(string); ok {
parsedMap[key] = parsedValue
} else {
// parsed key is not string, e.g. int, float, etc.
// convert to string
parsedMap[fmt.Sprintf("%v", parsedKey)] = parsedValue
}
}
return parsedMap
default:

View File

@@ -134,7 +134,7 @@ func TestParseDataMapWithVariables(t *testing.T) {
variablesMapping := map[string]interface{}{
"var1": "foo1",
"val1": 200,
"var2": 123,
"var2": 123, // key is int
}
testData := []struct {
@@ -143,8 +143,10 @@ func TestParseDataMapWithVariables(t *testing.T) {
}{
{map[string]interface{}{"key": "$var1"}, map[string]interface{}{"key": "foo1"}},
{map[string]interface{}{"foo1": "$val1", "foo2": "bar2"}, map[string]interface{}{"foo1": 200, "foo2": "bar2"}},
// {map[string]interface{}{"$var1": "$val1"}, map[string]interface{}{"foo1": 200}},
// {map[string]interface{}{"$var2": "$val1"}, map[string]interface{}{123: 200}},
// parse map key
{map[string]interface{}{"$var1": "$val1"}, map[string]interface{}{"foo1": 200}},
// map key is int
{map[string]interface{}{"$var2": "$val1"}, map[string]interface{}{"123": 200}},
}
for _, data := range testData {