Add tests for older versions of backup details data (#3454)

Add tests for older backup details versions
including things like:
* SharePoint using OneDriveItem type
* not having LocationRef
* not having ItemRef
* folder names in RepoRef
* file names in RepoRef

Recommend viewing with ignore whitespace changes
---

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

- [ ]  Yes, it's included
- [ ] 🕐 Yes, but in a later PR
- [x]  No

#### Type of change

- [ ] 🌻 Feature
- [ ] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [x] 🤖 Supportability/Tests
- [ ] 💻 CI/Deployment
- [ ] 🧹 Tech Debt/Cleanup

#### Issue(s)

* #3269

#### Test Plan

- [ ] 💪 Manual
- [x]  Unit test
- [ ] 💚 E2E
This commit is contained in:
ashmrtn 2023-05-19 18:41:37 -07:00 committed by GitHub
parent a3f4d74944
commit f28c6e53d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 1808 additions and 590 deletions

View File

@ -1,6 +1,7 @@
package backup package backup
import ( import (
"fmt"
"testing" "testing"
"github.com/alcionai/clues" "github.com/alcionai/clues"
@ -13,6 +14,8 @@ import (
"github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/cli/utils"
"github.com/alcionai/corso/src/cli/utils/testdata" "github.com/alcionai/corso/src/cli/utils/testdata"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/version"
dtd "github.com/alcionai/corso/src/pkg/backup/details/testdata"
) )
type ExchangeUnitSuite struct { type ExchangeUnitSuite struct {
@ -275,18 +278,26 @@ func (suite *ExchangeUnitSuite) TestExchangeBackupDetailsSelectors() {
ctx, flush := tester.NewContext() ctx, flush := tester.NewContext()
defer flush() defer flush()
for _, test := range testdata.ExchangeOptionDetailLookups { for v := 0; v <= version.Backup; v++ {
suite.Run(test.Name, func() { suite.Run(fmt.Sprintf("version%d", v), func() {
t := suite.T() for _, test := range testdata.ExchangeOptionDetailLookups {
suite.Run(test.Name, func() {
t := suite.T()
output, err := runDetailsExchangeCmd( bg := testdata.VersionedBackupGetter{
ctx, Details: dtd.GetDetailsSetForVersion(t, v),
test.BackupGetter, }
"backup-ID",
test.Opts, output, err := runDetailsExchangeCmd(
false) ctx,
assert.NoError(t, err, clues.ToCore(err)) bg,
assert.ElementsMatch(t, test.Expected, output.Entries) "backup-ID",
test.Opts(t, v),
false)
assert.NoError(t, err, clues.ToCore(err))
assert.ElementsMatch(t, test.Expected(t, v), output.Entries)
})
}
}) })
} }
} }
@ -303,7 +314,7 @@ func (suite *ExchangeUnitSuite) TestExchangeBackupDetailsSelectorsBadFormats() {
ctx, ctx,
test.BackupGetter, test.BackupGetter,
"backup-ID", "backup-ID",
test.Opts, test.Opts(t, version.Backup),
false) false)
assert.Error(t, err, clues.ToCore(err)) assert.Error(t, err, clues.ToCore(err))
assert.Empty(t, output) assert.Empty(t, output)

View File

@ -1,6 +1,7 @@
package backup package backup
import ( import (
"fmt"
"testing" "testing"
"github.com/alcionai/clues" "github.com/alcionai/clues"
@ -13,6 +14,8 @@ import (
"github.com/alcionai/corso/src/cli/utils" "github.com/alcionai/corso/src/cli/utils"
"github.com/alcionai/corso/src/cli/utils/testdata" "github.com/alcionai/corso/src/cli/utils/testdata"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/version"
dtd "github.com/alcionai/corso/src/pkg/backup/details/testdata"
) )
type OneDriveUnitSuite struct { type OneDriveUnitSuite struct {
@ -137,18 +140,26 @@ func (suite *OneDriveUnitSuite) TestOneDriveBackupDetailsSelectors() {
ctx, flush := tester.NewContext() ctx, flush := tester.NewContext()
defer flush() defer flush()
for _, test := range testdata.OneDriveOptionDetailLookups { for v := 0; v <= version.Backup; v++ {
suite.Run(test.Name, func() { suite.Run(fmt.Sprintf("version%d", v), func() {
t := suite.T() for _, test := range testdata.OneDriveOptionDetailLookups {
suite.Run(test.Name, func() {
t := suite.T()
output, err := runDetailsOneDriveCmd( bg := testdata.VersionedBackupGetter{
ctx, Details: dtd.GetDetailsSetForVersion(t, v),
test.BackupGetter, }
"backup-ID",
test.Opts, output, err := runDetailsOneDriveCmd(
false) ctx,
assert.NoError(t, err, clues.ToCore(err)) bg,
assert.ElementsMatch(t, test.Expected, output.Entries) "backup-ID",
test.Opts(t, v),
false)
assert.NoError(t, err, clues.ToCore(err))
assert.ElementsMatch(t, test.Expected(t, v), output.Entries)
})
}
}) })
} }
} }
@ -165,7 +176,7 @@ func (suite *OneDriveUnitSuite) TestOneDriveBackupDetailsSelectorsBadFormats() {
ctx, ctx,
test.BackupGetter, test.BackupGetter,
"backup-ID", "backup-ID",
test.Opts, test.Opts(t, version.Backup),
false) false)
assert.Error(t, err, clues.ToCore(err)) assert.Error(t, err, clues.ToCore(err))
assert.Empty(t, output) assert.Empty(t, output)

View File

@ -1,6 +1,7 @@
package backup package backup
import ( import (
"fmt"
"testing" "testing"
"github.com/alcionai/clues" "github.com/alcionai/clues"
@ -14,6 +15,8 @@ import (
"github.com/alcionai/corso/src/cli/utils/testdata" "github.com/alcionai/corso/src/cli/utils/testdata"
"github.com/alcionai/corso/src/internal/common/idname" "github.com/alcionai/corso/src/internal/common/idname"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/version"
dtd "github.com/alcionai/corso/src/pkg/backup/details/testdata"
"github.com/alcionai/corso/src/pkg/selectors" "github.com/alcionai/corso/src/pkg/selectors"
) )
@ -256,18 +259,26 @@ func (suite *SharePointUnitSuite) TestSharePointBackupDetailsSelectors() {
ctx, flush := tester.NewContext() ctx, flush := tester.NewContext()
defer flush() defer flush()
for _, test := range testdata.SharePointOptionDetailLookups { for v := 0; v <= version.Backup; v++ {
suite.Run(test.Name, func() { suite.Run(fmt.Sprintf("version%d", v), func() {
t := suite.T() for _, test := range testdata.SharePointOptionDetailLookups {
suite.Run(test.Name, func() {
t := suite.T()
output, err := runDetailsSharePointCmd( bg := testdata.VersionedBackupGetter{
ctx, Details: dtd.GetDetailsSetForVersion(t, v),
test.BackupGetter, }
"backup-ID",
test.Opts, output, err := runDetailsSharePointCmd(
false) ctx,
assert.NoError(t, err, clues.ToCore(err)) bg,
assert.ElementsMatch(t, test.Expected, output.Entries) "backup-ID",
test.Opts(t, v),
false)
assert.NoError(t, err, clues.ToCore(err))
assert.ElementsMatch(t, test.Expected(t, v), output.Entries)
})
}
}) })
} }
} }
@ -284,7 +295,7 @@ func (suite *SharePointUnitSuite) TestSharePointBackupDetailsSelectorsBadFormats
ctx, ctx,
test.BackupGetter, test.BackupGetter,
"backup-ID", "backup-ID",
test.Opts, test.Opts(t, version.Backup),
false) false)
assert.Error(t, err, clues.ToCore(err)) assert.Error(t, err, clues.ToCore(err))
assert.Empty(t, output) assert.Empty(t, output)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
package selectors_test package selectors_test
import ( import (
"fmt"
"testing" "testing"
"time" "time"
@ -9,9 +10,11 @@ import (
"github.com/alcionai/corso/src/internal/common/dttm" "github.com/alcionai/corso/src/internal/common/dttm"
"github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/version"
"github.com/alcionai/corso/src/pkg/backup/details" "github.com/alcionai/corso/src/pkg/backup/details"
"github.com/alcionai/corso/src/pkg/backup/details/testdata" "github.com/alcionai/corso/src/pkg/backup/details/testdata"
"github.com/alcionai/corso/src/pkg/fault" "github.com/alcionai/corso/src/pkg/fault"
"github.com/alcionai/corso/src/pkg/path"
"github.com/alcionai/corso/src/pkg/selectors" "github.com/alcionai/corso/src/pkg/selectors"
) )
@ -27,25 +30,31 @@ func (suite *SelectorReduceSuite) TestReduce() {
ctx, flush := tester.NewContext() ctx, flush := tester.NewContext()
defer flush() defer flush()
allDetails := testdata.GetDetailsSet()
table := []struct { table := []struct {
name string name string
selFunc func() selectors.Reducer selFunc func(t *testing.T, wantVersion int) selectors.Reducer
expected []details.Entry expected func(t *testing.T, wantVersion int) []details.Entry
}{ }{
{ {
name: "ExchangeAllMail", name: "ExchangeAllMail",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.Mails(selectors.Any(), selectors.Any())) sel.Include(sel.Mails(selectors.Any(), selectors.Any()))
return sel return sel
}, },
expected: testdata.ExchangeEmailItems, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
-1)
},
}, },
{ {
name: "ExchangeMailFolderPrefixMatch", name: "ExchangeMailFolderPrefixMatch",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.MailFolders( sel.Include(sel.MailFolders(
[]string{testdata.ExchangeEmailInboxPath.FolderLocation()}, []string{testdata.ExchangeEmailInboxPath.FolderLocation()},
@ -53,48 +62,79 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: testdata.ExchangeEmailItems, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
-1)
},
}, },
{ {
name: "ExchangeMailSubject", name: "ExchangeMailSubject",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Filter(sel.MailSubject("foo")) sel.Filter(sel.MailSubject("foo"))
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeMailSubjectExcludeItem", name: "ExchangeMailSubjectExcludeItem",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
deets := testdata.GetDeetsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion)
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Filter(sel.MailSender("a-person")) sel.Filter(sel.MailSender("a-person"))
sel.Exclude(sel.Mails( sel.Exclude(sel.Mails(
selectors.Any(), selectors.Any(),
[]string{testdata.ExchangeEmailItemPath2.RR.ShortRef()}, []string{deets[1].ShortRef},
)) ))
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeMailSender", name: "ExchangeMailSender",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Filter(sel.MailSender("a-person")) sel.Filter(sel.MailSender("a-person"))
return sel return sel
}, },
expected: []details.Entry{ expected: func(t *testing.T, wantVersion int) []details.Entry {
testdata.ExchangeEmailItems[0], return testdata.GetItemsForVersion(
testdata.ExchangeEmailItems[1], t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0, 1)
}, },
}, },
{ {
name: "ExchangeMailReceivedTime", name: "ExchangeMailReceivedTime",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Filter(sel.MailReceivedBefore( sel.Filter(sel.MailReceivedBefore(
dttm.Format(testdata.Time1.Add(time.Second)), dttm.Format(testdata.Time1.Add(time.Second)),
@ -102,11 +142,18 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeMailID", name: "ExchangeMailID",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.Mails( sel.Include(sel.Mails(
selectors.Any(), selectors.Any(),
@ -115,24 +162,44 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeMailShortRef", name: "ExchangeMailShortRef",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
deets := testdata.GetDeetsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion)
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.Mails( sel.Include(sel.Mails(
selectors.Any(), selectors.Any(),
[]string{testdata.ExchangeEmailItemPath1.RR.ShortRef()}, []string{deets[0].ShortRef},
)) ))
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeAllEventsAndMailWithSubject", name: "ExchangeAllEventsAndMailWithSubject",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.Events( sel.Include(sel.Events(
selectors.Any(), selectors.Any(),
@ -142,39 +209,62 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeEventsAndMailWithSubject", name: "ExchangeEventsAndMailWithSubject",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Filter(sel.EventSubject("foo")) sel.Filter(sel.EventSubject("foo"))
sel.Filter(sel.MailSubject("foo")) sel.Filter(sel.MailSubject("foo"))
return sel return sel
}, },
expected: []details.Entry{}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return []details.Entry{}
},
}, },
{ {
name: "ExchangeAll", name: "ExchangeAll",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.AllData()) sel.Include(sel.AllData())
return sel return sel
}, },
expected: append( expected: func(t *testing.T, wantVersion int) []details.Entry {
append( return append(
append( append(
[]details.Entry{}, testdata.GetItemsForVersion(
testdata.ExchangeEmailItems...), t,
testdata.ExchangeContactsItems...), path.ExchangeService,
testdata.ExchangeEventsItems..., path.EmailCategory,
), wantVersion,
-1),
testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EventsCategory,
wantVersion,
-1)...),
testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.ContactsCategory,
wantVersion,
-1)...)
},
}, },
{ {
name: "ExchangeMailByFolder", name: "ExchangeMailByFolder",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.MailFolders( sel.Include(sel.MailFolders(
[]string{testdata.ExchangeEmailBasePath.FolderLocation()}, []string{testdata.ExchangeEmailBasePath.FolderLocation()},
@ -182,14 +272,21 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
// TODO (keepers): all folders are treated as prefix-matches at this time. // TODO (keepers): all folders are treated as prefix-matches at this time.
// so this test actually does nothing different. In the future, we'll // so this test actually does nothing different. In the future, we'll
// need to amend the non-prefix folder tests to expect non-prefix matches. // need to amend the non-prefix folder tests to expect non-prefix matches.
{ {
name: "ExchangeMailByFolderPrefix", name: "ExchangeMailByFolderPrefix",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.MailFolders( sel.Include(sel.MailFolders(
[]string{testdata.ExchangeEmailBasePath.FolderLocation()}, []string{testdata.ExchangeEmailBasePath.FolderLocation()},
@ -198,11 +295,18 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEmailItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeMailByFolderRoot", name: "ExchangeMailByFolderRoot",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.MailFolders( sel.Include(sel.MailFolders(
[]string{testdata.ExchangeEmailInboxPath.FolderLocation()}, []string{testdata.ExchangeEmailInboxPath.FolderLocation()},
@ -210,11 +314,18 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: testdata.ExchangeEmailItems, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EmailCategory,
wantVersion,
-1)
},
}, },
{ {
name: "ExchangeContactByFolder", name: "ExchangeContactByFolder",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.ContactFolders( sel.Include(sel.ContactFolders(
[]string{testdata.ExchangeContactsBasePath.FolderLocation()}, []string{testdata.ExchangeContactsBasePath.FolderLocation()},
@ -222,11 +333,18 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeContactsItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.ContactsCategory,
wantVersion,
0)
},
}, },
{ {
name: "ExchangeContactByFolderRoot", name: "ExchangeContactByFolderRoot",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.ContactFolders( sel.Include(sel.ContactFolders(
[]string{testdata.ExchangeContactsRootPath.FolderLocation()}, []string{testdata.ExchangeContactsRootPath.FolderLocation()},
@ -234,12 +352,19 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: testdata.ExchangeContactsItems, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.ContactsCategory,
wantVersion,
-1)
},
}, },
{ {
name: "ExchangeEventsByFolder", name: "ExchangeEventsByFolder",
selFunc: func() selectors.Reducer { selFunc: func(t *testing.T, wantVersion int) selectors.Reducer {
sel := selectors.NewExchangeRestore(selectors.Any()) sel := selectors.NewExchangeRestore(selectors.Any())
sel.Include(sel.EventCalendars( sel.Include(sel.EventCalendars(
[]string{testdata.ExchangeEventsBasePath.FolderLocation()}, []string{testdata.ExchangeEventsBasePath.FolderLocation()},
@ -247,16 +372,28 @@ func (suite *SelectorReduceSuite) TestReduce() {
return sel return sel
}, },
expected: []details.Entry{testdata.ExchangeEventsItems[0]}, expected: func(t *testing.T, wantVersion int) []details.Entry {
return testdata.GetItemsForVersion(
t,
path.ExchangeService,
path.EventsCategory,
wantVersion,
0)
},
}, },
} }
for _, test := range table { for v := 0; v <= version.Backup; v++ {
suite.Run(test.name, func() { suite.Run(fmt.Sprintf("version%d", v), func() {
t := suite.T() for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
output := test.selFunc().Reduce(ctx, allDetails, fault.New(true)) allDetails := testdata.GetDetailsSetForVersion(t, v)
assert.ElementsMatch(t, test.expected, output.Entries) output := test.selFunc(t, v).Reduce(ctx, allDetails, fault.New(true))
assert.ElementsMatch(t, test.expected(t, v), output.Entries)
})
}
}) })
} }
} }