Still a few pending items like CLI handling and restoring specific items. Will be handled in a follow up. --- #### Does this PR need a docs update or release note? - [ ] ✅ Yes, it's included - [x] 🕐 Yes, but in a later PR - [ ] ⛔ No #### Type of change <!--- Please check the type of change your PR introduces: ---> - [x] 🌻 Feature - [ ] 🐛 Bugfix - [ ] 🗺️ Documentation - [ ] 🤖 Supportability/Tests - [ ] 💻 CI/Deployment - [ ] 🧹 Tech Debt/Cleanup #### Issue(s) <!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. --> * https://github.com/alcionai/corso/issues/3992 #### Test Plan <!-- How will this be tested prior to merging.--> - [ ] 💪 Manual - [x] ⚡ Unit test - [ ] 💚 E2E
1085 lines
35 KiB
Go
1085 lines
35 KiB
Go
package testdata
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"golang.org/x/exp/slices"
|
|
|
|
"github.com/alcionai/corso/src/internal/version"
|
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
|
"github.com/alcionai/corso/src/pkg/path"
|
|
)
|
|
|
|
// mustParsePath takes a string representing a resource path and returns a path
|
|
// instance. Panics if the path cannot be parsed. Useful for simple variable
|
|
// assignments.
|
|
func mustParsePath(ref string, isItem bool) path.Path {
|
|
p, err := path.FromDataLayerPath(ref, isItem)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return p
|
|
}
|
|
|
|
// mustAppendPath takes a Path, string representing a path element, and whether
|
|
// the element is an item and returns a path instance representing the original
|
|
// path with the element appended to it. Panics if the path cannot be parsed.
|
|
// Useful for simple variable assignments.
|
|
func mustAppendPath(p path.Path, newElement string, isItem bool) path.Path {
|
|
newP, err := p.Append(isItem, newElement)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return newP
|
|
}
|
|
|
|
func locFromRepo(rr path.Path, isItem bool) *path.Builder {
|
|
loc := &path.Builder{}
|
|
|
|
for _, e := range rr.Folders() {
|
|
loc = loc.Append(strings.TrimSuffix(e, folderSuffix))
|
|
}
|
|
|
|
if rr.Service() == path.GroupsService {
|
|
loc = loc.PopFront().PopFront().PopFront()
|
|
} else if rr.Service() == path.OneDriveService || rr.Category() == path.LibrariesCategory {
|
|
loc = loc.PopFront()
|
|
}
|
|
|
|
// Folders don't have their final element in the location.
|
|
if !isItem {
|
|
loc = loc.Dir()
|
|
}
|
|
|
|
return loc
|
|
}
|
|
|
|
type repoRefAndLocRef struct {
|
|
RR path.Path
|
|
Loc *path.Builder
|
|
}
|
|
|
|
func (p repoRefAndLocRef) MustAppend(newElement string, isItem bool) repoRefAndLocRef {
|
|
e := newElement + folderSuffix
|
|
|
|
if isItem {
|
|
e = newElement + fileSuffix
|
|
}
|
|
|
|
res := repoRefAndLocRef{
|
|
RR: mustAppendPath(p.RR, e, isItem),
|
|
}
|
|
|
|
res.Loc = locFromRepo(res.RR, isItem)
|
|
|
|
return res
|
|
}
|
|
|
|
func (p repoRefAndLocRef) ItemLocation() string {
|
|
return strings.TrimSuffix(p.RR.Item(), fileSuffix)
|
|
}
|
|
|
|
func (p repoRefAndLocRef) FolderLocation() string {
|
|
lastElem := p.RR.ToBuilder().LastElem()
|
|
|
|
if len(p.RR.Item()) > 0 {
|
|
f := p.RR.Folders()
|
|
lastElem = f[len(f)-2]
|
|
}
|
|
|
|
return p.Loc.Append(strings.TrimSuffix(lastElem, folderSuffix)).String()
|
|
}
|
|
|
|
// locationAsRepoRef returns a path.Path where the LocationRef is used for the
|
|
// folder path instead of the id-based path elements. This is useful for
|
|
// generating paths for older versions of Corso.
|
|
func (p repoRefAndLocRef) locationAsRepoRef() path.Path {
|
|
tmp := p.Loc
|
|
if len(p.ItemLocation()) > 0 {
|
|
tmp = tmp.Append(p.ItemLocation())
|
|
}
|
|
|
|
res, err := tmp.ToDataLayerPath(
|
|
p.RR.Tenant(),
|
|
p.RR.ProtectedResource(),
|
|
p.RR.Service(),
|
|
p.RR.Category(),
|
|
len(p.ItemLocation()) > 0)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
func mustPathRep(ref string, isItem bool) repoRefAndLocRef {
|
|
res := repoRefAndLocRef{}
|
|
tmp := mustParsePath(ref, isItem)
|
|
|
|
// Now append stuff to the RepoRef elements so we have distinct LocationRef
|
|
// and RepoRef elements to simulate using IDs in the path instead of display
|
|
// names.
|
|
rrPB := &path.Builder{}
|
|
for _, e := range tmp.Folders() {
|
|
rrPB = rrPB.Append(e + folderSuffix)
|
|
}
|
|
|
|
if isItem {
|
|
rrPB = rrPB.Append(tmp.Item() + fileSuffix)
|
|
}
|
|
|
|
rr, err := rrPB.ToDataLayerPath(
|
|
tmp.Tenant(),
|
|
tmp.ProtectedResource(),
|
|
tmp.Service(),
|
|
tmp.Category(),
|
|
isItem)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
res.RR = rr
|
|
res.Loc = locFromRepo(rr, isItem)
|
|
|
|
return res
|
|
}
|
|
|
|
const (
|
|
folderSuffix = ".d"
|
|
fileSuffix = ".f"
|
|
|
|
ItemName1 = "item1"
|
|
ItemName2 = "item2"
|
|
ItemName3 = "item3"
|
|
UserEmail1 = "user1@email.com"
|
|
UserEmail2 = "user2@email.com"
|
|
)
|
|
|
|
var (
|
|
Time1 = time.Date(2022, 9, 21, 10, 0, 0, 0, time.UTC)
|
|
Time2 = time.Date(2022, 10, 21, 10, 0, 0, 0, time.UTC)
|
|
Time3 = time.Date(2023, 9, 21, 10, 0, 0, 0, time.UTC)
|
|
Time4 = time.Date(2023, 10, 21, 10, 0, 0, 0, time.UTC)
|
|
|
|
ExchangeEmailInboxPath = mustPathRep("tenant-id/exchange/user-id/email/Inbox", false)
|
|
ExchangeEmailBasePath = ExchangeEmailInboxPath.MustAppend("subfolder", false)
|
|
ExchangeEmailBasePath2 = ExchangeEmailInboxPath.MustAppend("othersubfolder/", false)
|
|
ExchangeEmailBasePath3 = ExchangeEmailBasePath2.MustAppend("subsubfolder", false)
|
|
ExchangeEmailItemPath1 = ExchangeEmailBasePath.MustAppend(ItemName1, true)
|
|
ExchangeEmailItemPath2 = ExchangeEmailBasePath2.MustAppend(ItemName2, true)
|
|
ExchangeEmailItemPath3 = ExchangeEmailBasePath3.MustAppend(ItemName3, true)
|
|
|
|
// These all represent the same set of items however, the different versions
|
|
// have varying amounts of information.
|
|
exchangeEmailItemsByVersion = map[int][]details.Entry{
|
|
version.All8MigrateUserPNToID: {
|
|
{
|
|
RepoRef: ExchangeEmailItemPath1.RR.String(),
|
|
ShortRef: ExchangeEmailItemPath1.RR.ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath1.RR.ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEmailItemPath1.ItemLocation(),
|
|
LocationRef: ExchangeEmailItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "a-person",
|
|
Subject: "foo",
|
|
Received: Time1,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEmailItemPath2.RR.String(),
|
|
ShortRef: ExchangeEmailItemPath2.RR.ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath2.RR.ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEmailItemPath2.ItemLocation(),
|
|
LocationRef: ExchangeEmailItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "a-person",
|
|
Subject: "bar",
|
|
Received: Time2,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEmailItemPath3.RR.String(),
|
|
ShortRef: ExchangeEmailItemPath3.RR.ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath3.RR.ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEmailItemPath3.ItemLocation(),
|
|
LocationRef: ExchangeEmailItemPath3.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "another-person",
|
|
Subject: "baz",
|
|
Received: Time2,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
version.OneDrive7LocationRef: {
|
|
{
|
|
RepoRef: ExchangeEmailItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEmailItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEmailItemPath1.ItemLocation(),
|
|
LocationRef: ExchangeEmailItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "a-person",
|
|
Subject: "foo",
|
|
Received: Time1,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEmailItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEmailItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEmailItemPath2.ItemLocation(),
|
|
LocationRef: ExchangeEmailItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "a-person",
|
|
Subject: "bar",
|
|
Received: Time2,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEmailItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEmailItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEmailItemPath3.ItemLocation(),
|
|
LocationRef: ExchangeEmailItemPath3.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "another-person",
|
|
Subject: "baz",
|
|
Received: Time2,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
0: {
|
|
{
|
|
RepoRef: ExchangeEmailItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEmailItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "a-person",
|
|
Subject: "foo",
|
|
Received: Time1,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEmailItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEmailItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "a-person",
|
|
Subject: "bar",
|
|
Received: Time2,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEmailItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEmailItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEmailItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeMail,
|
|
Sender: "another-person",
|
|
Subject: "baz",
|
|
Received: Time2,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
ExchangeContactsRootPath = mustPathRep("tenant-id/exchange/user-id/contacts/contacts", false)
|
|
ExchangeContactsBasePath = ExchangeContactsRootPath.MustAppend("contacts", false)
|
|
ExchangeContactsBasePath2 = ExchangeContactsRootPath.MustAppend("morecontacts", false)
|
|
ExchangeContactsItemPath1 = ExchangeContactsBasePath.MustAppend(ItemName1, true)
|
|
ExchangeContactsItemPath2 = ExchangeContactsBasePath2.MustAppend(ItemName2, true)
|
|
|
|
exchangeContactsItemsByVersion = map[int][]details.Entry{
|
|
version.All8MigrateUserPNToID: {
|
|
{
|
|
RepoRef: ExchangeContactsItemPath1.RR.String(),
|
|
ShortRef: ExchangeContactsItemPath1.RR.ShortRef(),
|
|
ParentRef: ExchangeContactsItemPath1.RR.ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeContactsItemPath1.ItemLocation(),
|
|
LocationRef: ExchangeContactsItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeContact,
|
|
ContactName: "a-person",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeContactsItemPath2.RR.String(),
|
|
ShortRef: ExchangeContactsItemPath2.RR.ShortRef(),
|
|
ParentRef: ExchangeContactsItemPath2.RR.ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeContactsItemPath2.ItemLocation(),
|
|
LocationRef: ExchangeContactsItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeContact,
|
|
ContactName: "another-person",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
version.OneDrive7LocationRef: {
|
|
{
|
|
RepoRef: ExchangeContactsItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeContactsItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeContactsItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeContactsItemPath1.ItemLocation(),
|
|
LocationRef: ExchangeContactsItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeContact,
|
|
ContactName: "a-person",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeContactsItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeContactsItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeContactsItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeContactsItemPath2.ItemLocation(),
|
|
LocationRef: ExchangeContactsItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeContact,
|
|
ContactName: "another-person",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
0: {
|
|
{
|
|
RepoRef: ExchangeContactsItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeContactsItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeContactsItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeContact,
|
|
ContactName: "a-person",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeContactsItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeContactsItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeContactsItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeContact,
|
|
ContactName: "another-person",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
ExchangeEventsBasePath = mustPathRep("tenant-id/exchange/user-id/events/holidays", false)
|
|
ExchangeEventsBasePath2 = mustPathRep("tenant-id/exchange/user-id/events/moreholidays", false)
|
|
ExchangeEventsItemPath1 = ExchangeEventsBasePath.MustAppend(ItemName1, true)
|
|
ExchangeEventsItemPath2 = ExchangeEventsBasePath2.MustAppend(ItemName2, true)
|
|
|
|
exchangeEventsItemsByVersion = map[int][]details.Entry{
|
|
version.All8MigrateUserPNToID: {
|
|
{
|
|
RepoRef: ExchangeEventsItemPath1.RR.String(),
|
|
ShortRef: ExchangeEventsItemPath1.RR.ShortRef(),
|
|
ParentRef: ExchangeEventsItemPath1.RR.ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEventsItemPath1.ItemLocation(),
|
|
LocationRef: ExchangeEventsItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeEvent,
|
|
Organizer: "a-person",
|
|
Subject: "foo",
|
|
EventStart: Time1,
|
|
EventRecurs: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEventsItemPath2.RR.String(),
|
|
ShortRef: ExchangeEventsItemPath2.RR.ShortRef(),
|
|
ParentRef: ExchangeEventsItemPath2.RR.ToBuilder().Dir().ShortRef(),
|
|
ItemRef: ExchangeEventsItemPath2.ItemLocation(),
|
|
LocationRef: ExchangeEventsItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeEvent,
|
|
Organizer: "a-person",
|
|
Subject: "foo",
|
|
EventStart: Time2,
|
|
EventRecurs: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
2: {
|
|
{
|
|
RepoRef: ExchangeEventsItemPath1.RR.String(),
|
|
ShortRef: ExchangeEventsItemPath1.RR.ShortRef(),
|
|
ParentRef: ExchangeEventsItemPath1.RR.ToBuilder().Dir().ShortRef(),
|
|
LocationRef: ExchangeEventsItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeEvent,
|
|
Organizer: "a-person",
|
|
Subject: "foo",
|
|
EventStart: Time1,
|
|
EventRecurs: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEventsItemPath2.RR.String(),
|
|
ShortRef: ExchangeEventsItemPath2.RR.ShortRef(),
|
|
ParentRef: ExchangeEventsItemPath2.RR.ToBuilder().Dir().ShortRef(),
|
|
LocationRef: ExchangeEventsItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeEvent,
|
|
Organizer: "a-person",
|
|
Subject: "foo",
|
|
EventStart: Time2,
|
|
EventRecurs: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
0: {
|
|
{
|
|
RepoRef: ExchangeEventsItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEventsItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEventsItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeEvent,
|
|
Organizer: "a-person",
|
|
Subject: "foo",
|
|
EventStart: Time1,
|
|
EventRecurs: false,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: ExchangeEventsItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: ExchangeEventsItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: ExchangeEventsItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
Exchange: &details.ExchangeInfo{
|
|
ItemType: details.ExchangeEvent,
|
|
Organizer: "a-person",
|
|
Subject: "foo",
|
|
EventStart: Time2,
|
|
EventRecurs: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
OneDriveRootPath = mustPathRep("tenant-id/onedrive/user-id/files/drives/foo/root:", false)
|
|
OneDriveFolderPath = OneDriveRootPath.MustAppend("folder", false)
|
|
OneDriveBasePath1 = OneDriveFolderPath.MustAppend("a", false)
|
|
OneDriveBasePath2 = OneDriveFolderPath.MustAppend("b", false)
|
|
|
|
OneDriveItemPath1 = OneDriveFolderPath.MustAppend(ItemName1, true)
|
|
OneDriveItemPath2 = OneDriveBasePath1.MustAppend(ItemName2, true)
|
|
OneDriveItemPath3 = OneDriveBasePath2.MustAppend(ItemName3, true)
|
|
|
|
OneDriveFolderFolder = OneDriveFolderPath.Loc.PopFront().String()
|
|
OneDriveParentFolder1 = OneDriveBasePath1.Loc.PopFront().String()
|
|
OneDriveParentFolder2 = OneDriveBasePath2.Loc.PopFront().String()
|
|
|
|
oneDriveItemsByVersion = map[int][]details.Entry{
|
|
version.All8MigrateUserPNToID: {
|
|
{
|
|
RepoRef: OneDriveItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: OneDriveItemPath1.ItemLocation(),
|
|
LocationRef: OneDriveItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveFolderFolder,
|
|
ItemName: OneDriveItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: OneDriveItemPath2.ItemLocation(),
|
|
LocationRef: OneDriveItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder1,
|
|
ItemName: OneDriveItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: OneDriveItemPath3.ItemLocation(),
|
|
LocationRef: OneDriveItemPath3.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder2,
|
|
ItemName: OneDriveItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
version.OneDrive7LocationRef: {
|
|
{
|
|
RepoRef: OneDriveItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
LocationRef: OneDriveItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveFolderFolder,
|
|
ItemName: OneDriveItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
LocationRef: OneDriveItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder1,
|
|
ItemName: OneDriveItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
LocationRef: OneDriveItemPath3.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder2,
|
|
ItemName: OneDriveItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
version.OneDrive6NameInMeta: {
|
|
{
|
|
RepoRef: OneDriveItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveFolderFolder,
|
|
ItemName: OneDriveItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder1,
|
|
ItemName: OneDriveItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder2,
|
|
ItemName: OneDriveItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
0: {
|
|
{
|
|
RepoRef: OneDriveItemPath1.locationAsRepoRef().String() + "name",
|
|
ShortRef: OneDriveItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveFolderFolder,
|
|
ItemName: OneDriveItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath2.locationAsRepoRef().String() + "name",
|
|
ShortRef: OneDriveItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder1,
|
|
ItemName: OneDriveItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: OneDriveItemPath3.locationAsRepoRef().String() + "name",
|
|
ShortRef: OneDriveItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: OneDriveItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
OneDrive: &details.OneDriveInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: OneDriveParentFolder2,
|
|
ItemName: OneDriveItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
GroupsRootPath = mustPathRep("tenant-id/groups/group-id/libraries/sites/site-id/drives/foo/root:", false)
|
|
|
|
SharePointRootPath = mustPathRep("tenant-id/sharepoint/site-id/libraries/drives/foo/root:", false)
|
|
SharePointLibraryPath = SharePointRootPath.MustAppend("library", false)
|
|
SharePointBasePath1 = SharePointLibraryPath.MustAppend("a", false)
|
|
SharePointBasePath2 = SharePointLibraryPath.MustAppend("b", false)
|
|
|
|
SharePointLibraryItemPath1 = SharePointLibraryPath.MustAppend(ItemName1, true)
|
|
SharePointLibraryItemPath2 = SharePointBasePath1.MustAppend(ItemName2, true)
|
|
SharePointLibraryItemPath3 = SharePointBasePath2.MustAppend(ItemName3, true)
|
|
|
|
SharePointLibraryFolder = SharePointLibraryPath.Loc.PopFront().String()
|
|
SharePointParentLibrary1 = SharePointBasePath1.Loc.PopFront().String()
|
|
SharePointParentLibrary2 = SharePointBasePath2.Loc.PopFront().String()
|
|
|
|
sharePointLibraryItemsByVersion = map[int][]details.Entry{
|
|
version.All8MigrateUserPNToID: {
|
|
{
|
|
RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: SharePointLibraryItemPath1.ItemLocation(),
|
|
LocationRef: SharePointLibraryItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.SharePointLibrary,
|
|
ParentPath: SharePointLibraryFolder,
|
|
ItemName: SharePointLibraryItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: SharePointLibraryItemPath2.ItemLocation(),
|
|
LocationRef: SharePointLibraryItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.SharePointLibrary,
|
|
ParentPath: SharePointParentLibrary1,
|
|
ItemName: SharePointLibraryItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemRef: SharePointLibraryItemPath3.ItemLocation(),
|
|
LocationRef: SharePointLibraryItemPath3.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.SharePointLibrary,
|
|
ParentPath: SharePointParentLibrary2,
|
|
ItemName: SharePointLibraryItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
version.OneDrive7LocationRef: {
|
|
{
|
|
RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
LocationRef: SharePointLibraryItemPath1.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointLibraryFolder,
|
|
ItemName: SharePointLibraryItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
LocationRef: SharePointLibraryItemPath2.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointParentLibrary1,
|
|
ItemName: SharePointLibraryItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
LocationRef: SharePointLibraryItemPath3.Loc.String(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointParentLibrary2,
|
|
ItemName: SharePointLibraryItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
version.OneDrive6NameInMeta: {
|
|
{
|
|
RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointLibraryFolder,
|
|
ItemName: SharePointLibraryItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointParentLibrary1,
|
|
ItemName: SharePointLibraryItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String(),
|
|
ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointParentLibrary2,
|
|
ItemName: SharePointLibraryItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
0: {
|
|
{
|
|
RepoRef: SharePointLibraryItemPath1.locationAsRepoRef().String() + "name",
|
|
ShortRef: SharePointLibraryItemPath1.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath1.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointLibraryFolder,
|
|
ItemName: SharePointLibraryItemPath1.ItemLocation() + "name",
|
|
Size: int64(23),
|
|
Owner: UserEmail1,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath2.locationAsRepoRef().String() + "name",
|
|
ShortRef: SharePointLibraryItemPath2.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath2.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointParentLibrary1,
|
|
ItemName: SharePointLibraryItemPath2.ItemLocation() + "name",
|
|
Size: int64(42),
|
|
Owner: UserEmail1,
|
|
Created: Time1,
|
|
Modified: Time3,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
RepoRef: SharePointLibraryItemPath3.locationAsRepoRef().String() + "name",
|
|
ShortRef: SharePointLibraryItemPath3.locationAsRepoRef().ShortRef(),
|
|
ParentRef: SharePointLibraryItemPath3.locationAsRepoRef().ToBuilder().Dir().ShortRef(),
|
|
ItemInfo: details.ItemInfo{
|
|
SharePoint: &details.SharePointInfo{
|
|
ItemType: details.OneDriveItem,
|
|
ParentPath: SharePointParentLibrary2,
|
|
ItemName: SharePointLibraryItemPath3.ItemLocation() + "name",
|
|
Size: int64(19),
|
|
Owner: UserEmail2,
|
|
Created: Time2,
|
|
Modified: Time4,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
)
|
|
|
|
func GetDetailsSetForVersion(t *testing.T, wantedVersion int) *details.Details {
|
|
entries := []details.Entry{}
|
|
// TODO(ashmrtn): At some point make an exported variable somewhere that has
|
|
// all the valid service/category pairs.
|
|
dataTypes := map[path.ServiceType][]path.CategoryType{
|
|
path.ExchangeService: {
|
|
path.EmailCategory,
|
|
path.EventsCategory,
|
|
path.ContactsCategory,
|
|
},
|
|
path.OneDriveService: {
|
|
path.FilesCategory,
|
|
},
|
|
path.SharePointService: {
|
|
path.LibrariesCategory,
|
|
},
|
|
}
|
|
|
|
for s, cats := range dataTypes {
|
|
for _, cat := range cats {
|
|
entries = append(entries, GetDeetsForVersion(t, s, cat, wantedVersion)...)
|
|
}
|
|
}
|
|
|
|
return &details.Details{
|
|
DetailsModel: details.DetailsModel{
|
|
Entries: entries,
|
|
},
|
|
}
|
|
}
|
|
|
|
// GetItemsForVersion returns the set of items for the requested
|
|
// (service, category, version) tuple that reside at the indicated indices. If
|
|
// -1 is the only index provided then returns all items.
|
|
func GetItemsForVersion(
|
|
t *testing.T,
|
|
service path.ServiceType,
|
|
cat path.CategoryType,
|
|
wantVersion int,
|
|
indices ...int,
|
|
) []details.Entry {
|
|
deets := GetDeetsForVersion(t, service, cat, wantVersion)
|
|
|
|
if len(indices) == 1 && indices[0] == -1 {
|
|
return deets
|
|
}
|
|
|
|
var res []details.Entry
|
|
|
|
for _, i := range indices {
|
|
require.Less(t, i, len(deets), "requested index out of bounds", i, len(deets))
|
|
res = append(res, deets[i])
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// GetDeetsForVersion returns the set of details with the highest
|
|
// version <= the requested version.
|
|
func GetDeetsForVersion(
|
|
t *testing.T,
|
|
service path.ServiceType,
|
|
cat path.CategoryType,
|
|
wantVersion int,
|
|
) []details.Entry {
|
|
var input map[int][]details.Entry
|
|
|
|
switch service {
|
|
case path.ExchangeService:
|
|
switch cat {
|
|
case path.EmailCategory:
|
|
input = exchangeEmailItemsByVersion
|
|
|
|
case path.EventsCategory:
|
|
input = exchangeEventsItemsByVersion
|
|
|
|
case path.ContactsCategory:
|
|
input = exchangeContactsItemsByVersion
|
|
}
|
|
|
|
case path.OneDriveService:
|
|
if cat == path.FilesCategory {
|
|
input = oneDriveItemsByVersion
|
|
}
|
|
|
|
case path.SharePointService:
|
|
if cat == path.LibrariesCategory {
|
|
input = sharePointLibraryItemsByVersion
|
|
}
|
|
}
|
|
|
|
require.NotNil(
|
|
t,
|
|
input,
|
|
"unsupported (service, category)",
|
|
service.String(),
|
|
cat.String())
|
|
|
|
return getDeetsForVersion(t, wantVersion, input)
|
|
}
|
|
|
|
func getDeetsForVersion(
|
|
t *testing.T,
|
|
wantVersion int,
|
|
deetsSet map[int][]details.Entry,
|
|
) []details.Entry {
|
|
var (
|
|
res []details.Entry
|
|
resVersion = version.NoBackup
|
|
)
|
|
|
|
for v, deets := range deetsSet {
|
|
if v <= wantVersion && v > resVersion {
|
|
resVersion = v
|
|
res = deets
|
|
}
|
|
}
|
|
|
|
require.NotEmpty(t, res, "unable to find details for version", wantVersion)
|
|
|
|
return slices.Clone(res)
|
|
}
|