add a QoL path.Build func (#2763)

Adds a path.Build() func that can arbitrarily build a path according to expected standards without first initializing a path.Builder{}.
---

#### Does this PR need a docs update or release note?

- [x]  No

#### Type of change

- [x] 🧹 Tech Debt/Cleanup

#### Test Plan

- [x]  Unit test
- [x] 💚 E2E
This commit is contained in:
Keepers 2023-03-13 10:56:31 -06:00 committed by GitHub
parent c0fc821976
commit dc21f4ce07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 189 additions and 228 deletions

View File

@ -173,14 +173,13 @@ func buildCollections(
collections := make([]data.RestoreCollection, 0, len(colls)) collections := make([]data.RestoreCollection, 0, len(colls))
for _, c := range colls { for _, c := range colls {
pth, err := toDataLayerPath( pth, err := path.Build(
service,
tenant, tenant,
user, user,
service,
c.category, c.category,
c.pathElements,
false, false,
) c.pathElements...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -197,22 +196,3 @@ func buildCollections(
return collections, nil return collections, nil
} }
func toDataLayerPath(
service path.ServiceType,
tenant, user string,
category path.CategoryType,
elements []string,
isItem bool,
) (path.Path, error) {
pb := path.Builder{}.Append(elements...)
switch service {
case path.ExchangeService:
return pb.ToDataLayerExchangePathForCategory(tenant, user, category, isItem)
case path.OneDriveService:
return pb.ToDataLayerOneDrivePath(tenant, user, isItem)
}
return nil, errors.Errorf("unknown service %s", service.String())
}

View File

@ -570,27 +570,25 @@ func (suite *FolderCacheIntegrationSuite) TestCreateContainerDestination() {
name: "Mail Cache Test", name: "Mail Cache Test",
category: path.EmailCategory, category: path.EmailCategory,
pathFunc1: func(t *testing.T) path.Path { pathFunc1: func(t *testing.T) path.Path {
pth, err := path.Builder{}. pth, err := path.Build(
Append("Griffindor"). suite.credentials.AzureTenantID,
Append("Croix"). user,
ToDataLayerExchangePathForCategory( path.ExchangeService,
suite.credentials.AzureTenantID, path.EmailCategory,
user, false,
path.EmailCategory, "Griffindor", "Croix")
false)
require.NoError(t, err) require.NoError(t, err)
return pth return pth
}, },
pathFunc2: func(t *testing.T) path.Path { pathFunc2: func(t *testing.T) path.Path {
pth, err := path.Builder{}. pth, err := path.Build(
Append("Griffindor"). suite.credentials.AzureTenantID,
Append("Felicius"). user,
ToDataLayerExchangePathForCategory( path.ExchangeService,
suite.credentials.AzureTenantID, path.EmailCategory,
user, false,
path.EmailCategory, "Griffindor", "Felicius")
false)
require.NoError(t, err) require.NoError(t, err)
return pth return pth
@ -600,28 +598,28 @@ func (suite *FolderCacheIntegrationSuite) TestCreateContainerDestination() {
name: "Contact Cache Test", name: "Contact Cache Test",
category: path.ContactsCategory, category: path.ContactsCategory,
pathFunc1: func(t *testing.T) path.Path { pathFunc1: func(t *testing.T) path.Path {
aPath, err := path.Builder{}. pth, err := path.Build(
Append("HufflePuff"). suite.credentials.AzureTenantID,
ToDataLayerExchangePathForCategory( user,
suite.credentials.AzureTenantID, path.ExchangeService,
user, path.ContactsCategory,
path.ContactsCategory, false,
false) "HufflePuff")
require.NoError(t, err) require.NoError(t, err)
return aPath return pth
}, },
pathFunc2: func(t *testing.T) path.Path { pathFunc2: func(t *testing.T) path.Path {
aPath, err := path.Builder{}. pth, err := path.Build(
Append("Ravenclaw"). suite.credentials.AzureTenantID,
ToDataLayerExchangePathForCategory( user,
suite.credentials.AzureTenantID, path.ExchangeService,
user, path.ContactsCategory,
path.ContactsCategory, false,
false) "Ravenclaw")
require.NoError(t, err) require.NoError(t, err)
return aPath return pth
}, },
}, },
{ {
@ -629,28 +627,28 @@ func (suite *FolderCacheIntegrationSuite) TestCreateContainerDestination() {
category: path.EventsCategory, category: path.EventsCategory,
useIDForPath: true, useIDForPath: true,
pathFunc1: func(t *testing.T) path.Path { pathFunc1: func(t *testing.T) path.Path {
aPath, err := path.Builder{}. pth, err := path.Build(
Append("Durmstrang"). suite.credentials.AzureTenantID,
ToDataLayerExchangePathForCategory( user,
suite.credentials.AzureTenantID, path.ExchangeService,
user, path.EventsCategory,
path.EventsCategory, false,
false) "Durmstrang")
require.NoError(t, err) require.NoError(t, err)
return aPath return pth
}, },
pathFunc2: func(t *testing.T) path.Path { pathFunc2: func(t *testing.T) path.Path {
aPath, err := path.Builder{}. pth, err := path.Build(
Append("Beauxbatons"). suite.credentials.AzureTenantID,
ToDataLayerExchangePathForCategory( user,
suite.credentials.AzureTenantID, path.ExchangeService,
user, path.EventsCategory,
path.EventsCategory, false,
false) "Beauxbatons")
require.NoError(t, err) require.NoError(t, err)
return aPath return pth
}, },
}, },
} }

View File

@ -86,12 +86,13 @@ func (suite *ExchangeDataCollectionSuite) TestExchangeData_FullPath() {
user := "a-user" user := "a-user"
folder := "a-folder" folder := "a-folder"
fullPath, err := path.Builder{}.Append(folder).ToDataLayerExchangePathForCategory( fullPath, err := path.Build(
tenant, tenant,
user, user,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false, false,
) folder)
require.NoError(t, err) require.NoError(t, err)
edc := Collection{ edc := Collection{
@ -104,18 +105,18 @@ func (suite *ExchangeDataCollectionSuite) TestExchangeData_FullPath() {
func (suite *ExchangeDataCollectionSuite) TestExchangeDataCollection_NewExchangeDataCollection() { func (suite *ExchangeDataCollectionSuite) TestExchangeDataCollection_NewExchangeDataCollection() {
t := suite.T() t := suite.T()
tenant := "a-tenant" tenant := "a-tenant"
user := "a-user" user := "a-user"
folder := "a-folder" folder := "a-folder"
name := "User" name := "User"
fullPath, err := path.Builder{}.Append(folder).ToDataLayerExchangePathForCategory( fullPath, err := path.Build(
tenant, tenant,
user, user,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false, false,
) folder)
require.NoError(t, err) require.NoError(t, err)
edc := Collection{ edc := Collection{
@ -127,17 +128,11 @@ func (suite *ExchangeDataCollectionSuite) TestExchangeDataCollection_NewExchange
} }
func (suite *ExchangeDataCollectionSuite) TestNewCollection_state() { func (suite *ExchangeDataCollectionSuite) TestNewCollection_state() {
fooP, err := path.Builder{}. fooP, err := path.Build("t", "u", path.ExchangeService, path.EmailCategory, false, "foo")
Append("foo").
ToDataLayerExchangePathForCategory("t", "u", path.EmailCategory, false)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
barP, err := path.Builder{}. barP, err := path.Build("t", "u", path.ExchangeService, path.EmailCategory, false, "bar")
Append("bar").
ToDataLayerExchangePathForCategory("t", "u", path.EmailCategory, false)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
locP, err := path.Builder{}. locP, err := path.Build("t", "u", path.ExchangeService, path.EmailCategory, false, "human-readable")
Append("human-readable").
ToDataLayerExchangePathForCategory("t", "u", path.EmailCategory, false)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
table := []struct { table := []struct {

View File

@ -534,9 +534,7 @@ func (suite *ServiceIteratorsSuite) TestFilterContainersAndFillCollections_incre
) )
prevPath := func(t *testing.T, at ...string) path.Path { prevPath := func(t *testing.T, at ...string) path.Path {
p, err := path.Builder{}. p, err := path.Build(tenantID, userID, path.ExchangeService, cat, false, at...)
Append(at...).
ToDataLayerExchangePathForCategory(tenantID, userID, cat, false)
require.NoError(t, err) require.NoError(t, err)
return p return p

View File

@ -89,15 +89,13 @@ func (suite *MetadataUnitSuite) TestIsMetadataFile_Files_MetaSuffixes() {
suite.Run(fmt.Sprintf("%s %s %s", test.service, test.category, ext), func() { suite.Run(fmt.Sprintf("%s %s %s", test.service, test.category, ext), func() {
t := suite.T() t := suite.T()
p, err := path.Builder{}. p, err := path.Build(
Append("file"+ext). tenant,
ToDataLayerPath( user,
tenant, test.service,
user, test.category,
test.service, true,
test.category, "file"+ext)
true,
)
require.NoError(t, err) require.NoError(t, err)
test.expected(t, metadata.IsMetadataFile(p), "extension %s", ext) test.expected(t, metadata.IsMetadataFile(p), "extension %s", ext)
@ -112,15 +110,13 @@ func (suite *MetadataUnitSuite) TestIsMetadataFile_Files_NotMetaSuffixes() {
suite.Run(fmt.Sprintf("%s %s %s", test.service, test.category, ext), func() { suite.Run(fmt.Sprintf("%s %s %s", test.service, test.category, ext), func() {
t := suite.T() t := suite.T()
p, err := path.Builder{}. p, err := path.Build(
Append("file"+ext). tenant,
ToDataLayerPath( user,
tenant, test.service,
user, test.category,
test.service, true,
test.category, "file"+ext)
true,
)
require.NoError(t, err) require.NoError(t, err)
assert.Falsef(t, metadata.IsMetadataFile(p), "extension %s", ext) assert.Falsef(t, metadata.IsMetadataFile(p), "extension %s", ext)
@ -137,15 +133,13 @@ func (suite *MetadataUnitSuite) TestIsMetadataFile_Directories() {
suite.Run(fmt.Sprintf("%s %s %s", test.service, test.category, ext), func() { suite.Run(fmt.Sprintf("%s %s %s", test.service, test.category, ext), func() {
t := suite.T() t := suite.T()
p, err := path.Builder{}. p, err := path.Build(
Append("file"+ext). tenant,
ToDataLayerPath( user,
tenant, test.service,
user, test.category,
test.service, false,
test.category, "file"+ext)
false,
)
require.NoError(t, err) require.NoError(t, err)
assert.Falsef(t, metadata.IsMetadataFile(p), "extension %s", ext) assert.Falsef(t, metadata.IsMetadataFile(p), "extension %s", ext)

View File

@ -27,14 +27,13 @@ func TestMetadataCollectionUnitSuite(t *testing.T) {
func (suite *MetadataCollectionUnitSuite) TestFullPath() { func (suite *MetadataCollectionUnitSuite) TestFullPath() {
t := suite.T() t := suite.T()
p, err := path.Builder{}. p, err := path.Build(
Append("foo"). "a-tenant",
ToDataLayerExchangePathForCategory( "a-user",
"a-tenant", path.ExchangeService,
"a-user", path.EmailCategory,
path.EmailCategory, false,
false, "foo")
)
require.NoError(t, err) require.NoError(t, err)
c := NewMetadataCollection(p, nil, nil) c := NewMetadataCollection(p, nil, nil)
@ -70,14 +69,13 @@ func (suite *MetadataCollectionUnitSuite) TestItems() {
items = append(items, NewMetadataItem(itemNames[i], itemData[i])) items = append(items, NewMetadataItem(itemNames[i], itemData[i]))
} }
p, err := path.Builder{}. p, err := path.Build(
Append("foo"). "a-tenant",
ToDataLayerExchangePathForCategory( "a-user",
"a-tenant", path.ExchangeService,
"a-user", path.EmailCategory,
path.EmailCategory, false,
false, "foo")
)
require.NoError(t, err) require.NoError(t, err)
c := NewMetadataCollection( c := NewMetadataCollection(

View File

@ -11,7 +11,6 @@ import (
"testing" "testing"
"github.com/microsoftgraph/msgraph-sdk-go/models" "github.com/microsoftgraph/msgraph-sdk-go/models"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"golang.org/x/exp/maps" "golang.org/x/exp/maps"
@ -37,27 +36,7 @@ func mustToDataLayerPath(
elements []string, elements []string,
isItem bool, isItem bool,
) path.Path { ) path.Path {
var ( res, err := path.Build(tenant, resourceOwner, service, category, isItem, elements...)
err error
res path.Path
)
pb := path.Builder{}.Append(elements...)
switch service {
case path.ExchangeService:
res, err = pb.ToDataLayerExchangePathForCategory(tenant, resourceOwner, category, isItem)
case path.OneDriveService:
require.Equal(t, path.FilesCategory, category)
res, err = pb.ToDataLayerOneDrivePath(tenant, resourceOwner, isItem)
case path.SharePointService:
res, err = pb.ToDataLayerSharePointPath(tenant, resourceOwner, category, isItem)
default:
err = errors.Errorf("bad service type %s", service.String())
}
require.NoError(t, err) require.NoError(t, err)
return res return res

View File

@ -83,12 +83,13 @@ func (suite *SharePointCollectionSuite) TestCollection_Items() {
itemName: "MockListing", itemName: "MockListing",
category: List, category: List,
getDir: func(t *testing.T) path.Path { getDir: func(t *testing.T) path.Path {
dir, err := path.Builder{}.Append(dirRoot). dir, err := path.Build(
ToDataLayerSharePointPath( tenant,
tenant, user,
user, path.SharePointService,
path.ListsCategory, path.ListsCategory,
false) false,
dirRoot)
require.NoError(t, err) require.NoError(t, err)
return dir return dir
@ -118,12 +119,13 @@ func (suite *SharePointCollectionSuite) TestCollection_Items() {
itemName: "MockPages", itemName: "MockPages",
category: Pages, category: Pages,
getDir: func(t *testing.T) path.Path { getDir: func(t *testing.T) path.Path {
dir, err := path.Builder{}.Append(dirRoot). dir, err := path.Build(
ToDataLayerSharePointPath( tenant,
tenant, user,
user, path.SharePointService,
path.PagesCategory, path.PagesCategory,
false) false,
dirRoot)
require.NoError(t, err) require.NoError(t, err)
return dir return dir

View File

@ -141,12 +141,13 @@ func collectLists(
break break
} }
dir, err := path.Builder{}.Append(tuple.name). dir, err := path.Build(
ToDataLayerSharePointPath( tenantID,
tenantID, siteID,
siteID, path.SharePointService,
path.ListsCategory, path.ListsCategory,
false) false,
tuple.name)
if err != nil { if err != nil {
el.AddRecoverable(clues.Wrap(err, "creating list collection path").WithClues(ctx)) el.AddRecoverable(clues.Wrap(err, "creating list collection path").WithClues(ctx))
} }
@ -234,12 +235,13 @@ func collectPages(
break break
} }
dir, err := path.Builder{}.Append(tuple.Name). dir, err := path.Build(
ToDataLayerSharePointPath( creds.AzureTenantID,
creds.AzureTenantID, siteID,
siteID, path.SharePointService,
path.PagesCategory, path.PagesCategory,
false) false,
tuple.Name)
if err != nil { if err != nil {
el.AddRecoverable(clues.Wrap(err, "creating page collection path").WithClues(ctx)) el.AddRecoverable(clues.Wrap(err, "creating page collection path").WithClues(ctx))
} }

View File

@ -20,13 +20,9 @@ func TestDataCollectionSuite(t *testing.T) {
} }
func (suite *DataCollectionSuite) TestStateOf() { func (suite *DataCollectionSuite) TestStateOf() {
fooP, err := path.Builder{}. fooP, err := path.Build("t", "u", path.ExchangeService, path.EmailCategory, false, "foo")
Append("foo").
ToDataLayerExchangePathForCategory("t", "u", path.EmailCategory, false)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
barP, err := path.Builder{}. barP, err := path.Build("t", "u", path.ExchangeService, path.EmailCategory, false, "bar")
Append("bar").
ToDataLayerExchangePathForCategory("t", "u", path.EmailCategory, false)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
table := []struct { table := []struct {

View File

@ -34,13 +34,13 @@ func TestKopiaDataCollectionUnitSuite(t *testing.T) {
func (suite *KopiaDataCollectionUnitSuite) TestReturnsPath() { func (suite *KopiaDataCollectionUnitSuite) TestReturnsPath() {
t := suite.T() t := suite.T()
b := path.Builder{}.Append("some", "path", "for", "data") pth, err := path.Build(
pth, err := b.ToDataLayerExchangePathForCategory(
"a-tenant", "a-tenant",
"a-user", "a-user",
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false, false,
) "some", "path", "for", "data")
require.NoError(t, err) require.NoError(t, err)
c := kopiaDataCollection{ c := kopiaDataCollection{
@ -210,13 +210,13 @@ func (suite *KopiaDataCollectionUnitSuite) TestFetch() {
}) })
} }
b := path.Builder{}.Append(folder1, folder2) pth, err := path.Build(
pth, err := b.ToDataLayerExchangePathForCategory(
tenant, tenant,
user, user,
path.ExchangeService,
category, category,
false, false,
) folder1, folder2)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
table := []struct { table := []struct {

View File

@ -352,15 +352,13 @@ func TestCorsoProgressUnitSuite(t *testing.T) {
} }
func (suite *CorsoProgressUnitSuite) SetupSuite() { func (suite *CorsoProgressUnitSuite) SetupSuite() {
p, err := path.Builder{}.Append( p, err := path.Build(
testInboxDir,
"testFile",
).ToDataLayerExchangePathForCategory(
testTenant, testTenant,
testUser, testUser,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
true, true,
) testInboxDir, "testFile")
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
suite.targetFilePath = p suite.targetFilePath = p

View File

@ -165,21 +165,25 @@ func TestKopiaIntegrationSuite(t *testing.T) {
} }
func (suite *KopiaIntegrationSuite) SetupSuite() { func (suite *KopiaIntegrationSuite) SetupSuite() {
tmp, err := path.Builder{}.Append(testInboxDir).ToDataLayerExchangePathForCategory( tmp, err := path.Build(
testTenant, testTenant,
testUser, testUser,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false) false,
testInboxDir)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
suite.storePath1 = tmp suite.storePath1 = tmp
suite.locPath1 = tmp suite.locPath1 = tmp
tmp, err = path.Builder{}.Append(testArchiveDir).ToDataLayerExchangePathForCategory( tmp, err = path.Build(
testTenant, testTenant,
testUser, testUser,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false) false,
testArchiveDir)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
suite.storePath2 = tmp suite.storePath2 = tmp
@ -326,12 +330,13 @@ func (suite *KopiaIntegrationSuite) TestBackupCollections() {
} }
func (suite *KopiaIntegrationSuite) TestBackupCollections_NoDetailsForMeta() { func (suite *KopiaIntegrationSuite) TestBackupCollections_NoDetailsForMeta() {
tmp, err := path.Builder{}.Append(testInboxDir).ToDataLayerPath( tmp, err := path.Build(
testTenant, testTenant,
testUser, testUser,
path.OneDriveService, path.OneDriveService,
path.FilesCategory, path.FilesCategory,
false) false,
testInboxDir)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
storePath := tmp storePath := tmp
@ -741,22 +746,24 @@ func TestKopiaSimpleRepoIntegrationSuite(t *testing.T) {
} }
func (suite *KopiaSimpleRepoIntegrationSuite) SetupSuite() { func (suite *KopiaSimpleRepoIntegrationSuite) SetupSuite() {
tmp, err := path.Builder{}.Append(testInboxDir).ToDataLayerExchangePathForCategory( tmp, err := path.Build(
testTenant, testTenant,
testUser, testUser,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false, false,
) testInboxDir)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
suite.testPath1 = tmp suite.testPath1 = tmp
tmp, err = path.Builder{}.Append(testArchiveDir).ToDataLayerExchangePathForCategory( tmp, err = path.Build(
testTenant, testTenant,
testUser, testUser,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false, false,
) testArchiveDir)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
suite.testPath2 = tmp suite.testPath2 = tmp
@ -897,12 +904,13 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestBackupExcludeItem() {
Category: path.EmailCategory, Category: path.EmailCategory,
} }
subtreePathTmp, err := path.Builder{}.Append("tmp").ToDataLayerExchangePathForCategory( subtreePathTmp, err := path.Build(
testTenant, testTenant,
testUser, testUser,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
false, false,
) "tmp")
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
subtreePath := subtreePathTmp.ToBuilder().Dir() subtreePath := subtreePathTmp.ToBuilder().Dir()
@ -1048,12 +1056,13 @@ func (suite *KopiaSimpleRepoIntegrationSuite) TestBackupExcludeItem() {
} }
func (suite *KopiaSimpleRepoIntegrationSuite) TestRestoreMultipleItems() { func (suite *KopiaSimpleRepoIntegrationSuite) TestRestoreMultipleItems() {
doesntExist, err := path.Builder{}.Append("subdir", "foo").ToDataLayerExchangePathForCategory( doesntExist, err := path.Build(
testTenant, testTenant,
testUser, testUser,
path.ExchangeService,
path.EmailCategory, path.EmailCategory,
true, true,
) "subdir", "foo")
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
// Expected items is generated during the test by looking up paths in the // Expected items is generated during the test by looking up paths in the

View File

@ -369,13 +369,13 @@ func builderFromReason(ctx context.Context, tenant string, r kopia.Reason) (*pat
// This is hacky, but we want the path package to format the path the right // This is hacky, but we want the path package to format the path the right
// way (e.x. proper order for service, category, etc), but we don't care about // way (e.x. proper order for service, category, etc), but we don't care about
// the folders after the prefix. // the folders after the prefix.
p, err := path.Builder{}.Append("tmp").ToDataLayerPath( p, err := path.Build(
tenant, tenant,
r.ResourceOwner, r.ResourceOwner,
r.Service, r.Service,
r.Category, r.Category,
false, false,
) "tmp")
if err != nil { if err != nil {
return nil, clues.Wrap(err, "building path").WithClues(ctx) return nil, clues.Wrap(err, "building path").WithClues(ctx)
} }

View File

@ -662,14 +662,13 @@ func makeItemPath(
) path.Path { ) path.Path {
t.Helper() t.Helper()
p, err := path.Builder{}.Append(elems...). p, err := path.Build(
ToDataLayerPath( tenant,
tenant, resourceOwner,
resourceOwner, service,
service, category,
category, true,
true, elems...)
)
require.NoError(t, err) require.NoError(t, err)
return p return p

View File

@ -48,7 +48,7 @@ func (suite *OneDrivePathSuite) Test_ToOneDrivePath() {
suite.Run(tt.name, func() { suite.Run(tt.name, func() {
t := suite.T() t := suite.T()
p, err := path.Builder{}.Append(tt.pathElements...).ToDataLayerOneDrivePath("tenant", "user", false) p, err := path.Build("tenant", "user", path.OneDriveService, path.FilesCategory, false, tt.pathElements...)
require.NoError(suite.T(), err) require.NoError(suite.T(), err)
got, err := path.ToOneDrivePath(p) got, err := path.ToOneDrivePath(p)

View File

@ -376,6 +376,21 @@ func (pb Builder) ToServiceCategoryMetadataPath(
}, nil }, nil
} }
func Build(
tenant, resourceOwner string,
service ServiceType,
category CategoryType,
hasItem bool,
elements ...string,
) (Path, error) {
b := Builder{}.Append(elements...)
return b.ToDataLayerPath(
tenant, resourceOwner,
service, category,
hasItem)
}
func (pb Builder) ToDataLayerPath( func (pb Builder) ToDataLayerPath(
tenant, user string, tenant, user string,
service ServiceType, service ServiceType,

View File

@ -184,9 +184,7 @@ func scopeMustHave[T scopeT](t *testing.T, sc T, m map[categorizer]string) {
// stubPath ensures test path production matches that of fullPath design, // stubPath ensures test path production matches that of fullPath design,
// stubbing out static values where necessary. // stubbing out static values where necessary.
func stubPath(t *testing.T, user string, s []string, cat path.CategoryType) path.Path { func stubPath(t *testing.T, user string, s []string, cat path.CategoryType) path.Path {
pth, err := path.Builder{}. pth, err := path.Build("tid", user, path.ExchangeService, cat, true, s...)
Append(s...).
ToDataLayerExchangePathForCategory("tid", user, cat, true)
require.NoError(t, err) require.NoError(t, err)
return pth return pth

View File

@ -257,8 +257,8 @@ func (suite *OneDriveSelectorSuite) TestOneDriveRestore_Reduce() {
func (suite *OneDriveSelectorSuite) TestOneDriveCategory_PathValues() { func (suite *OneDriveSelectorSuite) TestOneDriveCategory_PathValues() {
t := suite.T() t := suite.T()
pathBuilder := path.Builder{}.Append("drive", "driveID", "root:", "dir1", "dir2", "file") elems := []string{"drive", "driveID", "root:", "dir1", "dir2", "file"}
filePath, err := pathBuilder.ToDataLayerOneDrivePath("tenant", "user", true) filePath, err := path.Build("tenant", "user", path.OneDriveService, path.FilesCategory, true, elems...)
require.NoError(t, err) require.NoError(t, err)
expected := map[categorizer][]string{ expected := map[categorizer][]string{

View File

@ -321,8 +321,6 @@ func (suite *SharePointSelectorSuite) TestSharePointRestore_Reduce() {
} }
func (suite *SharePointSelectorSuite) TestSharePointCategory_PathValues() { func (suite *SharePointSelectorSuite) TestSharePointCategory_PathValues() {
pathBuilder := path.Builder{}.Append("dir1", "dir2", "item")
table := []struct { table := []struct {
name string name string
sc sharePointCategory sc sharePointCategory
@ -350,11 +348,13 @@ func (suite *SharePointSelectorSuite) TestSharePointCategory_PathValues() {
suite.Run(test.name, func() { suite.Run(test.name, func() {
t := suite.T() t := suite.T()
itemPath, err := pathBuilder.ToDataLayerSharePointPath( itemPath, err := path.Build(
"tenant", "tenant",
"site", "site",
path.SharePointService,
test.sc.PathType(), test.sc.PathType(),
true) true,
"dir1", "dir2", "item")
require.NoError(t, err) require.NoError(t, err)
ent := details.DetailsEntry{ ent := details.DetailsEntry{