Skip to content
Snippets Groups Projects
Commit 134c038f authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Merge branch 'fix/PRXS-2770-ObjMergeNilMap' into 'master'

Исправлена ошибка "assignment to entry in nil map" если у объекта схемы отсутствовали поля

See merge request perxis/perxis-go!305
parents 012d4695 3c4b9559
No related branches found
No related tags found
No related merge requests found
......@@ -74,12 +74,18 @@ func (p *ObjectParameters) Merge(parameters Parameters) error {
if !ok {
return errors.New("invalid object parameters")
}
if op == nil {
return nil
}
for k, fld := range op.Fields {
if f, ok := p.Fields[k]; ok {
if err := f.Merge(fld); err != nil {
return err
}
} else {
if p.Fields == nil {
p.Fields = make(map[string]*Field)
}
p.Fields[k] = fld
}
}
......
......@@ -231,3 +231,59 @@ func TestFieldNameValidate(t *testing.T) {
})
}
}
func TestObjectParameters_Merge(t *testing.T) {
tests := []struct {
name string
l, r *ObjectParameters
wantErr assert.ErrorAssertionFunc
want *ObjectParameters
}{
{
name: "right is nil",
l: &ObjectParameters{},
r: nil,
wantErr: assert.NoError,
want: &ObjectParameters{},
},
{
name: "right has nil Fields map",
l: objectType.NewParameters().(*ObjectParameters),
r: &ObjectParameters{Fields: nil},
wantErr: assert.NoError,
want: &ObjectParameters{},
},
{
name: "left + right is empty object",
l: objectType.NewParameters().(*ObjectParameters),
r: objectType.NewParameters().(*ObjectParameters),
wantErr: assert.NoError,
want: &ObjectParameters{},
},
{
name: "left + right with data",
l: &ObjectParameters{Fields: map[string]*Field{"a": {Title: "Text1", Description: "test description"}}},
r: &ObjectParameters{Fields: map[string]*Field{"b": {Title: "Text2", Description: "test description"}}},
wantErr: assert.NoError,
want: &ObjectParameters{Fields: map[string]*Field{
"a": {Title: "Text1", Description: "test description"},
"b": {Title: "Text2", Description: "test description"},
}},
},
{
name: "left empty + right with data",
l: &ObjectParameters{},
r: &ObjectParameters{Fields: map[string]*Field{"b": {Title: "Text2", Description: "test description"}}},
wantErr: assert.NoError,
want: &ObjectParameters{Fields: map[string]*Field{
"b": {Title: "Text2", Description: "test description"},
}},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.wantErr(t, tt.l.Merge(tt.r), fmt.Sprintf("Merge(%v)", tt.l))
assert.Equal(t, tt.l, tt.want)
})
}
}
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