GC: Restore: SharePoint: Library Folder Creation (#1960)

## Description
Restore for `Libraries` to be housed within the main drive directory for the site drive. 

- Change to `onedrive` package to allow for the export of `CreateRestoreFolders()` a utility function for creating a directory structure.  
- Temporary test (`TestRestoreLocation()`) was added to ensure proper folder creation for SharePoint Libraries.
<!-- Insert PR description-->

## Does this PR need a docs update or release note?
- [x]  No 

## Type of change

<!--- Please check the type of change your PR introduces: --->
- [x] 🌻 Feature

## Issue(s)
- related to #1938

## Test Plan

- [x]  Unit test
This commit is contained in:
Danny 2022-12-27 12:13:43 -05:00 committed by GitHub
parent cb03d4b333
commit c2eb796562
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 4 deletions

View File

@ -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)

View File

@ -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 {

View File

@ -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)
}

View File

@ -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)
}