Compare commits

...

1 Commits

Author SHA1 Message Date
Vaibhav Kamra
27ecdcb269 Parse weburl to construct drive name for OneDrive 2023-05-04 18:17:52 -07:00
3 changed files with 74 additions and 1 deletions

View File

@ -305,7 +305,7 @@ func (c *Collections) Get(
for _, d := range drives {
var (
driveID = ptr.Val(d.GetId())
driveName = ptr.Val(d.GetName())
driveName = driveName(d)
prevDelta = prevDeltas[driveID]
oldPaths = oldPathsByDriveID[driveID]
numOldDelta = 0

View File

@ -3,6 +3,7 @@ package onedrive
import (
"context"
"fmt"
"path"
"strings"
"github.com/alcionai/clues"
@ -26,6 +27,12 @@ const (
nextLinkKey = "@odata.nextLink"
itemChildrenRawURLFmt = "https://graph.microsoft.com/v1.0/drives/%s/items/%s/children"
itemNotFoundErrorCode = "itemNotFound"
// https://learn.microsoft.com/en-us/graph/api/resources/drive?view=graph-rest-1.0#properties
// OneDrive personal drives will return personal. OneDrive for Business will return business.
// SharePoint document libraries will return documentLibrary.
oneDriveDriveType = "business"
spDriveDriveType = "documentLibrary"
)
// DeltaUpdate holds the results of a current delta token. It normally
@ -343,3 +350,21 @@ func DeleteItem(
return nil
}
// driveName returns the drive name for a drive
// For OneDrive - Graph always sets d.Name to `OneDrive` so
// instead we parse the webURL and use the last element
// e.g. if it is "https://<site name>/personal/<user>_onmicrosoft_com/Documents",
// we return `Documents`
func driveName(d models.Driveable) string {
dt := ptr.Val(d.GetDriveType())
switch dt {
case oneDriveDriveType:
if webURL := ptr.Val(d.GetWebUrl()); webURL != "" {
return path.Base(webURL)
}
fallthrough
default:
return ptr.Val(d.GetName())
}
}

View File

@ -277,6 +277,46 @@ func (suite *OneDriveUnitSuite) TestDrives() {
}
}
func (suite *OneDriveUnitSuite) Test_driveName() {
_, flush := tester.NewContext()
defer flush()
webURL := "https://<site name>/personal/<user>_onmicrosoft_com/Documents"
driveOneDrive := models.NewDrive()
driveOneDrive.SetDriveType(ptr.To(oneDriveDriveType))
driveOneDrive.SetWebUrl(&webURL)
driveOneDrive.SetName(ptr.To("anewdrivename"))
driveSharePoint := models.NewDrive()
driveSharePoint.SetDriveType(ptr.To(spDriveDriveType))
driveSharePoint.SetWebUrl(&webURL)
driveSharePoint.SetName(ptr.To("anewdrivename"))
table := []struct {
name string
d models.Driveable
expected string
}{
{
"OneDrive",
driveOneDrive,
"Documents",
},
{
"Sharepoint",
driveSharePoint,
"anewdrivename",
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
assert.Equal(t, test.expected, driveName(test.d))
})
}
}
// Integration tests
type OneDriveSuite struct {
@ -315,6 +355,14 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() {
require.NoError(t, err, clues.ToCore(err))
require.NotEmpty(t, drives)
// Verify drive type/name
for _, d := range drives {
assert.Equal(t, oneDriveDriveType, ptr.Val(d.GetDriveType()))
// Graph sets all OneDrive drive names to `OneDrive`
// Verify we're using the webURL instead
assert.NotEqual(t, "OneDrive", driveName(d))
}
// TODO: Verify the intended drive
driveID := ptr.Val(drives[0].GetId())