add filtered details regression test
extends testing for filtered details results by adding a regression test that crates a folder with zero items, backs it up, and calls the repo.BackupDetails to ensure that the folder and its dirmeta files are not present.
This commit is contained in:
parent
3cd6c803af
commit
a931f40896
@ -43,3 +43,10 @@ func OrNow(t *time.Time) time.Time {
|
|||||||
|
|
||||||
return *t
|
return *t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// To makes it easy to get a pointer to ad-hoc primitives
|
||||||
|
// without needing to declare additional variables.
|
||||||
|
// ex: ptr.To("a string")
|
||||||
|
func To[T any](t T) *T {
|
||||||
|
return &t
|
||||||
|
}
|
||||||
|
|||||||
@ -272,7 +272,7 @@ func (c *Collections) Get(
|
|||||||
|
|
||||||
retry := c.source == OneDriveSource
|
retry := c.source == OneDriveSource
|
||||||
|
|
||||||
drives, err := drives(ctx, pager, retry)
|
drives, err := Drives(ctx, pager, retry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,7 +72,7 @@ func PagerForSource(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func drives(
|
func Drives(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
pager drivePager,
|
pager drivePager,
|
||||||
retry bool,
|
retry bool,
|
||||||
@ -362,7 +362,7 @@ func GetAllFolders(
|
|||||||
prefix string,
|
prefix string,
|
||||||
errs *fault.Bus,
|
errs *fault.Bus,
|
||||||
) ([]*Displayable, error) {
|
) ([]*Displayable, error) {
|
||||||
drives, err := drives(ctx, pager, true)
|
drives, err := Drives(ctx, pager, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "getting OneDrive folders")
|
return nil, errors.Wrap(err, "getting OneDrive folders")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -313,7 +313,7 @@ func (suite *OneDriveUnitSuite) TestDrives() {
|
|||||||
toReturn: test.pagerResults,
|
toReturn: test.pagerResults,
|
||||||
}
|
}
|
||||||
|
|
||||||
drives, err := drives(ctx, pager, test.retry)
|
drives, err := Drives(ctx, pager, test.retry)
|
||||||
test.expectedErr(t, err)
|
test.expectedErr(t, err)
|
||||||
|
|
||||||
assert.ElementsMatch(t, test.expectedResults, drives)
|
assert.ElementsMatch(t, test.expectedResults, drives)
|
||||||
@ -355,7 +355,7 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() {
|
|||||||
pager, err := PagerForSource(OneDriveSource, gs, suite.userID, nil)
|
pager, err := PagerForSource(OneDriveSource, gs, suite.userID, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
drives, err := drives(ctx, pager, true)
|
drives, err := Drives(ctx, pager, true)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotEmpty(t, drives)
|
require.NotEmpty(t, drives)
|
||||||
|
|
||||||
|
|||||||
@ -46,7 +46,7 @@ func (suite *ItemIntegrationSuite) SetupSuite() {
|
|||||||
pager, err := PagerForSource(OneDriveSource, suite.service, suite.user, nil)
|
pager, err := PagerForSource(OneDriveSource, suite.service, suite.user, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
odDrives, err := drives(ctx, pager, true)
|
odDrives, err := Drives(ctx, pager, true)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
// Test Requirement 1: Need a drive
|
// Test Requirement 1: Need a drive
|
||||||
require.Greaterf(t, len(odDrives), 0, "user %s does not have a drive", suite.user)
|
require.Greaterf(t, len(odDrives), 0, "user %s does not have a drive", suite.user)
|
||||||
|
|||||||
@ -395,7 +395,7 @@ func normalizeCategorySet(t *testing.T, cats map[string]struct{}) []string {
|
|||||||
// multiple users
|
// multiple users
|
||||||
|
|
||||||
type RepositoryLoadTestExchangeSuite struct {
|
type RepositoryLoadTestExchangeSuite struct {
|
||||||
suite.Suite
|
tester.Suite
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
repo repository.Repository
|
repo repository.Repository
|
||||||
acct account.Account //lint:ignore U1000 future test use
|
acct account.Account //lint:ignore U1000 future test use
|
||||||
|
|||||||
@ -3,10 +3,15 @@ package repository_test
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/microsoftgraph/msgraph-sdk-go/models"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
|
"github.com/alcionai/corso/src/internal/common"
|
||||||
|
"github.com/alcionai/corso/src/internal/common/ptr"
|
||||||
|
"github.com/alcionai/corso/src/internal/connector/graph"
|
||||||
|
"github.com/alcionai/corso/src/internal/connector/onedrive"
|
||||||
"github.com/alcionai/corso/src/internal/tester"
|
"github.com/alcionai/corso/src/internal/tester"
|
||||||
"github.com/alcionai/corso/src/pkg/account"
|
"github.com/alcionai/corso/src/pkg/account"
|
||||||
"github.com/alcionai/corso/src/pkg/control"
|
"github.com/alcionai/corso/src/pkg/control"
|
||||||
@ -97,6 +102,7 @@ func (suite *RepositorySuite) TestConnect() {
|
|||||||
|
|
||||||
type RepositoryIntegrationSuite struct {
|
type RepositoryIntegrationSuite struct {
|
||||||
tester.Suite
|
tester.Suite
|
||||||
|
userID string
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRepositoryIntegrationSuite(t *testing.T) {
|
func TestRepositoryIntegrationSuite(t *testing.T) {
|
||||||
@ -109,6 +115,10 @@ func TestRepositoryIntegrationSuite(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIntegrationSuite) SetupSuite() {
|
||||||
|
suite.userID = tester.M365UserID(suite.T())
|
||||||
|
}
|
||||||
|
|
||||||
func (suite *RepositoryIntegrationSuite) TestInitialize() {
|
func (suite *RepositoryIntegrationSuite) TestInitialize() {
|
||||||
ctx, flush := tester.NewContext()
|
ctx, flush := tester.NewContext()
|
||||||
defer flush()
|
defer flush()
|
||||||
@ -219,3 +229,68 @@ func (suite *RepositoryIntegrationSuite) TestNewRestore() {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, ro)
|
require.NotNil(t, ro)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (suite *RepositoryIntegrationSuite) TestBackupDetails_regression() {
|
||||||
|
ctx, flush := tester.NewContext()
|
||||||
|
defer flush()
|
||||||
|
|
||||||
|
var (
|
||||||
|
t = suite.T()
|
||||||
|
acct = tester.NewM365Account(t)
|
||||||
|
st = tester.NewPrefixedS3Storage(t)
|
||||||
|
dest = "Corso_Restore_empty_" + common.FormatNow(common.SimpleTimeTesting)
|
||||||
|
)
|
||||||
|
|
||||||
|
m365, err := acct.M365Config()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
adpt, err := graph.CreateAdapter(acct.ID(), m365.AzureClientID, m365.AzureClientSecret)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
srv := graph.NewService(adpt)
|
||||||
|
|
||||||
|
pager, err := onedrive.PagerForSource(onedrive.OneDriveSource, srv, suite.userID, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
drives, err := onedrive.Drives(ctx, pager, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
d0 := drives[0]
|
||||||
|
body := models.DriveItem{}
|
||||||
|
body.SetName(&dest)
|
||||||
|
|
||||||
|
fld := models.Folder{}
|
||||||
|
fld.SetChildCount(ptr.To[int32](0))
|
||||||
|
body.SetFolder(&fld)
|
||||||
|
// body.SetWebUrl(ptr.To(ptr.Val(d0.GetWebUrl()) + "/" + dest))
|
||||||
|
|
||||||
|
_, err = srv.Client().
|
||||||
|
UsersById(suite.userID).
|
||||||
|
DrivesById(*d0.GetId()).
|
||||||
|
Items().
|
||||||
|
Post(ctx, &body, nil)
|
||||||
|
require.NoErrorf(t, err, "%+v", graph.ErrData(err))
|
||||||
|
|
||||||
|
r, err := repository.Initialize(ctx, acct, st, control.Options{})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
sel := selectors.NewOneDriveBackup([]string{suite.userID})
|
||||||
|
sel.Include(sel.Folders([]string{dest}))
|
||||||
|
|
||||||
|
op, err := r.NewBackup(ctx, sel.Selector)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NoError(t, op.Run(ctx))
|
||||||
|
require.NotZero(t, op.Results.ItemsWritten)
|
||||||
|
|
||||||
|
// the actual test. The backup details, having backed up an empty folder,
|
||||||
|
// should not return the folder within the backup details. That value
|
||||||
|
// should get filtered out, along with .meta and .dirmeta files.
|
||||||
|
deets, _, ferr := r.BackupDetails(ctx, string(op.Results.BackupID))
|
||||||
|
require.NoError(t, ferr.Failure())
|
||||||
|
|
||||||
|
for _, ent := range deets.Entries {
|
||||||
|
assert.NotContains(t, ent.RepoRef, dest)
|
||||||
|
assert.NotContains(t, ent.RepoRef, onedrive.MetaFileSuffix)
|
||||||
|
assert.NotContains(t, ent.RepoRef, onedrive.DirMetaFileSuffix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user