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 {
|
for _, d := range drives {
|
||||||
var (
|
var (
|
||||||
driveID = ptr.Val(d.GetId())
|
driveID = ptr.Val(d.GetId())
|
||||||
driveName = ptr.Val(d.GetName())
|
driveName = driveName(d)
|
||||||
prevDelta = prevDeltas[driveID]
|
prevDelta = prevDeltas[driveID]
|
||||||
oldPaths = oldPathsByDriveID[driveID]
|
oldPaths = oldPathsByDriveID[driveID]
|
||||||
numOldDelta = 0
|
numOldDelta = 0
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package onedrive
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/alcionai/clues"
|
"github.com/alcionai/clues"
|
||||||
@ -26,6 +27,12 @@ const (
|
|||||||
nextLinkKey = "@odata.nextLink"
|
nextLinkKey = "@odata.nextLink"
|
||||||
itemChildrenRawURLFmt = "https://graph.microsoft.com/v1.0/drives/%s/items/%s/children"
|
itemChildrenRawURLFmt = "https://graph.microsoft.com/v1.0/drives/%s/items/%s/children"
|
||||||
itemNotFoundErrorCode = "itemNotFound"
|
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
|
// DeltaUpdate holds the results of a current delta token. It normally
|
||||||
@ -343,3 +350,21 @@ func DeleteItem(
|
|||||||
|
|
||||||
return nil
|
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
|
// Integration tests
|
||||||
|
|
||||||
type OneDriveSuite struct {
|
type OneDriveSuite struct {
|
||||||
@ -315,6 +355,14 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() {
|
|||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
require.NotEmpty(t, drives)
|
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
|
// TODO: Verify the intended drive
|
||||||
driveID := ptr.Val(drives[0].GetId())
|
driveID := ptr.Val(drives[0].GetId())
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user