[#1703] updated json field string data normalizations and fixed the field vizualization in the Admin UI
This commit is contained in:
@@ -23,6 +23,7 @@ var requiredErr = validation.NewError("validation_required", "Missing required v
|
||||
// using the provided record constraints and schema.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// validator := NewRecordDataValidator(app.Dao(), record, nil)
|
||||
// err := validator.Validate(map[string]any{"test":123})
|
||||
func NewRecordDataValidator(
|
||||
@@ -294,16 +295,22 @@ func (validator *RecordDataValidator) checkSelectValue(field *schema.SchemaField
|
||||
return nil
|
||||
}
|
||||
|
||||
func (validator *RecordDataValidator) checkJsonValue(field *schema.SchemaField, value any) error {
|
||||
raw, _ := types.ParseJsonRaw(value)
|
||||
if len(raw) == 0 {
|
||||
return nil // nothing to check
|
||||
}
|
||||
var emptyJsonValues = []string{
|
||||
"null", `""`, "[]", "{}",
|
||||
}
|
||||
|
||||
func (validator *RecordDataValidator) checkJsonValue(field *schema.SchemaField, value any) error {
|
||||
if is.JSON.Validate(value) != nil {
|
||||
return validation.NewError("validation_invalid_json", "Must be a valid json value")
|
||||
}
|
||||
|
||||
raw, _ := types.ParseJsonRaw(value)
|
||||
rawStr := strings.TrimSpace(raw.String())
|
||||
|
||||
if field.Required && list.ExistInSlice(rawStr, emptyJsonValues) {
|
||||
return requiredErr
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -965,7 +965,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
|
||||
"field3": []string{},
|
||||
},
|
||||
nil,
|
||||
[]string{},
|
||||
[]string{"field2"},
|
||||
},
|
||||
{
|
||||
"(json) check required constraint - zero map",
|
||||
@@ -975,7 +975,7 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
|
||||
"field3": map[string]string{},
|
||||
},
|
||||
nil,
|
||||
[]string{},
|
||||
[]string{"field2"},
|
||||
},
|
||||
{
|
||||
"(json) check unique constraint",
|
||||
@@ -988,14 +988,24 @@ func TestRecordDataValidatorValidateJson(t *testing.T) {
|
||||
[]string{"field3"},
|
||||
},
|
||||
{
|
||||
"(json) check json text validator",
|
||||
"(json) check json text invalid obj, array and number normalizations",
|
||||
map[string]any{
|
||||
"field1": `[1, 2, 3`,
|
||||
"field2": `invalid`,
|
||||
"field3": `null`, // valid
|
||||
"field1": `[1 2 3]`,
|
||||
"field2": `{a: 123}`,
|
||||
"field3": `123.456 abc`,
|
||||
},
|
||||
nil,
|
||||
[]string{"field1", "field2"},
|
||||
[]string{},
|
||||
},
|
||||
{
|
||||
"(json) check json text reserved literals normalizations",
|
||||
map[string]any{
|
||||
"field1": `true`,
|
||||
"field2": `false`,
|
||||
"field3": `null`,
|
||||
},
|
||||
nil,
|
||||
[]string{},
|
||||
},
|
||||
{
|
||||
"(json) valid data - only required fields",
|
||||
|
||||
Reference in New Issue
Block a user