corso/src/pkg/control/restore_test.go
2023-10-18 15:26:54 +05:30

166 lines
4.7 KiB
Go

package control_test
import (
"fmt"
"testing"
"github.com/alcionai/clues"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"github.com/alcionai/corso/src/internal/common/dttm"
"github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/pkg/control"
"github.com/alcionai/corso/src/pkg/path"
)
type RestoreUnitSuite struct {
tester.Suite
}
func TestRestoreUnitSuite(t *testing.T) {
suite.Run(t, &RestoreUnitSuite{Suite: tester.NewUnitSuite(t)})
}
func (suite *RestoreUnitSuite) TestEnsureRestoreConfigDefaults() {
table := []struct {
name string
input control.RestoreConfig
expect control.RestoreConfig
}{
{
name: "populated",
input: control.RestoreConfig{
OnCollision: control.Copy,
ProtectedResource: "batman",
Location: "badman",
Drive: "hatman",
},
expect: control.RestoreConfig{
OnCollision: control.Copy,
ProtectedResource: "batman",
Location: "badman",
Drive: "hatman",
},
},
{
name: "unpopulated",
input: control.RestoreConfig{
OnCollision: control.Unknown,
ProtectedResource: "",
Location: "",
Drive: "",
},
expect: control.RestoreConfig{
OnCollision: control.Skip,
ProtectedResource: "",
Location: "",
Drive: "",
},
},
{
name: "populated, but modified",
input: control.RestoreConfig{
OnCollision: control.CollisionPolicy("batman"),
ProtectedResource: "",
Location: "/",
Drive: "",
},
expect: control.RestoreConfig{
OnCollision: control.Skip,
ProtectedResource: "",
Location: "",
Drive: "",
},
},
{
name: "populated with slash prefix, then modified",
input: control.RestoreConfig{
OnCollision: control.CollisionPolicy("batman"),
ProtectedResource: "",
Location: "/smarfs",
Drive: "",
},
expect: control.RestoreConfig{
OnCollision: control.Skip,
ProtectedResource: "",
Location: "smarfs",
Drive: "",
},
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
ctx, flush := tester.NewContext(t)
defer flush()
result := control.EnsureRestoreConfigDefaults(ctx, test.input)
assert.Equal(t, test.expect, result)
})
}
}
func (suite *RestoreUnitSuite) TestRestoreConfig_piiHandling() {
p, err := path.Build("tid", "ro", path.ExchangeService, path.EmailCategory, true, "foo", "bar", "baz")
require.NoError(suite.T(), err, clues.ToCore(err))
cdrc := control.DefaultRestoreConfig(dttm.HumanReadable)
table := []struct {
name string
rc control.RestoreConfig
expectSafe string
expectPlain string
}{
{
name: "empty",
expectSafe: `{"onCollision":"","protectedResource":"","SubService":{"ID":"","Type":0}` +
`,"location":"","drive":"","includePermissions":false}`,
expectPlain: `{"onCollision":"","protectedResource":"","SubService":{"ID":"","Type":0}` +
`,"location":"","drive":"","includePermissions":false}`,
},
{
name: "defaults",
rc: cdrc,
expectSafe: `{"onCollision":"skip","protectedResource":"","SubService":{"ID":"","Type":0}` +
`,"location":"***","drive":"","includePermissions":false}`,
expectPlain: `{"onCollision":"skip","protectedResource":"","SubService":{"ID":"","Type":0},"location":"` +
cdrc.Location + `","drive":"","includePermissions":false}`,
},
{
name: "populated",
rc: control.RestoreConfig{
OnCollision: control.Copy,
ProtectedResource: "snoob",
Location: p.String(),
Drive: "somedriveid",
IncludePermissions: true,
},
expectSafe: `{"onCollision":"copy","protectedResource":"***","SubService":{"ID":"","Type":0}` +
`,"location":"***/exchange/***/email/***/***/***",` +
`"drive":"***","includePermissions":true}`,
expectPlain: `{"onCollision":"copy","protectedResource":"snoob","SubService":{"ID":"","Type":0}` +
`,"location":"tid/exchange/ro/email/foo/bar/baz",` +
`"drive":"somedriveid","includePermissions":true}`,
},
}
for _, test := range table {
suite.Run(test.name, func() {
t := suite.T()
clues.SetHasher(clues.HashCfg{HashAlg: clues.Flatmask})
assert.Equal(t, test.expectSafe, test.rc.Conceal(), "conceal")
assert.Equal(t, test.expectPlain, test.rc.String(), "string")
assert.Equal(t, test.expectSafe, fmt.Sprintf("%s", test.rc), "fmt %%s")
assert.Equal(t, test.expectSafe, fmt.Sprintf("%+v", test.rc), "fmt %%+v")
assert.Equal(t, test.expectPlain, test.rc.PlainString(), "plain")
clues.SetHasher(clues.NoHash())
})
}
}