diff --git a/src/internal/connector/onedrive/drive_test.go b/src/internal/connector/onedrive/drive_test.go index 19d913549..10934db26 100644 --- a/src/internal/connector/onedrive/drive_test.go +++ b/src/internal/connector/onedrive/drive_test.go @@ -61,7 +61,7 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() { } }() - folderID, err := createRestoreFolders(ctx, gs, driveID, folderElements) + folderID, err := CreateRestoreFolders(ctx, gs, driveID, folderElements) require.NoError(t, err) folderIDs = append(folderIDs, folderID) @@ -69,7 +69,7 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() { folderName2 := "Corso_Folder_Test_" + common.FormatNow(common.SimpleTimeTesting) folderElements = append(folderElements, folderName2) - folderID, err = createRestoreFolders(ctx, gs, driveID, folderElements) + folderID, err = CreateRestoreFolders(ctx, gs, driveID, folderElements) require.NoError(t, err) folderIDs = append(folderIDs, folderID) diff --git a/src/internal/connector/onedrive/restore.go b/src/internal/connector/onedrive/restore.go index 67cfac802..75dd6fa07 100644 --- a/src/internal/connector/onedrive/restore.go +++ b/src/internal/connector/onedrive/restore.go @@ -102,7 +102,7 @@ func RestoreCollection( logger.Ctx(ctx).Debugf("Restore target for %s is %v", dc.FullPath(), restoreFolderElements) // Create restore folders and get the folder ID of the folder the data stream will be restored in - restoreFolderID, err := createRestoreFolders(ctx, service, drivePath.DriveID, restoreFolderElements) + restoreFolderID, err := CreateRestoreFolders(ctx, service, drivePath.DriveID, restoreFolderElements) if err != nil { errUpdater(directory.String(), errors.Wrapf(err, "failed to create folders %v", restoreFolderElements)) return metrics, false @@ -159,7 +159,7 @@ func RestoreCollection( // createRestoreFolders creates the restore folder hieararchy in the specified drive and returns the folder ID // of the last folder entry in the hiearchy -func createRestoreFolders(ctx context.Context, service graph.Servicer, driveID string, restoreFolders []string, +func CreateRestoreFolders(ctx context.Context, service graph.Servicer, driveID string, restoreFolders []string, ) (string, error) { driveRoot, err := service.Client().DrivesById(driveID).Root().Get(ctx, nil) if err != nil { diff --git a/src/internal/connector/sharepoint/collection_test.go b/src/internal/connector/sharepoint/collection_test.go index 02a15ce69..82fd5e713 100644 --- a/src/internal/connector/sharepoint/collection_test.go +++ b/src/internal/connector/sharepoint/collection_test.go @@ -10,8 +10,11 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "github.com/alcionai/corso/src/internal/common" "github.com/alcionai/corso/src/internal/connector/mockconnector" + "github.com/alcionai/corso/src/internal/connector/onedrive" "github.com/alcionai/corso/src/internal/data" + "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/pkg/path" ) @@ -83,3 +86,36 @@ func (suite *SharePointCollectionSuite) TestSharePointListCollection() { require.NotNil(t, shareInfo.Info().SharePoint) assert.Equal(t, testName, shareInfo.Info().SharePoint.ItemName) } + +// TestRestoreLocation temporary test for greater restore operation +// TODO delete after full functionality tested in GraphConnector +func (suite *SharePointCollectionSuite) TestRestoreLocation() { + ctx, flush := tester.NewContext() + defer flush() + + t := suite.T() + a := tester.NewM365Account(t) + account, err := a.M365Config() + require.NoError(t, err) + + service, err := createTestService(account) + require.NoError(t, err) + + rootFolder := "General_" + common.FormatNow(common.SimpleTimeTesting) + siteID := tester.M365SiteID(t) + + folderID, err := createRestoreFolders(ctx, service, siteID, []string{rootFolder}) + assert.NoError(t, err) + t.Log("FolderID: " + folderID) + + _, err = createRestoreFolders(ctx, service, siteID, []string{rootFolder, "Tsao"}) + assert.NoError(t, err) + + // CleanUp + siteDrive, err := service.Client().SitesById(siteID).Drive().Get(ctx, nil) + require.NoError(t, err) + + driveID := *siteDrive.GetId() + err = onedrive.DeleteItem(ctx, service, driveID, folderID) + assert.NoError(t, err) +} diff --git a/src/internal/connector/sharepoint/restore.go b/src/internal/connector/sharepoint/restore.go index 9cfd91512..97993df94 100644 --- a/src/internal/connector/sharepoint/restore.go +++ b/src/internal/connector/sharepoint/restore.go @@ -68,3 +68,20 @@ func RestoreCollections( dest.ContainerName), nil } + +// createRestoreFolders creates the restore folder hieararchy in the specified drive and returns the folder ID +// of the last folder entry given in the hiearchy +func createRestoreFolders(ctx context.Context, service graph.Servicer, siteID string, restoreFolders []string, +) (string, error) { + // Get Main Drive for Site, Documents + mainDrive, err := service.Client().SitesById(siteID).Drive().Get(ctx, nil) + if err != nil { + return "", errors.Wrapf( + err, + "failed to get site drive root. details: %s", + support.ConnectorStackErrorTrace(err), + ) + } + + return onedrive.CreateRestoreFolders(ctx, service, *mainDrive.GetId(), restoreFolders) +}