add the event-calendar flag to the cli (#712)

## Description

Adds the event-calendar flag to the cli to prepare
for selectors including the calendar as the events'
"folder" structure.

## Type of change

Please check the type of change your PR introduces:
- [x] 🌻 Feature

## Issue(s)

#501 

## Test Plan

- [ ] 💪 Manual
- [x]  Unit test
- [ ] 💚 E2E
This commit is contained in:
Keepers 2022-08-31 17:18:15 -06:00 committed by GitHub
parent dcbfed15df
commit f0edf7b081
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 175 additions and 73 deletions

View File

@ -1,6 +1,8 @@
package backup package backup
import ( import (
"fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"
@ -33,6 +35,7 @@ var (
emailSender string emailSender string
emailSubject string emailSubject string
event []string event []string
eventCalendar []string
user []string user []string
) )
@ -99,13 +102,19 @@ func addExchangeCommands(parent *cobra.Command) *cobra.Command {
&emailFolder, &emailFolder,
"email-folder", "email-folder",
nil, nil,
"Select backup details by email folder ID; accepts "+utils.Wildcard+" to select all email folderss") "Select backup details by email folder ID; accepts "+utils.Wildcard+" to select all email folders")
fs.StringSliceVar( fs.StringSliceVar(
&event, &event,
"event", "event",
nil, nil,
"Select backup details by event ID; accepts "+utils.Wildcard+" to select all events", "Select backup details by event ID; accepts "+utils.Wildcard+" to select all events",
) )
fs.StringSliceVar(
&eventCalendar,
"event-calendar",
nil,
"Select backup details by event calendar ID; accepts "+utils.Wildcard+" to select all events",
)
fs.StringSliceVar( fs.StringSliceVar(
&user, &user,
"user", "user",
@ -317,6 +326,7 @@ func detailsExchangeCmd(cmd *cobra.Command, args []string) error {
email, email,
emailFolder, emailFolder,
event, event,
eventCalendar,
user, user,
backupID, backupID,
); err != nil { ); err != nil {
@ -348,6 +358,7 @@ func detailsExchangeCmd(cmd *cobra.Command, args []string) error {
email, email,
emailFolder, emailFolder,
event, event,
eventCalendar,
user) user)
filterExchangeBackupDetailInfoSelectors( filterExchangeBackupDetailInfoSelectors(
sel, sel,
@ -374,19 +385,19 @@ func detailsExchangeCmd(cmd *cobra.Command, args []string) error {
// builds the data-selector inclusions for `backup details exchange` // builds the data-selector inclusions for `backup details exchange`
func includeExchangeBackupDetailDataSelectors( func includeExchangeBackupDetailDataSelectors(
sel *selectors.ExchangeRestore, sel *selectors.ExchangeRestore,
contacts, contactFolders, emails, emailFolders, events, users []string, contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
) { ) {
lc, lcf := len(contacts), len(contactFolders) lc, lcf := len(contacts), len(contactFolders)
le, lef := len(emails), len(emailFolders) le, lef := len(emails), len(emailFolders)
lev := len(events) lev, lec := len(events), len(eventCalendars)
lu := len(users) lu := len(users)
if lc+lcf+le+lef+lev+lu == 0 { if lc+lcf+le+lef+lev+lec+lu == 0 {
return return
} }
// if only users are provided, we only get one selector // if only users are provided, we only get one selector
if lu > 0 && lc+lcf+le+lef+lev == 0 { if lu > 0 && lc+lcf+le+lef+lev+lec == 0 {
sel.Include(sel.Users(users)) sel.Include(sel.Users(users))
return return
} }
@ -394,7 +405,7 @@ func includeExchangeBackupDetailDataSelectors(
// otherwise, add selectors for each type of data // otherwise, add selectors for each type of data
includeExchangeContacts(sel, users, contactFolders, contacts) includeExchangeContacts(sel, users, contactFolders, contacts)
includeExchangeEmails(sel, users, emailFolders, email) includeExchangeEmails(sel, users, emailFolders, email)
includeExchangeEvents(sel, users, events) includeExchangeEvents(sel, users, eventCalendars, events)
} }
func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) { func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) {
@ -402,11 +413,11 @@ func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolde
return return
} }
if len(contacts) > 0 { if len(contacts) == 0 {
sel.Include(sel.Contacts(users, contactFolders, contacts)) contacts = selectors.Any()
} else {
sel.Include(sel.ContactFolders(users, contactFolders))
} }
sel.Include(sel.Contacts(users, contactFolders, contacts))
} }
func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) { func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) {
@ -414,18 +425,24 @@ func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders,
return return
} }
if len(emails) > 0 { if len(emails) == 0 {
sel.Include(sel.Mails(users, emailFolders, emails)) emails = selectors.Any()
} else {
sel.Include(sel.MailFolders(users, emailFolders))
} }
sel.Include(sel.Mails(users, emailFolders, emails))
} }
func includeExchangeEvents(sel *selectors.ExchangeRestore, users, events []string) { func includeExchangeEvents(sel *selectors.ExchangeRestore, users, eventCalendars, events []string) {
if len(events) == 0 { if len(eventCalendars) == 0 {
return return
} }
if len(events) == 0 {
events = selectors.Any()
}
fmt.Println("logging eventCalendars so the linter sees it 'used'. Will remove asap", eventCalendars)
sel.Include(sel.Events(users, events)) sel.Include(sel.Events(users, events))
} }
@ -474,7 +491,7 @@ func filterExchangeInfoMailSubject(sel *selectors.ExchangeRestore, subject strin
// checks all flags for correctness and interdependencies // checks all flags for correctness and interdependencies
func validateExchangeBackupDetailFlags( func validateExchangeBackupDetailFlags(
contacts, contactFolders, emails, emailFolders, events, users []string, contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
backupID string, backupID string,
) error { ) error {
if len(backupID) == 0 { if len(backupID) == 0 {
@ -484,9 +501,9 @@ func validateExchangeBackupDetailFlags(
lu := len(users) lu := len(users)
lc, lcf := len(contacts), len(contactFolders) lc, lcf := len(contacts), len(contactFolders)
le, lef := len(emails), len(emailFolders) le, lef := len(emails), len(emailFolders)
lev := len(events) lev, lec := len(events), len(eventCalendars)
if lu+lc+lcf+le+lef+lev == 0 { if lu+lc+lcf+le+lef+lev+lec == 0 {
return nil return nil
} }
@ -501,7 +518,12 @@ func validateExchangeBackupDetailFlags(
if le > 0 && lef == 0 { if le > 0 && lef == 0 {
return errors.New( return errors.New(
"one or more --email-folder ids or the wildcard --email-folder * must be included to specify a --email") "one or more --email-folder ids or the wildcard --email-folder * must be included to specify an --email")
}
if lev > 0 && lec == 0 {
return errors.New(
"one or more --event-calendar ids or the wildcard --event-calendar * must be included to specify an --event")
} }
return nil return nil

View File

@ -220,10 +220,10 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
stub := []string{"id-stub"} stub := []string{"id-stub"}
table := []struct { table := []struct {
name string name string
contacts, contactFolders, emails, emailFolders, events, users []string contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
backupID string backupID string
expect assert.ErrorAssertionFunc expect assert.ErrorAssertionFunc
}{ }{
{ {
name: "only backupid", name: "only backupid",
@ -238,6 +238,7 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expect: assert.NoError, expect: assert.NoError,
}, },
@ -252,6 +253,7 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expect: assert.Error, expect: assert.Error,
}, },
@ -263,17 +265,19 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
expect: assert.Error, expect: assert.Error,
}, },
{ {
name: "no contact folders", name: "no contact folders",
backupID: "bid", backupID: "bid",
contacts: stub, contacts: stub,
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
users: stub, eventCalendars: stub,
expect: assert.Error, users: stub,
expect: assert.Error,
}, },
{ {
name: "no email folders", name: "no email folders",
@ -282,6 +286,17 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
contactFolders: stub, contactFolders: stub,
emails: stub, emails: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub,
expect: assert.Error,
},
{
name: "no event calendars",
backupID: "bid",
contacts: stub,
contactFolders: stub,
emails: stub,
events: stub,
users: stub, users: stub,
expect: assert.Error, expect: assert.Error,
}, },
@ -294,6 +309,7 @@ func (suite *ExchangeSuite) TestValidateBackupDetailFlags() {
test.emails, test.emails,
test.emailFolders, test.emailFolders,
test.events, test.events,
test.eventCalendars,
test.users, test.users,
test.backupID, test.backupID,
)) ))
@ -306,9 +322,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
a := []string{utils.Wildcard} a := []string{utils.Wildcard}
table := []struct { table := []struct {
name string name string
contacts, contactFolders, emails, emailFolders, events, users []string contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
expectIncludeLen int expectIncludeLen int
}{ }{
{ {
name: "no selectors", name: "no selectors",
@ -336,6 +352,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
emails: a, emails: a,
emailFolders: a, emailFolders: a,
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 3, expectIncludeLen: 3,
}, },
@ -343,8 +360,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
name: "any users, any folders", name: "any users, any folders",
contactFolders: a, contactFolders: a,
emailFolders: a, emailFolders: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 2, expectIncludeLen: 3,
}, },
{ {
name: "single user, single of each data", name: "single user, single of each data",
@ -353,6 +371,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 3, expectIncludeLen: 3,
}, },
@ -360,8 +379,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
name: "single user, single of each folder", name: "single user, single of each folder",
contactFolders: stub, contactFolders: stub,
emailFolders: stub, emailFolders: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 2, expectIncludeLen: 3,
}, },
{ {
name: "any users, contacts", name: "any users, contacts",
@ -394,12 +414,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
{ {
name: "any users, events", name: "any users, events",
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 1, expectIncludeLen: 1,
}, },
{ {
name: "single user, events", name: "single user, events",
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 1, expectIncludeLen: 1,
}, },
@ -426,6 +448,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
emails: a, emails: a,
emailFolders: a, emailFolders: a,
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -434,6 +457,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -442,6 +466,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
contacts: a, contacts: a,
contactFolders: a, contactFolders: a,
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -450,12 +475,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
contacts: stub, contacts: stub,
contactFolders: stub, contactFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
{ {
name: "many users, events", name: "many users, events",
events: []string{"foo", "bar"}, events: []string{"foo", "bar"},
eventCalendars: []string{"baz", "qux"},
users: []string{"fnord", "smarf"}, users: []string{"fnord", "smarf"},
expectIncludeLen: 1, expectIncludeLen: 1,
}, },
@ -464,6 +491,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
contacts: []string{"foo", "bar"}, contacts: []string{"foo", "bar"},
contactFolders: []string{"foo", "bar"}, contactFolders: []string{"foo", "bar"},
events: []string{"foo", "bar"}, events: []string{"foo", "bar"},
eventCalendars: []string{"foo", "bar"},
users: []string{"fnord", "smarf"}, users: []string{"fnord", "smarf"},
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -478,6 +506,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
test.emails, test.emails,
test.emailFolders, test.emailFolders,
test.events, test.events,
test.eventCalendars,
test.users) test.users)
assert.Equal(t, test.expectIncludeLen, len(sel.Includes)) assert.Equal(t, test.expectIncludeLen, len(sel.Includes))
}) })

View File

@ -1,6 +1,8 @@
package restore package restore
import ( import (
"fmt"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"
@ -25,6 +27,7 @@ var (
emailSender string emailSender string
emailSubject string emailSubject string
event []string event []string
eventCalendar []string
user []string user []string
) )
@ -61,12 +64,18 @@ func addExchangeCommands(parent *cobra.Command) *cobra.Command {
"Restore all emails by folder ID; accepts "+utils.Wildcard+" to select all email folders", "Restore all emails by folder ID; accepts "+utils.Wildcard+" to select all email folders",
) )
fs.StringSliceVar(&event, "event", nil, "Restore events by ID; accepts "+utils.Wildcard+" to select all events") fs.StringSliceVar(&event, "event", nil, "Restore events by ID; accepts "+utils.Wildcard+" to select all events")
fs.StringSliceVar(
&eventCalendar,
"event-calendar",
nil,
"Restore events by calendar ID; accepts "+utils.Wildcard+" to select all event calendars")
fs.StringSliceVar(&user, "user", nil, "Restore all data by user ID; accepts "+utils.Wildcard+" to select all users") fs.StringSliceVar(&user, "user", nil, "Restore all data by user ID; accepts "+utils.Wildcard+" to select all users")
// TODO: reveal these flags when their production is supported in GC // TODO: reveal these flags when their production is supported in GC
cobra.CheckErr(fs.MarkHidden("contact")) cobra.CheckErr(fs.MarkHidden("contact"))
cobra.CheckErr(fs.MarkHidden("contact-folder")) cobra.CheckErr(fs.MarkHidden("contact-folder"))
cobra.CheckErr(fs.MarkHidden("event")) cobra.CheckErr(fs.MarkHidden("event"))
cobra.CheckErr(fs.MarkHidden("event-calendar"))
// exchange-info flags // exchange-info flags
fs.StringVar( fs.StringVar(
@ -117,6 +126,7 @@ func restoreExchangeCmd(cmd *cobra.Command, args []string) error {
email, email,
emailFolder, emailFolder,
event, event,
eventCalendar,
user, user,
backupID, backupID,
); err != nil { ); err != nil {
@ -143,6 +153,7 @@ func restoreExchangeCmd(cmd *cobra.Command, args []string) error {
email, email,
emailFolder, emailFolder,
event, event,
eventCalendar,
user) user)
filterExchangeRestoreInfoSelectors( filterExchangeRestoreInfoSelectors(
sel, sel,
@ -173,19 +184,19 @@ func restoreExchangeCmd(cmd *cobra.Command, args []string) error {
// builds the data-selector inclusions for `restore exchange` // builds the data-selector inclusions for `restore exchange`
func includeExchangeRestoreDataSelectors( func includeExchangeRestoreDataSelectors(
sel *selectors.ExchangeRestore, sel *selectors.ExchangeRestore,
contacts, contactFolders, emails, emailFolders, events, users []string, contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
) { ) {
lc, lcf := len(contacts), len(contactFolders) lc, lcf := len(contacts), len(contactFolders)
le, lef := len(emails), len(emailFolders) le, lef := len(emails), len(emailFolders)
lev := len(events) lev, lec := len(events), len(eventCalendars)
lu := len(users) lu := len(users)
if lc+lcf+le+lef+lev+lu == 0 { if lc+lcf+le+lef+lev+lec+lu == 0 {
return return
} }
// if only users are provided, we only get one selector // if only users are provided, we only get one selector
if lu > 0 && lc+lcf+le+lef+lev == 0 { if lu > 0 && lc+lcf+le+lef+lev+lec == 0 {
sel.Include(sel.Users(users)) sel.Include(sel.Users(users))
return return
} }
@ -193,7 +204,7 @@ func includeExchangeRestoreDataSelectors(
// otherwise, add selectors for each type of data // otherwise, add selectors for each type of data
includeExchangeContacts(sel, users, contactFolders, contacts) includeExchangeContacts(sel, users, contactFolders, contacts)
includeExchangeEmails(sel, users, emailFolders, email) includeExchangeEmails(sel, users, emailFolders, email)
includeExchangeEvents(sel, users, events) includeExchangeEvents(sel, users, eventCalendars, events)
} }
func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) { func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolders, contacts []string) {
@ -201,11 +212,11 @@ func includeExchangeContacts(sel *selectors.ExchangeRestore, users, contactFolde
return return
} }
if len(contacts) > 0 { if len(contacts) == 0 {
sel.Include(sel.Contacts(users, contactFolders, contacts)) contacts = selectors.Any()
} else {
sel.Include(sel.ContactFolders(users, contactFolders))
} }
sel.Include(sel.Contacts(users, contactFolders, contacts))
} }
func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) { func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders, emails []string) {
@ -213,18 +224,24 @@ func includeExchangeEmails(sel *selectors.ExchangeRestore, users, emailFolders,
return return
} }
if len(emails) > 0 { if len(emails) == 0 {
sel.Include(sel.Mails(users, emailFolders, emails)) emails = selectors.Any()
} else {
sel.Include(sel.MailFolders(users, emailFolders))
} }
sel.Include(sel.Mails(users, emailFolders, emails))
} }
func includeExchangeEvents(sel *selectors.ExchangeRestore, users, events []string) { func includeExchangeEvents(sel *selectors.ExchangeRestore, users, eventCalendars, events []string) {
if len(events) == 0 { if len(eventCalendars) == 0 {
return return
} }
if len(events) == 0 {
events = selectors.Any()
}
fmt.Println("logging eventCalendars so the linter sees it 'used'. Will remove asap", eventCalendars)
sel.Include(sel.Events(users, events)) sel.Include(sel.Events(users, events))
} }
@ -273,7 +290,7 @@ func filterExchangeInfoMailSubject(sel *selectors.ExchangeRestore, subject strin
// checks all flags for correctness and interdependencies // checks all flags for correctness and interdependencies
func validateExchangeRestoreFlags( func validateExchangeRestoreFlags(
contacts, contactFolders, emails, emailFolders, events, users []string, contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string,
backupID string, backupID string,
) error { ) error {
if len(backupID) == 0 { if len(backupID) == 0 {
@ -283,10 +300,10 @@ func validateExchangeRestoreFlags(
lu := len(users) lu := len(users)
lc, lcf := len(contacts), len(contactFolders) lc, lcf := len(contacts), len(contactFolders)
le, lef := len(emails), len(emailFolders) le, lef := len(emails), len(emailFolders)
lev := len(events) lev, lec := len(events), len(eventCalendars)
// if only the backupID is populated, that's the same as --all // if only the backupID is populated, that's the same as --all
if lu+lc+lcf+le+lef+lev == 0 { if lu+lc+lcf+le+lef+lev+lec == 0 {
return nil return nil
} }
@ -301,7 +318,12 @@ func validateExchangeRestoreFlags(
if le > 0 && lef == 0 { if le > 0 && lef == 0 {
return errors.New( return errors.New(
"one or more --email-folder ids or the wildcard --email-folder * must be included to specify a --email") "one or more --email-folder ids or the wildcard --email-folder * must be included to specify an --email")
}
if lev > 0 && lec == 0 {
return errors.New(
"one or more --event-calendar ids or the wildcard --event-calendar * must be included to specify an --event")
} }
return nil return nil

View File

@ -55,10 +55,10 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
stub := []string{"id-stub"} stub := []string{"id-stub"}
table := []struct { table := []struct {
name string name string
contacts, contactFolders, emails, emailFolders, events, users []string contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
backupID string backupID string
expect assert.ErrorAssertionFunc expect assert.ErrorAssertionFunc
}{ }{
{ {
name: "only backupid", name: "only backupid",
@ -73,6 +73,7 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expect: assert.NoError, expect: assert.NoError,
}, },
@ -87,6 +88,7 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expect: assert.Error, expect: assert.Error,
}, },
@ -98,17 +100,19 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
expect: assert.Error, expect: assert.Error,
}, },
{ {
name: "no contact folders", name: "no contact folders",
backupID: "bid", backupID: "bid",
contacts: stub, contacts: stub,
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
users: stub, users: stub,
expect: assert.Error, eventCalendars: stub,
expect: assert.Error,
}, },
{ {
name: "no email folders", name: "no email folders",
@ -117,6 +121,17 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
contactFolders: stub, contactFolders: stub,
emails: stub, emails: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub,
expect: assert.Error,
},
{
name: "no event calendars",
backupID: "bid",
contacts: stub,
contactFolders: stub,
emails: stub,
events: stub,
users: stub, users: stub,
expect: assert.Error, expect: assert.Error,
}, },
@ -129,6 +144,7 @@ func (suite *ExchangeSuite) TestValidateExchangeRestoreFlags() {
test.emails, test.emails,
test.emailFolders, test.emailFolders,
test.events, test.events,
test.eventCalendars,
test.users, test.users,
test.backupID, test.backupID,
)) ))
@ -141,9 +157,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
a := []string{utils.Wildcard} a := []string{utils.Wildcard}
table := []struct { table := []struct {
name string name string
contacts, contactFolders, emails, emailFolders, events, users []string contacts, contactFolders, emails, emailFolders, events, eventCalendars, users []string
expectIncludeLen int expectIncludeLen int
}{ }{
{ {
name: "no selectors", name: "no selectors",
@ -171,6 +187,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
emails: a, emails: a,
emailFolders: a, emailFolders: a,
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 3, expectIncludeLen: 3,
}, },
@ -178,8 +195,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
name: "any users, any folders", name: "any users, any folders",
contactFolders: a, contactFolders: a,
emailFolders: a, emailFolders: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 2, expectIncludeLen: 3,
}, },
{ {
name: "single user, single of each data", name: "single user, single of each data",
@ -188,6 +206,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 3, expectIncludeLen: 3,
}, },
@ -195,8 +214,9 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
name: "single user, single of each folder", name: "single user, single of each folder",
contactFolders: stub, contactFolders: stub,
emailFolders: stub, emailFolders: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 2, expectIncludeLen: 3,
}, },
{ {
name: "any users, contacts", name: "any users, contacts",
@ -229,12 +249,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
{ {
name: "any users, events", name: "any users, events",
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 1, expectIncludeLen: 1,
}, },
{ {
name: "single user, events", name: "single user, events",
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 1, expectIncludeLen: 1,
}, },
@ -261,6 +283,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
emails: a, emails: a,
emailFolders: a, emailFolders: a,
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -269,6 +292,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
emails: stub, emails: stub,
emailFolders: stub, emailFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -277,6 +301,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
contacts: a, contacts: a,
contactFolders: a, contactFolders: a,
events: a, events: a,
eventCalendars: a,
users: a, users: a,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -285,12 +310,14 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
contacts: stub, contacts: stub,
contactFolders: stub, contactFolders: stub,
events: stub, events: stub,
eventCalendars: stub,
users: stub, users: stub,
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
{ {
name: "many users, events", name: "many users, events",
events: []string{"foo", "bar"}, events: []string{"foo", "bar"},
eventCalendars: []string{"baz", "qux"},
users: []string{"fnord", "smarf"}, users: []string{"fnord", "smarf"},
expectIncludeLen: 1, expectIncludeLen: 1,
}, },
@ -299,6 +326,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
contacts: []string{"foo", "bar"}, contacts: []string{"foo", "bar"},
contactFolders: []string{"foo", "bar"}, contactFolders: []string{"foo", "bar"},
events: []string{"foo", "bar"}, events: []string{"foo", "bar"},
eventCalendars: []string{"foo", "bar"},
users: []string{"fnord", "smarf"}, users: []string{"fnord", "smarf"},
expectIncludeLen: 2, expectIncludeLen: 2,
}, },
@ -313,6 +341,7 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
test.emails, test.emails,
test.emailFolders, test.emailFolders,
test.events, test.events,
test.eventCalendars,
test.users) test.users)
assert.Equal(t, test.expectIncludeLen, len(sel.Includes)) assert.Equal(t, test.expectIncludeLen, len(sel.Includes))
}) })