Skip to content
Snippets Groups Projects
Commit 36e8b6a9 authored by Alex Petraky's avatar Alex Petraky :basketball_player_tone1: Committed by Pavel Antonov
Browse files

fix(core): Исправлена ошибка "panic: runtime error: invalid memory address or...

fix(core): Исправлена ошибка "panic: runtime error: invalid memory address or nil pointer dereference" при вызове UnmarshalJSON при передаче "null"

Close #PRXS-2770
parent 134c038f
No related branches found
No related tags found
No related merge requests found
......@@ -29,6 +29,11 @@ func (s *Schema) UnmarshalJSON(b []byte) error {
if err := jsoniter.Unmarshal(b, &j); err != nil {
return errors.Wrapf(err, "error unmarshal json into field")
}
if j == nil {
return nil
}
s.Loaded = j.Loaded
s.Metadata = j.Metadata
......
package schema
import (
"testing"
"git.perx.ru/perxis/perxis-go/pkg/schema/field"
"github.com/stretchr/testify/assert"
)
func TestSchema_UnmarshalJSON(t *testing.T) {
s := `{
"ui": {
"options": {
"fields": [
"text"
]
}
},
"type": "object",
"params": {
"inline": false,
"fields": {
"text": {
"title": "text",
"ui": {
"widget": "StringInput"
},
"type": "string",
"params": {}
}
}
},
"loaded": false,
"metadata": null
}`
tests := []struct {
name string
b []byte
want *Schema
wantErr bool
}{
{
name: "No panic with 'null' value in b",
b: []byte("null"),
want: New(),
wantErr: false,
},
{
name: "UnmarshalJSON error #1",
b: []byte(""),
want: New(),
wantErr: true,
},
{
name: "UnmarshalJSON error #2",
b: []byte("abc"),
want: New(),
wantErr: true,
},
{
name: "OK",
b: []byte(s),
want: New("text", field.String().SetTitle("text").WithUI(&field.UI{Widget: "StringInput"})),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
schema := New()
if err := schema.UnmarshalJSON(tt.b); (err != nil) != tt.wantErr {
t.Errorf("UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr)
}
assert.Equal(t, tt.want, schema)
})
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment