Parse weburl to construct drive name for OneDrive
This commit is contained in:
parent
bcde15689f
commit
27ecdcb269
@ -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
|
||||
|
||||
@ -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())
|
||||
}
|
||||
}
|
||||
|
||||
@ -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())
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user