From 79bc018fa3ed74a18628b473e510fb03a2d31d9a Mon Sep 17 00:00:00 2001 From: Josh Date: Wed, 22 May 2024 11:08:26 +0100 Subject: [PATCH] :bug: Make sure that paginators are aliased to `pagination.IStaticPage` etc. as the mappers were not enough (#43) ### Description Make sure that paginators are aliased to `pagination.IStaticPage` etc. as the mappers were not enough. It was impossible to cast between the mapped struct and the various structs we want to map between due to type mismatches between `client.IStaticPage` and `pagination.IStaticPage`. This is the simplest solution. ### Test Coverage - [x] This change is covered by existing or additional automated tests. - [ ] Manual testing has been performed (and evidence provided) as automated testing was not feasible. - [ ] Additional tests are not required for this change (e.g. documentation update). --------- Co-authored-by: joshjennings98 Co-authored-by: Adrien CABARBAYE --- changes/20240508103622.bugfix | 1 + changes/20240516125141.feature | 1 + changes/20240516125941.feature | 1 + changes/20240516135153.feature | 1 + client/extension_entities.gen.go | 124 ++++++++++++++++++ client/extension_model_interface.go | 19 +-- client/extension_model_interface_mappers.go | 60 --------- .../extension_model_interface_mappers_test.go | 102 -------------- client/go.mod | 2 - client/go.sum | 4 - extensions/extension_entities.gen.go | 124 ++++++++++++++++++ extensions/extension_model_interface.go | 19 +-- .../extension_model_interface_mappers.go | 60 --------- .../extension_model_interface_mappers_test.go | 102 -------------- generator/codegen/collection_extensions.go | 14 +- generator/codegen/templates/entities.go.tmpl | 2 +- generator/codegen/types.go | 3 +- 17 files changed, 275 insertions(+), 364 deletions(-) create mode 100644 changes/20240508103622.bugfix create mode 100644 changes/20240516125141.feature create mode 100644 changes/20240516125941.feature create mode 100644 changes/20240516135153.feature delete mode 100644 client/extension_model_interface_mappers.go delete mode 100644 client/extension_model_interface_mappers_test.go delete mode 100644 extensions/extension_model_interface_mappers.go delete mode 100644 extensions/extension_model_interface_mappers_test.go diff --git a/changes/20240508103622.bugfix b/changes/20240508103622.bugfix new file mode 100644 index 0000000..926419d --- /dev/null +++ b/changes/20240508103622.bugfix @@ -0,0 +1 @@ +:bug: Make sure that paginators are aliased to pagination.IStaticPage etc. as the mappers were not enough diff --git a/changes/20240516125141.feature b/changes/20240516125141.feature new file mode 100644 index 0000000..db13c23 --- /dev/null +++ b/changes/20240516125141.feature @@ -0,0 +1 @@ +Updated client due to schema changes diff --git a/changes/20240516125941.feature b/changes/20240516125941.feature new file mode 100644 index 0000000..db13c23 --- /dev/null +++ b/changes/20240516125941.feature @@ -0,0 +1 @@ +Updated client due to schema changes diff --git a/changes/20240516135153.feature b/changes/20240516135153.feature new file mode 100644 index 0000000..db13c23 --- /dev/null +++ b/changes/20240516135153.feature @@ -0,0 +1 @@ +Updated client due to schema changes diff --git a/client/extension_entities.gen.go b/client/extension_entities.gen.go index 5e03e5d..07f972a 100644 --- a/client/extension_entities.gen.go +++ b/client/extension_entities.gen.go @@ -1640,6 +1640,130 @@ func NewNotificationMessageIterator(elements []NotificationMessageObject) (IIter }, nil } +// ============================================================================================ +// This extends BuildMessageItem definitions +// ============================================================================================ + +// FetchType returns the resource type +func (o *BuildMessageItem) FetchType() string { + return "Notification messages" +} + +// FetchLinks returns the resource links if present +func (o *BuildMessageItem) FetchLinks() (links any, err error) { + if !o.Links.IsSet() { + err = errors.New("missing links") + return + } + links = o.GetLinks() + return +} + +// FetchName returns the resource name if present, or else an error +func (o *BuildMessageItem) FetchName() (string, error) { + return o.GetName(), nil +} + +// FetchTitle returns the resource title if present, or else an error +func (o *BuildMessageItem) FetchTitle() (string, error) { + return o.GetTitle(), nil +} + +func (o *BuildMessageItem) HasNext() bool { + if links, has := o.GetLinksOk(); has { + return links.HasNext() + } + return false +} + +func (o *BuildMessageItem) HasFuture() bool { + if links, has := o.GetLinksOk(); has { + return links.HasFuture() + } + return false +} + +func (o *BuildMessageItem) GetItemIterator() (IIterator, error) { + return NewMessageIterator(o.GetMessages()) +} + +func (o *BuildMessageItem) GetItemCount() (count int64, err error) { + m, ok := o.GetMetadataOk() + if !ok { + err = fmt.Errorf("missing metadata: %v", o) + return + } + count = int64(m.GetCount()) + return +} + +// NewBuildMessageItemMessageStream returns a message stream. +func NewBuildMessageItemMessageStream() IMessageStream { + return NewBuildMessageItemWithDefaults() +} + +// ============================================================================================ +// This extends IntellisenseMessageItem definitions +// ============================================================================================ + +// FetchType returns the resource type +func (o *IntellisenseMessageItem) FetchType() string { + return "Notification messages" +} + +// FetchLinks returns the resource links if present +func (o *IntellisenseMessageItem) FetchLinks() (links any, err error) { + if !o.Links.IsSet() { + err = errors.New("missing links") + return + } + links = o.GetLinks() + return +} + +// FetchName returns the resource name if present, or else an error +func (o *IntellisenseMessageItem) FetchName() (string, error) { + return o.GetName(), nil +} + +// FetchTitle returns the resource title if present, or else an error +func (o *IntellisenseMessageItem) FetchTitle() (string, error) { + return o.GetTitle(), nil +} + +func (o *IntellisenseMessageItem) HasNext() bool { + if links, has := o.GetLinksOk(); has { + return links.HasNext() + } + return false +} + +func (o *IntellisenseMessageItem) HasFuture() bool { + if links, has := o.GetLinksOk(); has { + return links.HasFuture() + } + return false +} + +func (o *IntellisenseMessageItem) GetItemIterator() (IIterator, error) { + return NewMessageIterator(o.GetMessages()) +} + +func (o *IntellisenseMessageItem) GetItemCount() (count int64, err error) { + m, ok := o.GetMetadataOk() + if !ok { + err = fmt.Errorf("missing metadata: %v", o) + return + } + count = int64(m.GetCount()) + return +} + +// NewIntellisenseMessageItemMessageStream returns a message stream. +func NewIntellisenseMessageItemMessageStream() IMessageStream { + return NewIntellisenseMessageItemWithDefaults() +} + // ============================================================================================ // This extends NotificationFeed definitions // ============================================================================================ diff --git a/client/extension_model_interface.go b/client/extension_model_interface.go index 9630fca..c87fed4 100644 --- a/client/extension_model_interface.go +++ b/client/extension_model_interface.go @@ -7,6 +7,8 @@ // It includes the definition of request/response types as well as provides helpers for calling specific helpers. package client +import "github.com/ARM-software/golang-utils/utils/collection/pagination" + // ************************************************************************************* // NOTE: this file is not generated. // It defines generic models. @@ -25,22 +27,9 @@ type IModel interface { // The following definitions match what is in golang-utils for [pagination](https://github.com/ARM-software/golang-utils/blob/master/utils/collection/pagination/interfaces.go) -type IIterator interface { - // HasNext returns whether there are more items available or not. - HasNext() bool - // GetNext returns the next item. - GetNext() (interface{}, error) -} +type IIterator = pagination.IIterator -// IStaticPage defines a generic page for a collection. -type IStaticPage interface { - // HasNext states whether more pages are accessible. - HasNext() bool - // GetItemIterator returns a new iterator over the page's items. - GetItemIterator() (IIterator, error) - // GetItemCount returns the number of items in this page - GetItemCount() (int64, error) -} +type IStaticPage = pagination.IStaticPage // IMessageStream defines a page for a collection which does not have any known ending. type IMessageStream interface { diff --git a/client/extension_model_interface_mappers.go b/client/extension_model_interface_mappers.go deleted file mode 100644 index 1e7c8af..0000000 --- a/client/extension_model_interface_mappers.go +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2020-2024 Arm Limited or its affiliates and Contributors. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package client - -import ( - "fmt" - - "github.com/ARM-software/golang-utils/utils/collection/pagination" - "github.com/ARM-software/golang-utils/utils/commonerrors" -) - -type staticPageWrapper struct { - page IStaticPage -} - -func (s *staticPageWrapper) HasNext() bool { - return s.page.HasNext() -} - -func (s *staticPageWrapper) GetItemCount() (int64, error) { - return s.page.GetItemCount() -} - -func (s *staticPageWrapper) GetItemIterator() (pagination.IIterator, error) { - i, err := s.page.GetItemIterator() - if err != nil { - return nil, err - } - i2, ok := i.(pagination.IIterator) - if !ok { - return nil, fmt.Errorf("%w: could not convert client.IIterator to pagination.IIterator", commonerrors.ErrMarshalling) - } - return i2, nil -} - -func MapIStaticPage(staticPage IStaticPage) pagination.IStaticPage { - if staticPage == nil { - return nil - } - return &staticPageWrapper{staticPage} -} - -type staticPageStreamWrapper struct { - pagination.IStaticPage - stream IMessageStream -} - -func (s *staticPageStreamWrapper) HasFuture() bool { - return s.stream.HasFuture() -} - -func MapIMessageStream(messageStream IMessageStream) pagination.IStaticPageStream { - if messageStream == nil { - return nil - } - return &staticPageStreamWrapper{IStaticPage: MapIStaticPage(messageStream), stream: messageStream} -} diff --git a/client/extension_model_interface_mappers_test.go b/client/extension_model_interface_mappers_test.go deleted file mode 100644 index bba8f92..0000000 --- a/client/extension_model_interface_mappers_test.go +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2020-2024 Arm Limited or its affiliates and Contributors. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package client - -import ( - "testing" - - "github.com/go-faker/faker/v4" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -type testIterator struct { - next any - itemCount int64 -} - -type testMessageStream struct { - i testIterator - hasFuture bool -} - -func (t *testIterator) HasNext() bool { - return t.next != nil -} - -func (t *testIterator) GetNext() (any, error) { - return t.next, nil -} - -func (t *testIterator) GetItemCount() (int64, error) { - return t.itemCount, nil -} - -func (t *testMessageStream) HasNext() bool { - return t.i.HasNext() -} - -func (t *testMessageStream) GetNext() (any, error) { - return t.i.GetNext() -} - -func (t *testMessageStream) GetItemCount() (int64, error) { - return t.i.GetItemCount() -} - -func (t *testMessageStream) GetItemIterator() (IIterator, error) { - return &t.i, nil -} - -func (t *testMessageStream) HasFuture() bool { - return t.hasFuture -} - -func TestExtensionModelInterfaceMappers(t *testing.T) { - t.Run("Normal case", func(t *testing.T) { - var x testMessageStream - - err := faker.FakeData(&x) - require.NoError(t, err) - - y := MapIMessageStream(&x) - - x1, err := x.GetItemCount() - assert.NoError(t, err) - y1, err := y.GetItemCount() - assert.NoError(t, err) - assert.EqualValues(t, x1, y1) - - x2 := x.HasNext() - y2 := y.HasNext() - assert.EqualValues(t, x2, y2) - - x3 := x.HasFuture() - y3 := y.HasFuture() - assert.EqualValues(t, x3, y3) - - x4, err := x.GetItemIterator() - assert.NoError(t, err) - y4, err := y.GetItemIterator() - assert.NoError(t, err) - assert.EqualValues(t, x4, y4) - }) - - t.Run("Nil case", func(t *testing.T) { - t.Run("IStaticPage", func(t *testing.T) { - var x IStaticPage - y := MapIStaticPage(x) - assert.Nil(t, y) - assert.Equal(t, x, y) - }) - t.Run("IMessageStream", func(t *testing.T) { - var x IMessageStream - y := MapIMessageStream(x) - assert.Nil(t, y) - assert.Equal(t, x, y) - }) - }) -} diff --git a/client/go.mod b/client/go.mod index 801ddd7..1380248 100644 --- a/client/go.mod +++ b/client/go.mod @@ -4,7 +4,6 @@ go 1.21 require ( github.com/ARM-software/golang-utils/utils v1.63.0 - github.com/go-faker/faker/v4 v4.4.1 github.com/stretchr/testify v1.9.0 ) @@ -15,6 +14,5 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/text v0.15.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/client/go.sum b/client/go.sum index d95c409..7652934 100644 --- a/client/go.sum +++ b/client/go.sum @@ -4,8 +4,6 @@ github.com/bxcodec/faker/v3 v3.8.1 h1:qO/Xq19V6uHt2xujwpaetgKhraGCapqY2CRWGD/Sqc github.com/bxcodec/faker/v3 v3.8.1/go.mod h1:DdSDccxF5msjFo5aO4vrobRQ8nIApg8kq3QWPEQD6+o= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-faker/faker/v4 v4.4.1 h1:LY1jDgjVkBZWIhATCt+gkl0x9i/7wC61gZx73GTFb+Q= -github.com/go-faker/faker/v4 v4.4.1/go.mod h1:HRLrjis+tYsbFtIHufEPTAIzcZiRu0rS9EYl2Ccwme4= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= @@ -18,8 +16,6 @@ go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/extensions/extension_entities.gen.go b/extensions/extension_entities.gen.go index 5e03e5d..07f972a 100644 --- a/extensions/extension_entities.gen.go +++ b/extensions/extension_entities.gen.go @@ -1640,6 +1640,130 @@ func NewNotificationMessageIterator(elements []NotificationMessageObject) (IIter }, nil } +// ============================================================================================ +// This extends BuildMessageItem definitions +// ============================================================================================ + +// FetchType returns the resource type +func (o *BuildMessageItem) FetchType() string { + return "Notification messages" +} + +// FetchLinks returns the resource links if present +func (o *BuildMessageItem) FetchLinks() (links any, err error) { + if !o.Links.IsSet() { + err = errors.New("missing links") + return + } + links = o.GetLinks() + return +} + +// FetchName returns the resource name if present, or else an error +func (o *BuildMessageItem) FetchName() (string, error) { + return o.GetName(), nil +} + +// FetchTitle returns the resource title if present, or else an error +func (o *BuildMessageItem) FetchTitle() (string, error) { + return o.GetTitle(), nil +} + +func (o *BuildMessageItem) HasNext() bool { + if links, has := o.GetLinksOk(); has { + return links.HasNext() + } + return false +} + +func (o *BuildMessageItem) HasFuture() bool { + if links, has := o.GetLinksOk(); has { + return links.HasFuture() + } + return false +} + +func (o *BuildMessageItem) GetItemIterator() (IIterator, error) { + return NewMessageIterator(o.GetMessages()) +} + +func (o *BuildMessageItem) GetItemCount() (count int64, err error) { + m, ok := o.GetMetadataOk() + if !ok { + err = fmt.Errorf("missing metadata: %v", o) + return + } + count = int64(m.GetCount()) + return +} + +// NewBuildMessageItemMessageStream returns a message stream. +func NewBuildMessageItemMessageStream() IMessageStream { + return NewBuildMessageItemWithDefaults() +} + +// ============================================================================================ +// This extends IntellisenseMessageItem definitions +// ============================================================================================ + +// FetchType returns the resource type +func (o *IntellisenseMessageItem) FetchType() string { + return "Notification messages" +} + +// FetchLinks returns the resource links if present +func (o *IntellisenseMessageItem) FetchLinks() (links any, err error) { + if !o.Links.IsSet() { + err = errors.New("missing links") + return + } + links = o.GetLinks() + return +} + +// FetchName returns the resource name if present, or else an error +func (o *IntellisenseMessageItem) FetchName() (string, error) { + return o.GetName(), nil +} + +// FetchTitle returns the resource title if present, or else an error +func (o *IntellisenseMessageItem) FetchTitle() (string, error) { + return o.GetTitle(), nil +} + +func (o *IntellisenseMessageItem) HasNext() bool { + if links, has := o.GetLinksOk(); has { + return links.HasNext() + } + return false +} + +func (o *IntellisenseMessageItem) HasFuture() bool { + if links, has := o.GetLinksOk(); has { + return links.HasFuture() + } + return false +} + +func (o *IntellisenseMessageItem) GetItemIterator() (IIterator, error) { + return NewMessageIterator(o.GetMessages()) +} + +func (o *IntellisenseMessageItem) GetItemCount() (count int64, err error) { + m, ok := o.GetMetadataOk() + if !ok { + err = fmt.Errorf("missing metadata: %v", o) + return + } + count = int64(m.GetCount()) + return +} + +// NewIntellisenseMessageItemMessageStream returns a message stream. +func NewIntellisenseMessageItemMessageStream() IMessageStream { + return NewIntellisenseMessageItemWithDefaults() +} + // ============================================================================================ // This extends NotificationFeed definitions // ============================================================================================ diff --git a/extensions/extension_model_interface.go b/extensions/extension_model_interface.go index 9630fca..c87fed4 100644 --- a/extensions/extension_model_interface.go +++ b/extensions/extension_model_interface.go @@ -7,6 +7,8 @@ // It includes the definition of request/response types as well as provides helpers for calling specific helpers. package client +import "github.com/ARM-software/golang-utils/utils/collection/pagination" + // ************************************************************************************* // NOTE: this file is not generated. // It defines generic models. @@ -25,22 +27,9 @@ type IModel interface { // The following definitions match what is in golang-utils for [pagination](https://github.com/ARM-software/golang-utils/blob/master/utils/collection/pagination/interfaces.go) -type IIterator interface { - // HasNext returns whether there are more items available or not. - HasNext() bool - // GetNext returns the next item. - GetNext() (interface{}, error) -} +type IIterator = pagination.IIterator -// IStaticPage defines a generic page for a collection. -type IStaticPage interface { - // HasNext states whether more pages are accessible. - HasNext() bool - // GetItemIterator returns a new iterator over the page's items. - GetItemIterator() (IIterator, error) - // GetItemCount returns the number of items in this page - GetItemCount() (int64, error) -} +type IStaticPage = pagination.IStaticPage // IMessageStream defines a page for a collection which does not have any known ending. type IMessageStream interface { diff --git a/extensions/extension_model_interface_mappers.go b/extensions/extension_model_interface_mappers.go deleted file mode 100644 index 1e7c8af..0000000 --- a/extensions/extension_model_interface_mappers.go +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2020-2024 Arm Limited or its affiliates and Contributors. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package client - -import ( - "fmt" - - "github.com/ARM-software/golang-utils/utils/collection/pagination" - "github.com/ARM-software/golang-utils/utils/commonerrors" -) - -type staticPageWrapper struct { - page IStaticPage -} - -func (s *staticPageWrapper) HasNext() bool { - return s.page.HasNext() -} - -func (s *staticPageWrapper) GetItemCount() (int64, error) { - return s.page.GetItemCount() -} - -func (s *staticPageWrapper) GetItemIterator() (pagination.IIterator, error) { - i, err := s.page.GetItemIterator() - if err != nil { - return nil, err - } - i2, ok := i.(pagination.IIterator) - if !ok { - return nil, fmt.Errorf("%w: could not convert client.IIterator to pagination.IIterator", commonerrors.ErrMarshalling) - } - return i2, nil -} - -func MapIStaticPage(staticPage IStaticPage) pagination.IStaticPage { - if staticPage == nil { - return nil - } - return &staticPageWrapper{staticPage} -} - -type staticPageStreamWrapper struct { - pagination.IStaticPage - stream IMessageStream -} - -func (s *staticPageStreamWrapper) HasFuture() bool { - return s.stream.HasFuture() -} - -func MapIMessageStream(messageStream IMessageStream) pagination.IStaticPageStream { - if messageStream == nil { - return nil - } - return &staticPageStreamWrapper{IStaticPage: MapIStaticPage(messageStream), stream: messageStream} -} diff --git a/extensions/extension_model_interface_mappers_test.go b/extensions/extension_model_interface_mappers_test.go deleted file mode 100644 index bba8f92..0000000 --- a/extensions/extension_model_interface_mappers_test.go +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2020-2024 Arm Limited or its affiliates and Contributors. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package client - -import ( - "testing" - - "github.com/go-faker/faker/v4" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -type testIterator struct { - next any - itemCount int64 -} - -type testMessageStream struct { - i testIterator - hasFuture bool -} - -func (t *testIterator) HasNext() bool { - return t.next != nil -} - -func (t *testIterator) GetNext() (any, error) { - return t.next, nil -} - -func (t *testIterator) GetItemCount() (int64, error) { - return t.itemCount, nil -} - -func (t *testMessageStream) HasNext() bool { - return t.i.HasNext() -} - -func (t *testMessageStream) GetNext() (any, error) { - return t.i.GetNext() -} - -func (t *testMessageStream) GetItemCount() (int64, error) { - return t.i.GetItemCount() -} - -func (t *testMessageStream) GetItemIterator() (IIterator, error) { - return &t.i, nil -} - -func (t *testMessageStream) HasFuture() bool { - return t.hasFuture -} - -func TestExtensionModelInterfaceMappers(t *testing.T) { - t.Run("Normal case", func(t *testing.T) { - var x testMessageStream - - err := faker.FakeData(&x) - require.NoError(t, err) - - y := MapIMessageStream(&x) - - x1, err := x.GetItemCount() - assert.NoError(t, err) - y1, err := y.GetItemCount() - assert.NoError(t, err) - assert.EqualValues(t, x1, y1) - - x2 := x.HasNext() - y2 := y.HasNext() - assert.EqualValues(t, x2, y2) - - x3 := x.HasFuture() - y3 := y.HasFuture() - assert.EqualValues(t, x3, y3) - - x4, err := x.GetItemIterator() - assert.NoError(t, err) - y4, err := y.GetItemIterator() - assert.NoError(t, err) - assert.EqualValues(t, x4, y4) - }) - - t.Run("Nil case", func(t *testing.T) { - t.Run("IStaticPage", func(t *testing.T) { - var x IStaticPage - y := MapIStaticPage(x) - assert.Nil(t, y) - assert.Equal(t, x, y) - }) - t.Run("IMessageStream", func(t *testing.T) { - var x IMessageStream - y := MapIMessageStream(x) - assert.Nil(t, y) - assert.Equal(t, x, y) - }) - }) -} diff --git a/generator/codegen/collection_extensions.go b/generator/codegen/collection_extensions.go index f15f34c..c734bd7 100644 --- a/generator/codegen/collection_extensions.go +++ b/generator/codegen/collection_extensions.go @@ -19,6 +19,7 @@ const ( redactFlag = "x-redact" // Messages are a special case as they are a feed rather than a normal collection notificationFeedRef = "NotificationFeed" + messageItemRef = "MessageItem" ) var ignoreItems = []string{ @@ -192,9 +193,18 @@ func newMessageCollection(itemRef string) MessageCollection { IteratorRef: fmt.Sprintf("%sIterator", strings.TrimSuffix(itemRef, "Object")), } } + func newNotificationFeedCollection(itemRef string) NotificationFeedCollection { + var iteratorRef string + switch { + case strings.Contains(itemRef, notificationFeedRef): + iteratorRef = "NewNotificationMessageIterator" + case strings.Contains(itemRef, messageItemRef): + iteratorRef = "NewMessageIterator" + } return NotificationFeedCollection{ - ItemRef: trimRefPrefix(itemRef), + ItemRef: trimRefPrefix(itemRef), + IteratorRef: iteratorRef, } } @@ -257,7 +267,7 @@ func GetCollections(swagger *openapi3.T) (collections CollectionParams, err erro } if isMessagesCollection := strings.HasSuffix(endpoint, "messages"); isMessagesCollection { - if strings.Contains(collectionRef, notificationFeedRef) { + if strings.Contains(collectionRef, notificationFeedRef) || strings.Contains(collectionRef, messageItemRef) { if shouldIgnoreItem(collectionRef) { continue } diff --git a/generator/codegen/templates/entities.go.tmpl b/generator/codegen/templates/entities.go.tmpl index 6b4cf3b..a51b44a 100644 --- a/generator/codegen/templates/entities.go.tmpl +++ b/generator/codegen/templates/entities.go.tmpl @@ -227,7 +227,7 @@ func (o *{{ .ItemRef }}) HasFuture() bool { } func (o *{{ .ItemRef }}) GetItemIterator() (IIterator, error) { - return NewNotificationMessageIterator(o.GetMessages()) + return {{ .IteratorRef }}(o.GetMessages()) } func (o *{{ .ItemRef }}) GetItemCount() (count int64, err error) { diff --git a/generator/codegen/types.go b/generator/codegen/types.go index 4df2559..0ecbd98 100644 --- a/generator/codegen/types.go +++ b/generator/codegen/types.go @@ -23,7 +23,8 @@ type MessageCollection struct { type MessageCollections []MessageCollection type NotificationFeedCollection struct { - ItemRef string + ItemRef string + IteratorRef string } type NotificationFeedCollections []NotificationFeedCollection