From 3c4b955915e26b063aceac7169d6b0f82b7c96bf Mon Sep 17 00:00:00 2001 From: Alex Petraky <petraky@perx.ru> Date: Wed, 7 Aug 2024 14:04:16 +0000 Subject: [PATCH] =?UTF-8?q?fix(core):=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B0=20"assignment=20to=20entry=20in=20nil=20map"=20=D0=B5?= =?UTF-8?q?=D1=81=D0=BB=D0=B8=20=D1=83=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B0=20=D1=81=D1=85=D0=B5=D0=BC=D1=8B=20=D0=BE=D1=82?= =?UTF-8?q?=D1=81=D1=83=D1=82=D1=81=D1=82=D0=B2=D0=BE=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close #PRXS-2770 --- pkg/schema/field/object.go | 6 ++++ pkg/schema/field/object_test.go | 56 +++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/pkg/schema/field/object.go b/pkg/schema/field/object.go index d86aa235..1f995cce 100644 --- a/pkg/schema/field/object.go +++ b/pkg/schema/field/object.go @@ -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 } } diff --git a/pkg/schema/field/object_test.go b/pkg/schema/field/object_test.go index a85d4488..cf4d773b 100644 --- a/pkg/schema/field/object_test.go +++ b/pkg/schema/field/object_test.go @@ -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) + }) + } +} -- GitLab