From 2ceafd8d62abb073619d68e8e9b758a6b9735eae Mon Sep 17 00:00:00 2001 From: Danny Date: Fri, 26 Aug 2022 16:15:55 -0400 Subject: [PATCH] Contact / Mail folder interfaces (2) (#659) Added 2 interfaces for future abstractions. --- .../connector/exchange/iterators_test.go | 42 +++++++++++++++++++ ...ervice_iterate.go => service_iterators.go} | 14 +++++++ 2 files changed, 56 insertions(+) create mode 100644 src/internal/connector/exchange/iterators_test.go rename src/internal/connector/exchange/{service_iterate.go => service_iterators.go} (94%) diff --git a/src/internal/connector/exchange/iterators_test.go b/src/internal/connector/exchange/iterators_test.go new file mode 100644 index 000000000..762d785db --- /dev/null +++ b/src/internal/connector/exchange/iterators_test.go @@ -0,0 +1,42 @@ +package exchange + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + + "github.com/alcionai/corso/internal/connector/mockconnector" + "github.com/alcionai/corso/internal/connector/support" +) + +type ExchangeIteratorSuite struct { + suite.Suite +} + +func TestExchangeIteratorSuite(t *testing.T) { + suite.Run(t, new(ExchangeIteratorSuite)) +} + +func (suite *ExchangeIteratorSuite) TestDisplayable() { + t := suite.T() + bytes := mockconnector.GetMockContactBytes("Displayable") + contact, err := support.CreateContactFromBytes(bytes) + require.NoError(t, err) + aDisplayable, ok := contact.(displayable) + assert.True(t, ok) + assert.NotNil(t, aDisplayable.GetId()) + assert.NotNil(t, aDisplayable.GetDisplayName()) +} + +func (suite *ExchangeIteratorSuite) TestDescendable() { + t := suite.T() + bytes := mockconnector.GetMockMessageBytes("Descendable") + message, err := support.CreateMessageFromBytes(bytes) + require.NoError(t, err) + aDescendable, ok := message.(descendable) + assert.True(t, ok) + assert.NotNil(t, aDescendable.GetId()) + assert.NotNil(t, aDescendable.GetParentFolderId()) +} diff --git a/src/internal/connector/exchange/service_iterate.go b/src/internal/connector/exchange/service_iterators.go similarity index 94% rename from src/internal/connector/exchange/service_iterate.go rename to src/internal/connector/exchange/service_iterators.go index 7bcb53d23..a5621a908 100644 --- a/src/internal/connector/exchange/service_iterate.go +++ b/src/internal/connector/exchange/service_iterators.go @@ -18,6 +18,20 @@ const ( eventsCategory = "events" ) +// descendable represents objects that implement msgraph-sdk-go/models.entityable +// and have the concept of a "parent folder". +type descendable interface { + GetId() *string + GetParentFolderId() *string +} + +// displayable represents objects that implement msgraph-sdk-fo/models.entityable +// and have the concept of a display name. +type displayable interface { + GetId() *string + GetDisplayName() *string +} + // GraphIterateFuncs are iterate functions to be used with the M365 iterators (e.g. msgraphgocore.NewPageIterator) // @returns a callback func that works with msgraphgocore.PageIterator.Iterate function type GraphIterateFunc func(