fix: add more tests (#2473)

* chore: add string to map in httpx parse method

* feat: add httpx parse stringToMap method test

* fix: add more test
master
Halo 2 years ago committed by GitHub
parent ada2941e87
commit aa2be0163a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,6 +2,7 @@ package mapping
import ( import (
"encoding/json" "encoding/json"
"fmt"
"strconv" "strconv"
"strings" "strings"
"testing" "testing"
@ -467,6 +468,85 @@ func TestUnmarshalIntSliceFromString(t *testing.T) {
ast.Equal(2, v.Values[1]) ast.Equal(2, v.Values[1])
} }
func TestUnmarshalIntMapFromString(t *testing.T) {
var v struct {
Sort map[string]int `key:"sort"`
}
m := map[string]interface{}{
"sort": `{"value":12345,"zeroVal":0,"nullVal":null}`,
}
ast := assert.New(t)
ast.Nil(UnmarshalKey(m, &v))
ast.Equal(3, len(v.Sort))
ast.Equal(12345, v.Sort["value"])
ast.Equal(0, v.Sort["zeroVal"])
ast.Equal(0, v.Sort["nullVal"])
}
func TestUnmarshalBoolMapFromString(t *testing.T) {
var v struct {
Sort map[string]bool `key:"sort"`
}
m := map[string]interface{}{
"sort": `{"value":true,"zeroVal":false,"nullVal":null}`,
}
ast := assert.New(t)
ast.Nil(UnmarshalKey(m, &v))
ast.Equal(3, len(v.Sort))
ast.Equal(true, v.Sort["value"])
ast.Equal(false, v.Sort["zeroVal"])
ast.Equal(false, v.Sort["nullVal"])
}
type CustomStringer string
type UnsupportedStringer string
func (c CustomStringer) String() string {
return fmt.Sprintf("{%s}", string(c))
}
func TestUnmarshalStringMapFromStringer(t *testing.T) {
var v struct {
Sort map[string]string `key:"sort"`
}
m := map[string]interface{}{
"sort": CustomStringer(`"value":"ascend","emptyStr":""`),
}
ast := assert.New(t)
ast.Nil(UnmarshalKey(m, &v))
ast.Equal(2, len(v.Sort))
ast.Equal("ascend", v.Sort["value"])
ast.Equal("", v.Sort["emptyStr"])
}
func TestUnmarshalStringMapFromUnsupportedType(t *testing.T) {
var v struct {
Sort map[string]string `key:"sort"`
}
m := map[string]interface{}{
"sort": UnsupportedStringer(`{"value":"ascend","emptyStr":""}`),
}
ast := assert.New(t)
ast.NotNil(UnmarshalKey(m, &v))
}
func TestUnmarshalStringMapFromNotSettableValue(t *testing.T) {
var v struct {
sort map[string]string `key:"sort"`
}
m := map[string]interface{}{
"sort": `{"value":"ascend","emptyStr":""}`,
}
ast := assert.New(t)
ast.NotNil(UnmarshalKey(m, &v))
}
func TestUnmarshalStringMapFromString(t *testing.T) { func TestUnmarshalStringMapFromString(t *testing.T) {
var v struct { var v struct {
Sort map[string]string `key:"sort"` Sort map[string]string `key:"sort"`
@ -482,6 +562,32 @@ func TestUnmarshalStringMapFromString(t *testing.T) {
ast.Equal("", v.Sort["emptyStr"]) ast.Equal("", v.Sort["emptyStr"])
} }
func TestUnmarshalStructMapFromString(t *testing.T) {
var v struct {
Filter map[string]struct {
Field1 bool `json:"field1"`
Field2 int64 `json:"field2,string"`
Field3 string `json:"field3"`
Field4 *string `json:"field4"`
Field5 []string `json:"field5"`
} `key:"filter"`
}
m := map[string]interface{}{
"filter": `{"obj":{"field1":true,"field2":"1573570455447539712","field3":"this is a string",
"field4":"this is a string pointer","field5":["str1","str2"]}}`,
}
ast := assert.New(t)
ast.Nil(UnmarshalKey(m, &v))
ast.Equal(1, len(v.Filter))
ast.NotNil(v.Filter["obj"])
ast.Equal(true, v.Filter["obj"].Field1)
ast.Equal(int64(1573570455447539712), v.Filter["obj"].Field2)
ast.Equal("this is a string", v.Filter["obj"].Field3)
ast.Equal("this is a string pointer", *v.Filter["obj"].Field4)
ast.ElementsMatch([]string{"str1", "str2"}, v.Filter["obj"].Field5)
}
func TestUnmarshalStringSliceMapFromString(t *testing.T) { func TestUnmarshalStringSliceMapFromString(t *testing.T) {
var v struct { var v struct {
Filter map[string][]string `key:"filter"` Filter map[string][]string `key:"filter"`

Loading…
Cancel
Save