diff --git a/parser.go b/parser.go index 7eb381e2..49698a61 100644 --- a/parser.go +++ b/parser.go @@ -34,14 +34,12 @@ func buildURL(baseURL, stepURL string) string { func parseHeaders(rawHeaders map[string]string, variablesMapping map[string]interface{}) map[string]string { parsedHeaders := make(map[string]string) - for k, v := range rawHeaders { - parsedValue := parseString(v, variablesMapping) - if value, ok := parsedValue.(string); ok { + headers := parseData(rawHeaders, variablesMapping).(map[string]interface{}) + for k, v := range headers { + if value, ok := v.(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) + parsedHeaders[k] = fmt.Sprintf("%v", v) } } return parsedHeaders diff --git a/parser_test.go b/parser_test.go index b6e1110c..7f6618b0 100644 --- a/parser_test.go +++ b/parser_test.go @@ -143,9 +143,9 @@ 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"}}, - // parse map key + // parse map key, key is string {map[string]interface{}{"$var1": "$val1"}, map[string]interface{}{"foo1": 200}}, - // map key is int + // parse map key, key is int {map[string]interface{}{"$var2": "$val1"}, map[string]interface{}{"123": 200}}, } @@ -155,3 +155,32 @@ func TestParseDataMapWithVariables(t *testing.T) { } } } + +func TestParseHeaders(t *testing.T) { + variablesMapping := map[string]interface{}{ + "var1": "foo1", + "val1": 200, + "var2": 123, // key is int + "val2": nil, // value is nil + } + + testData := []struct { + rawHeaders map[string]string + expectHeaders map[string]string + }{ + {map[string]string{"key": "$var1"}, map[string]string{"key": "foo1"}}, + {map[string]string{"foo1": "$val1", "foo2": "bar2"}, map[string]string{"foo1": "200", "foo2": "bar2"}}, + // parse map key, key is string + {map[string]string{"$var1": "$val1"}, map[string]string{"foo1": "200"}}, + // parse map key, key is int + {map[string]string{"$var2": "$val1"}, map[string]string{"123": "200"}}, + // parse map key & value, key is int, value is nil + {map[string]string{"$var2": "$val2"}, map[string]string{"123": ""}}, + } + + for _, data := range testData { + if !assert.Equal(t, data.expectHeaders, parseHeaders(data.rawHeaders, variablesMapping)) { + t.Fail() + } + } +}