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:
parent
cb03d4b333
commit
c2eb796562
@ -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)
|
require.NoError(t, err)
|
||||||
|
|
||||||
folderIDs = append(folderIDs, folderID)
|
folderIDs = append(folderIDs, folderID)
|
||||||
@ -69,7 +69,7 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() {
|
|||||||
folderName2 := "Corso_Folder_Test_" + common.FormatNow(common.SimpleTimeTesting)
|
folderName2 := "Corso_Folder_Test_" + common.FormatNow(common.SimpleTimeTesting)
|
||||||
folderElements = append(folderElements, folderName2)
|
folderElements = append(folderElements, folderName2)
|
||||||
|
|
||||||
folderID, err = createRestoreFolders(ctx, gs, driveID, folderElements)
|
folderID, err = CreateRestoreFolders(ctx, gs, driveID, folderElements)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
folderIDs = append(folderIDs, folderID)
|
folderIDs = append(folderIDs, folderID)
|
||||||
|
|||||||
@ -102,7 +102,7 @@ func RestoreCollection(
|
|||||||
logger.Ctx(ctx).Debugf("Restore target for %s is %v", dc.FullPath(), restoreFolderElements)
|
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
|
// 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 {
|
if err != nil {
|
||||||
errUpdater(directory.String(), errors.Wrapf(err, "failed to create folders %v", restoreFolderElements))
|
errUpdater(directory.String(), errors.Wrapf(err, "failed to create folders %v", restoreFolderElements))
|
||||||
return metrics, false
|
return metrics, false
|
||||||
@ -159,7 +159,7 @@ func RestoreCollection(
|
|||||||
|
|
||||||
// createRestoreFolders creates the restore folder hieararchy in the specified drive and returns the folder ID
|
// createRestoreFolders creates the restore folder hieararchy in the specified drive and returns the folder ID
|
||||||
// of the last folder entry in the hiearchy
|
// 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) {
|
) (string, error) {
|
||||||
driveRoot, err := service.Client().DrivesById(driveID).Root().Get(ctx, nil)
|
driveRoot, err := service.Client().DrivesById(driveID).Root().Get(ctx, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -10,8 +10,11 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"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/mockconnector"
|
||||||
|
"github.com/alcionai/corso/src/internal/connector/onedrive"
|
||||||
"github.com/alcionai/corso/src/internal/data"
|
"github.com/alcionai/corso/src/internal/data"
|
||||||
|
"github.com/alcionai/corso/src/internal/tester"
|
||||||
"github.com/alcionai/corso/src/pkg/path"
|
"github.com/alcionai/corso/src/pkg/path"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -83,3 +86,36 @@ func (suite *SharePointCollectionSuite) TestSharePointListCollection() {
|
|||||||
require.NotNil(t, shareInfo.Info().SharePoint)
|
require.NotNil(t, shareInfo.Info().SharePoint)
|
||||||
assert.Equal(t, testName, shareInfo.Info().SharePoint.ItemName)
|
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)
|
||||||
|
}
|
||||||
|
|||||||
@ -68,3 +68,20 @@ func RestoreCollections(
|
|||||||
dest.ContainerName),
|
dest.ContainerName),
|
||||||
nil
|
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)
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user