GetMailFolderID feature added (#455)
GetMaillFolderID add to `exchange` package. Test Suite Added.
This commit is contained in:
parent
890c8f2b7f
commit
bcbf0b1fb8
@ -1,9 +1,13 @@
|
|||||||
package exchange
|
package exchange
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
msgraphgocore "github.com/microsoftgraph/msgraph-sdk-go-core"
|
||||||
|
|
||||||
"github.com/microsoftgraph/msgraph-sdk-go/models"
|
"github.com/microsoftgraph/msgraph-sdk-go/models"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/alcionai/corso/internal/connector/graph"
|
"github.com/alcionai/corso/internal/connector/graph"
|
||||||
|
"github.com/alcionai/corso/internal/connector/support"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CreateMailFolder makes a mail folder iff a folder of the same name does not exist
|
// CreateMailFolder makes a mail folder iff a folder of the same name does not exist
|
||||||
@ -22,3 +26,44 @@ func CreateMailFolder(gs graph.Service, user, folder string) (models.MailFoldera
|
|||||||
func DeleteMailFolder(gs graph.Service, user, folderID string) error {
|
func DeleteMailFolder(gs graph.Service, user, folderID string) error {
|
||||||
return gs.Client().UsersById(user).MailFoldersById(folderID).Delete()
|
return gs.Client().UsersById(user).MailFoldersById(folderID).Delete()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetMailFolderID query function to retrieve the M365 ID based on the folder's displayName.
|
||||||
|
// @param folderName the target folder's display name. Case sensitive
|
||||||
|
// @returns a *string if the folder exists, nil otherwise
|
||||||
|
func GetMailFolderID(service graph.Service, folderName, user string) (*string, error) {
|
||||||
|
var errs error
|
||||||
|
var folderId *string
|
||||||
|
options, err := optionsForMailFolders([]string{"displayName"})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
response, err := service.Client().UsersById(user).MailFolders().GetWithRequestConfigurationAndResponseHandler(options, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if response == nil {
|
||||||
|
return nil, errors.New("mail folder query to m365 back store returned nil")
|
||||||
|
}
|
||||||
|
pageIterator, err := msgraphgocore.NewPageIterator(response, service.Adapter(), models.CreateMailFolderCollectionResponseFromDiscriminatorValue)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
callbackFunc := func(folderItem any) bool {
|
||||||
|
folder, ok := folderItem.(models.MailFolderable)
|
||||||
|
if !ok {
|
||||||
|
errs = support.WrapAndAppend(service.Adapter().GetBaseUrl(), errors.New("HasFolder() iteration failure"), errs)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if *folder.GetDisplayName() == folderName {
|
||||||
|
folderId = folder.GetId()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
iterateError := pageIterator.Iterate(callbackFunc)
|
||||||
|
if iterateError != nil {
|
||||||
|
errs = support.WrapAndAppend(service.Adapter().GetBaseUrl(), iterateError, errs)
|
||||||
|
}
|
||||||
|
return folderId, errs
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@ -95,6 +95,12 @@ func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_restoreMessages(
|
|||||||
assert.NoError(suite.T(), err)
|
assert.NoError(suite.T(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///------------------------------------------------------------
|
||||||
|
// Exchange Functions
|
||||||
|
//-------------------------------------------------------
|
||||||
|
|
||||||
|
// TestGraphConnector_CreateAndDeleteFolder ensures msgraph application has the ability
|
||||||
|
// to create and remove folders within the tenant
|
||||||
func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_CreateAndDeleteFolder() {
|
func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_CreateAndDeleteFolder() {
|
||||||
user := "lidiah@8qzvrj.onmicrosoft.com"
|
user := "lidiah@8qzvrj.onmicrosoft.com"
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
@ -106,3 +112,13 @@ func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_CreateAndDeleteF
|
|||||||
assert.NoError(suite.T(), err)
|
assert.NoError(suite.T(), err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestGraphConnector_GetMailFolderID verifies the ability to retrieve folder ID of folders
|
||||||
|
// at the top level of the file tree
|
||||||
|
func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_GetMailFolderID() {
|
||||||
|
user := "lidiah@8qzvrj.onmicrosoft.com"
|
||||||
|
folderName := "Inbox"
|
||||||
|
folderID, err := exchange.GetMailFolderID(&suite.connector.graphService, folderName, user)
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
assert.NotNil(suite.T(), folderID)
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user