812 gc retrieval function tests (#817)

Issue 812: Test Expansion
Retrieval functions added to the test exchange package.

Issue #831:
Retry handler added to message restore pipeline.
This commit is contained in:
Danny 2022-09-13 11:33:08 -04:00 committed by GitHub
parent 16ad25f3a1
commit 61f769cc15
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 79 additions and 3 deletions

View File

@ -5,6 +5,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/microsoftgraph/msgraph-sdk-go/models"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite" "github.com/stretchr/testify/suite"
@ -347,6 +348,70 @@ func (suite *ExchangeServiceSuite) TestParseCalendarIDFromEvent() {
} }
} }
// TestRetrievalFunctions ensures that utility functions used
// to transform work within the current version of GraphAPI.
func (suite *ExchangeServiceSuite) TestRetrievalFunctions() {
var (
userID = tester.M365UserID(suite.T())
objectID string
)
tests := []struct {
name string
query GraphQuery
retrieveFunc GraphRetrievalFunc
}{
{
name: "Test Retrieve Message Function",
query: GetAllMessagesForUser,
retrieveFunc: RetrieveMessageDataForUser,
},
{
name: "Test Retrieve Contact Function",
query: GetAllContactsForUser,
retrieveFunc: RetrieveContactDataForUser,
},
{
name: "Test Retrieve Event Function",
query: GetAllEventsForUser,
retrieveFunc: RetrieveEventDataForUser,
},
}
for _, test := range tests {
suite.T().Run(test.name, func(t *testing.T) {
output, err := test.query(suite.es, userID)
require.NoError(t, err)
switch v := output.(type) {
case *models.MessageCollectionResponse:
transform := output.(models.MessageCollectionResponseable)
response := transform.GetValue()
require.Greater(t, len(response), 0)
objectID = *response[0].GetId()
case *models.ContactCollectionResponse:
transform := output.(models.ContactCollectionResponseable)
response := transform.GetValue()
require.Greater(t, len(response), 0)
objectID = *response[0].GetId()
case *models.EventCollectionResponse:
transform := output.(models.EventCollectionResponseable)
response := transform.GetValue()
require.Greater(t, len(response), 0)
objectID = *response[0].GetId()
default:
t.Logf("What is this type: %T\n", v)
}
require.NotEmpty(t, objectID)
retrieved, err := test.retrieveFunc(suite.es, userID, objectID)
assert.NoError(t, err, support.ConnectorStackErrorTrace(err))
assert.NotNil(t, retrieved)
})
}
}
// TestGetMailFolderID verifies the ability to retrieve folder ID of folders // TestGetMailFolderID verifies the ability to retrieve folder ID of folders
// at the top level of the file tree // at the top level of the file tree
func (suite *ExchangeServiceSuite) TestGetContainerID() { func (suite *ExchangeServiceSuite) TestGetContainerID() {

View File

@ -520,7 +520,7 @@ func RestoreMailMessage(
// Creates messageable object from original bytes // Creates messageable object from original bytes
originalMessage, err := support.CreateMessageFromBytes(bits) originalMessage, err := support.CreateMessageFromBytes(bits)
if err != nil { if err != nil {
return err return errors.Wrapf(err, "restore mail message rcvd: %v", bits)
} }
// Sets fields from original message from storage // Sets fields from original message from storage
clone := support.ToMessage(originalMessage) clone := support.ToMessage(originalMessage)
@ -566,7 +566,18 @@ func RestoreMailMessage(
// @param destination represents M365 ID of a folder within the users's space // @param destination represents M365 ID of a folder within the users's space
// @param message is a models.Messageable interface from "github.com/microsoftgraph/msgraph-sdk-go/models" // @param message is a models.Messageable interface from "github.com/microsoftgraph/msgraph-sdk-go/models"
func SendMailToBackStore(service graph.Service, user, destination string, message models.Messageable) error { func SendMailToBackStore(service graph.Service, user, destination string, message models.Messageable) error {
sentMessage, err := service.Client().UsersById(user).MailFoldersById(destination).Messages().Post(message) var (
sentMessage models.Messageable
err error
)
for count := 0; count < numberOfRetries; count++ {
sentMessage, err = service.Client().UsersById(user).MailFoldersById(destination).Messages().Post(message)
if err == nil && sentMessage != nil {
break
}
}
if err != nil { if err != nil {
return support.WrapAndAppend(": "+support.ConnectorStackErrorTrace(err), err, nil) return support.WrapAndAppend(": "+support.ConnectorStackErrorTrace(err), err, nil)
} }

View File

@ -17,7 +17,7 @@ import (
// into M365 backstore. Responses -> returned items will only contain the information // into M365 backstore. Responses -> returned items will only contain the information
// that is included in the options // that is included in the options
// TODO: use selector or path for granularity into specific folders or specific date ranges // TODO: use selector or path for granularity into specific folders or specific date ranges
type GraphQuery func(graph.Service, string) (absser.Parsable, error) type GraphQuery func(gs graph.Service, userID string) (absser.Parsable, error)
// GetAllMessagesForUser is a GraphQuery function for receiving all messages for a single user // GetAllMessagesForUser is a GraphQuery function for receiving all messages for a single user
func GetAllMessagesForUser(gs graph.Service, user string) (absser.Parsable, error) { func GetAllMessagesForUser(gs graph.Service, user string) (absser.Parsable, error) {