mirror of
https://github.com/adnanh/webhook.git
synced 2025-05-13 09:04:44 +00:00
Merge pull request #11 from moorereason/fix-extractparam
Fix ExtractParameter and add tests
This commit is contained in:
commit
d8a21582a3
2 changed files with 32 additions and 3 deletions
|
@ -45,8 +45,8 @@ func ExtractParameter(s string, params interface{}) (string, bool) {
|
|||
if paramsValue := reflect.ValueOf(params); paramsValue.Kind() == reflect.Slice {
|
||||
if paramsValueSliceLength := paramsValue.Len(); paramsValueSliceLength > 0 {
|
||||
|
||||
if p := strings.SplitN(s, ".", 3); len(p) > 3 {
|
||||
index, err := strconv.ParseInt(p[1], 10, 64)
|
||||
if p := strings.SplitN(s, ".", 2); len(p) > 1 {
|
||||
index, err := strconv.ParseInt(p[0], 10, 64)
|
||||
|
||||
if err != nil {
|
||||
return "", false
|
||||
|
@ -54,7 +54,7 @@ func ExtractParameter(s string, params interface{}) (string, bool) {
|
|||
return "", false
|
||||
}
|
||||
|
||||
return ExtractParameter(p[2], params.([]map[string]interface{})[index])
|
||||
return ExtractParameter(p[1], params.([]interface{})[index])
|
||||
}
|
||||
}
|
||||
|
||||
|
|
29
helpers/helpers_test.go
Normal file
29
helpers/helpers_test.go
Normal file
|
@ -0,0 +1,29 @@
|
|||
package helpers
|
||||
|
||||
import "testing"
|
||||
|
||||
var extractParameterTests = []struct {
|
||||
s string
|
||||
params map[string]interface{}
|
||||
value string
|
||||
ok bool
|
||||
}{
|
||||
{"a", map[string]interface{}{"a": "z"}, "z", true},
|
||||
{"a.b", map[string]interface{}{"a": map[string]interface{}{"b": "z"}}, "z", true},
|
||||
{"a.b.c", map[string]interface{}{"a": map[string]interface{}{"b": map[string]interface{}{"c": "z"}}}, "z", true},
|
||||
{"a.1.b", map[string]interface{}{"a": []interface{}{map[string]interface{}{"b": "y"}, map[string]interface{}{"b": "z"}}}, "z", true},
|
||||
{"a.1.b.c", map[string]interface{}{"a": []interface{}{map[string]interface{}{"b": map[string]interface{}{"c": "y"}}, map[string]interface{}{"b": map[string]interface{}{"c": "z"}}}}, "z", true},
|
||||
// failures
|
||||
{"a.X", map[string]interface{}{"a": map[string]interface{}{"b": "z"}}, "", false},
|
||||
{"a.500.b", map[string]interface{}{"a": map[string]interface{}{"b": "z"}}, "", false},
|
||||
{"a.501.b", map[string]interface{}{"a": []interface{}{map[string]interface{}{"b": "y"}, map[string]interface{}{"b": "z"}}}, "", false},
|
||||
}
|
||||
|
||||
func TestExtractParameter(t *testing.T) {
|
||||
for _, tt := range extractParameterTests {
|
||||
s, ok := ExtractParameter(tt.s, tt.params)
|
||||
if ok != tt.ok || s != tt.value {
|
||||
t.Errorf("failed to extract parameter %q:\nexpected {value:%#v, ok:%#v},\ngot {value:%#v, ok:%#v}", tt.s, tt.value, tt.ok, s, ok)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue