corso/src/cli/backup/sharepoint_test.go
ryanfkeepers 2eaeaf1f04 Wrap all assert/require error assertion funcs
Since structured error data from clues is not added
to error message logging from assert and require,
we're slicing out data that is valuable to debugging.
This adds a package in tester which wraps the error
assertion funcs so that structured error data is
appended to all failure outputs.
2023-02-23 15:25:27 -07:00

240 lines
5.8 KiB
Go

package backup
import (
"testing"
"github.com/spf13/cobra"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"github.com/alcionai/corso/src/cli/utils"
"github.com/alcionai/corso/src/cli/utils/testdata"
"github.com/alcionai/corso/src/internal/connector"
"github.com/alcionai/corso/src/internal/tester"
"github.com/alcionai/corso/src/internal/tester/aw"
"github.com/alcionai/corso/src/pkg/selectors"
)
type SharePointSuite struct {
suite.Suite
}
func TestSharePointSuite(t *testing.T) {
suite.Run(t, new(SharePointSuite))
}
func (suite *SharePointSuite) TestAddSharePointCommands() {
expectUse := sharePointServiceCommand
table := []struct {
name string
use string
expectUse string
expectShort string
expectRunE func(*cobra.Command, []string) error
}{
{
"create sharepoint", createCommand, expectUse + " " + sharePointServiceCommandCreateUseSuffix,
sharePointCreateCmd().Short, createSharePointCmd,
},
{
"list sharepoint", listCommand, expectUse,
sharePointListCmd().Short, listSharePointCmd,
},
{
"details sharepoint", detailsCommand, expectUse + " " + sharePointServiceCommandDetailsUseSuffix,
sharePointDetailsCmd().Short, detailsSharePointCmd,
},
{
"delete sharepoint", deleteCommand, expectUse + " " + sharePointServiceCommandDeleteUseSuffix,
sharePointDeleteCmd().Short, deleteSharePointCmd,
},
}
for _, test := range table {
suite.T().Run(test.name, func(t *testing.T) {
cmd := &cobra.Command{Use: test.use}
c := addSharePointCommands(cmd)
require.NotNil(t, c)
cmds := cmd.Commands()
require.Len(t, cmds, 1)
child := cmds[0]
assert.Equal(t, test.expectUse, child.Use)
assert.Equal(t, test.expectShort, child.Short)
tester.AreSameFunc(t, test.expectRunE, child.RunE)
})
}
}
func (suite *SharePointSuite) TestValidateSharePointBackupCreateFlags() {
table := []struct {
name string
site []string
weburl []string
expect assert.ErrorAssertionFunc
}{
{
name: "no sites or urls",
expect: aw.Err,
},
{
name: "sites",
site: []string{"smarf"},
expect: aw.NoErr,
},
{
name: "urls",
weburl: []string{"fnord"},
expect: aw.NoErr,
},
{
name: "both",
site: []string{"smarf"},
weburl: []string{"fnord"},
expect: aw.NoErr,
},
}
for _, test := range table {
suite.T().Run(test.name, func(t *testing.T) {
test.expect(t, validateSharePointBackupCreateFlags(test.site, test.weburl, nil))
})
}
}
func (suite *SharePointSuite) TestSharePointBackupCreateSelectors() {
comboString := []string{"id_1", "id_2"}
gc := &connector.GraphConnector{
Sites: map[string]string{
"url_1": "id_1",
"url_2": "id_2",
},
}
table := []struct {
name string
site []string
weburl []string
data []string
expect []string
expectScopesLen int
}{
{
name: "no sites or urls",
expect: selectors.None(),
},
{
name: "empty sites and urls",
site: []string{},
weburl: []string{},
expect: selectors.None(),
},
{
name: "site wildcard",
site: []string{utils.Wildcard},
expect: selectors.Any(),
expectScopesLen: 2,
},
{
name: "url wildcard",
weburl: []string{utils.Wildcard},
expect: selectors.Any(),
expectScopesLen: 2,
},
{
name: "sites",
site: []string{"id_1", "id_2"},
expect: []string{"id_1", "id_2"},
expectScopesLen: 2,
},
{
name: "urls",
weburl: []string{"url_1", "url_2"},
expect: []string{"id_1", "id_2"},
expectScopesLen: 2,
},
{
name: "mix sites and urls",
site: []string{"id_1"},
weburl: []string{"url_2"},
expect: []string{"id_1", "id_2"},
expectScopesLen: 2,
},
{
name: "duplicate sites and urls",
site: []string{"id_1", "id_2"},
weburl: []string{"url_1", "url_2"},
expect: comboString,
expectScopesLen: 2,
},
{
name: "unnecessary site wildcard",
site: []string{"id_1", utils.Wildcard},
weburl: []string{"url_1", "url_2"},
expect: selectors.Any(),
expectScopesLen: 2,
},
{
name: "unnecessary url wildcard",
site: comboString,
weburl: []string{"url_1", utils.Wildcard},
expect: selectors.Any(),
expectScopesLen: 2,
},
{
name: "Pages",
site: comboString,
data: []string{dataPages},
expect: comboString,
expectScopesLen: 1,
},
}
for _, test := range table {
suite.T().Run(test.name, func(t *testing.T) {
ctx, flush := tester.NewContext()
defer flush()
sel, err := sharePointBackupCreateSelectors(ctx, test.site, test.weburl, test.data, gc)
aw.MustNoErr(t, err)
assert.ElementsMatch(t, test.expect, sel.DiscreteResourceOwners())
})
}
}
func (suite *SharePointSuite) TestSharePointBackupDetailsSelectors() {
ctx, flush := tester.NewContext()
defer flush()
for _, test := range testdata.SharePointOptionDetailLookups {
suite.T().Run(test.Name, func(t *testing.T) {
output, err := runDetailsSharePointCmd(
ctx,
test.BackupGetter,
"backup-ID",
test.Opts)
aw.NoErr(t, err)
assert.ElementsMatch(t, test.Expected, output.Entries)
})
}
}
func (suite *SharePointSuite) TestSharePointBackupDetailsSelectorsBadFormats() {
ctx, flush := tester.NewContext()
defer flush()
for _, test := range testdata.BadSharePointOptionsFormats {
suite.T().Run(test.Name, func(t *testing.T) {
output, err := runDetailsSharePointCmd(
ctx,
test.BackupGetter,
"backup-ID",
test.Opts)
aw.Err(t, err)
assert.Empty(t, output)
})
}
}