Browse Source

fix: The validation of tag "options" is not working with int/uint type (#1969)

taobig 2 years ago
parent
commit
3fa8c5940d
2 changed files with 18 additions and 0 deletions
  1. 4 0
      core/mapping/unmarshaler.go
  2. 14 0
      core/mapping/unmarshaler_test.go

+ 4 - 0
core/mapping/unmarshaler.go

@@ -253,6 +253,10 @@ func (u *Unmarshaler) processFieldPrimitiveWithJSONNumber(field reflect.StructFi
 		return err
 		return err
 	}
 	}
 
 
+	if err := validateValueInOptions(opts.options(), v); err != nil {
+		return err
+	}
+
 	if fieldKind == reflect.Ptr {
 	if fieldKind == reflect.Ptr {
 		value = value.Elem()
 		value = value.Elem()
 	}
 	}

+ 14 - 0
core/mapping/unmarshaler_test.go

@@ -1170,6 +1170,20 @@ func TestUnmarshalWithIntOptionsIncorrect(t *testing.T) {
 	assert.NotNil(t, UnmarshalKey(m, &in))
 	assert.NotNil(t, UnmarshalKey(m, &in))
 }
 }
 
 
+func TestUnmarshalWithJsonNumberOptionsIncorrect(t *testing.T) {
+	type inner struct {
+		Value     string `key:"value,options=first|second"`
+		Incorrect int    `key:"incorrect,options=1|2"`
+	}
+	m := map[string]interface{}{
+		"value":     "first",
+		"incorrect": json.Number("3"),
+	}
+
+	var in inner
+	assert.NotNil(t, UnmarshalKey(m, &in))
+}
+
 func TestUnmarshalWithUintOptionsCorrect(t *testing.T) {
 func TestUnmarshalWithUintOptionsCorrect(t *testing.T) {
 	type inner struct {
 	type inner struct {
 		Value  string `key:"value,options=first|second"`
 		Value  string `key:"value,options=first|second"`