split users scope into per-type scopes (#412)
When a caller constructs an Users() exchange scope, instead of building a single scope that contains all of the provided users and all of the data beneath, follow the pattern of the other scopes and generate one scope per user-category pair.
This commit is contained in:
parent
ea3c9c035e
commit
75e8317bf9
@ -109,7 +109,7 @@ func (suite *ExchangeSuite) TestExchangeBackupCreateSelectors() {
|
|||||||
{
|
{
|
||||||
name: "any",
|
name: "any",
|
||||||
any: true,
|
any: true,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "any users, no data",
|
name: "any users, no data",
|
||||||
@ -313,17 +313,17 @@ func (suite *ExchangeSuite) TestIncludeExchangeBackupDetailDataSelectors() {
|
|||||||
{
|
{
|
||||||
name: "any users",
|
name: "any users",
|
||||||
users: any,
|
users: any,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "single user",
|
name: "single user",
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "multiple users",
|
name: "multiple users",
|
||||||
users: []string{"fnord", "smarf"},
|
users: []string{"fnord", "smarf"},
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 6,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "any users, any data",
|
name: "any users, any data",
|
||||||
|
|||||||
@ -149,17 +149,17 @@ func (suite *ExchangeSuite) TestIncludeExchangeRestoreDataSelectors() {
|
|||||||
{
|
{
|
||||||
name: "any users",
|
name: "any users",
|
||||||
users: any,
|
users: any,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "single user",
|
name: "single user",
|
||||||
users: stub,
|
users: stub,
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "multiple users",
|
name: "multiple users",
|
||||||
users: []string{"fnord", "smarf"},
|
users: []string{"fnord", "smarf"},
|
||||||
expectIncludeLen: 1,
|
expectIncludeLen: 6,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "any users, any data",
|
name: "any users, any data",
|
||||||
|
|||||||
@ -265,10 +265,11 @@ func (s *exchange) MailFolders(users, folders []string) []ExchangeScope {
|
|||||||
func (s *exchange) Users(users []string) []ExchangeScope {
|
func (s *exchange) Users(users []string) []ExchangeScope {
|
||||||
users = normalize(users)
|
users = normalize(users)
|
||||||
scopes := []ExchangeScope{}
|
scopes := []ExchangeScope{}
|
||||||
scopes = append(
|
for _, u := range users {
|
||||||
scopes,
|
scopes = append(scopes, makeExchangeUserScope(u, Group, ExchangeContactFolder, Any()))
|
||||||
makeExchangeScope(Group, ExchangeUser, users),
|
scopes = append(scopes, makeExchangeUserScope(u, Item, ExchangeEvent, Any()))
|
||||||
)
|
scopes = append(scopes, makeExchangeUserScope(u, Group, ExchangeMailFolder, Any()))
|
||||||
|
}
|
||||||
return scopes
|
return scopes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -276,15 +276,22 @@ func (suite *ExchangeSourceSuite) TestExchangeSelector_Exclude_Users() {
|
|||||||
|
|
||||||
sel.Exclude(sel.Users([]string{u1, u2}))
|
sel.Exclude(sel.Users([]string{u1, u2}))
|
||||||
scopes := sel.Excludes
|
scopes := sel.Excludes
|
||||||
require.Equal(t, 1, len(scopes))
|
require.Equal(t, 6, len(scopes))
|
||||||
|
|
||||||
scope := scopes[0]
|
for _, scope := range scopes {
|
||||||
assert.Equal(t, scope[ExchangeUser.String()], join(u1, u2))
|
assert.Contains(t, join(u1, u2), scope[ExchangeUser.String()])
|
||||||
assert.Equal(t, scope[ExchangeContact.String()], AnyTgt)
|
if scope[scopeKeyCategory] == ExchangeContactFolder.String() {
|
||||||
assert.Equal(t, scope[ExchangeContactFolder.String()], AnyTgt)
|
assert.Equal(t, scope[ExchangeContact.String()], AnyTgt)
|
||||||
assert.Equal(t, scope[ExchangeEvent.String()], AnyTgt)
|
assert.Equal(t, scope[ExchangeContactFolder.String()], AnyTgt)
|
||||||
assert.Equal(t, scope[ExchangeMail.String()], AnyTgt)
|
}
|
||||||
assert.Equal(t, scope[ExchangeMailFolder.String()], AnyTgt)
|
if scope[scopeKeyCategory] == ExchangeEvent.String() {
|
||||||
|
assert.Equal(t, scope[ExchangeEvent.String()], AnyTgt)
|
||||||
|
}
|
||||||
|
if scope[scopeKeyCategory] == ExchangeMailFolder.String() {
|
||||||
|
assert.Equal(t, scope[ExchangeMail.String()], AnyTgt)
|
||||||
|
assert.Equal(t, scope[ExchangeMailFolder.String()], AnyTgt)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *ExchangeSourceSuite) TestExchangeSelector_Include_Users() {
|
func (suite *ExchangeSourceSuite) TestExchangeSelector_Include_Users() {
|
||||||
@ -298,17 +305,22 @@ func (suite *ExchangeSourceSuite) TestExchangeSelector_Include_Users() {
|
|||||||
|
|
||||||
sel.Include(sel.Users([]string{u1, u2}))
|
sel.Include(sel.Users([]string{u1, u2}))
|
||||||
scopes := sel.Includes
|
scopes := sel.Includes
|
||||||
require.Equal(t, 1, len(scopes))
|
require.Equal(t, 6, len(scopes))
|
||||||
|
|
||||||
scope := scopes[0]
|
for _, scope := range scopes {
|
||||||
assert.Equal(t, scope[ExchangeUser.String()], join(u1, u2))
|
assert.Contains(t, join(u1, u2), scope[ExchangeUser.String()])
|
||||||
assert.Equal(t, scope[ExchangeContact.String()], AnyTgt)
|
if scope[scopeKeyCategory] == ExchangeContactFolder.String() {
|
||||||
assert.Equal(t, scope[ExchangeContactFolder.String()], AnyTgt)
|
assert.Equal(t, scope[ExchangeContact.String()], AnyTgt)
|
||||||
assert.Equal(t, scope[ExchangeEvent.String()], AnyTgt)
|
assert.Equal(t, scope[ExchangeContactFolder.String()], AnyTgt)
|
||||||
assert.Equal(t, scope[ExchangeMail.String()], AnyTgt)
|
}
|
||||||
assert.Equal(t, scope[ExchangeMailFolder.String()], AnyTgt)
|
if scope[scopeKeyCategory] == ExchangeEvent.String() {
|
||||||
|
assert.Equal(t, scope[ExchangeEvent.String()], AnyTgt)
|
||||||
assert.Equal(t, sel.Scopes()[0].Category(), ExchangeUser)
|
}
|
||||||
|
if scope[scopeKeyCategory] == ExchangeMailFolder.String() {
|
||||||
|
assert.Equal(t, scope[ExchangeMail.String()], AnyTgt)
|
||||||
|
assert.Equal(t, scope[ExchangeMailFolder.String()], AnyTgt)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *ExchangeSourceSuite) TestNewExchangeDestination() {
|
func (suite *ExchangeSourceSuite) TestNewExchangeDestination() {
|
||||||
@ -559,9 +571,14 @@ func (suite *ExchangeSourceSuite) TestExchangeScope_MatchesPath() {
|
|||||||
for _, test := range table {
|
for _, test := range table {
|
||||||
suite.T().Run(test.name, func(t *testing.T) {
|
suite.T().Run(test.name, func(t *testing.T) {
|
||||||
scopes := extendExchangeScopeValues(test.scope)
|
scopes := extendExchangeScopeValues(test.scope)
|
||||||
|
var aMatch bool
|
||||||
for _, scope := range scopes {
|
for _, scope := range scopes {
|
||||||
test.expect(t, scope.matchesPath(ExchangeMail, path))
|
if scope.matchesPath(ExchangeMail, path) {
|
||||||
|
aMatch = true
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
test.expect(t, aMatch)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user