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
|
||||
}
|
||||
|
||||
// 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
|
||||
|
||||
drives, err := drives(ctx, pager, retry)
|
||||
drives, err := Drives(ctx, pager, retry)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ func PagerForSource(
|
||||
}
|
||||
}
|
||||
|
||||
func drives(
|
||||
func Drives(
|
||||
ctx context.Context,
|
||||
pager drivePager,
|
||||
retry bool,
|
||||
@ -362,7 +362,7 @@ func GetAllFolders(
|
||||
prefix string,
|
||||
errs *fault.Bus,
|
||||
) ([]*Displayable, error) {
|
||||
drives, err := drives(ctx, pager, true)
|
||||
drives, err := Drives(ctx, pager, true)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "getting OneDrive folders")
|
||||
}
|
||||
|
||||
@ -313,7 +313,7 @@ func (suite *OneDriveUnitSuite) TestDrives() {
|
||||
toReturn: test.pagerResults,
|
||||
}
|
||||
|
||||
drives, err := drives(ctx, pager, test.retry)
|
||||
drives, err := Drives(ctx, pager, test.retry)
|
||||
test.expectedErr(t, err)
|
||||
|
||||
assert.ElementsMatch(t, test.expectedResults, drives)
|
||||
@ -355,7 +355,7 @@ func (suite *OneDriveSuite) TestCreateGetDeleteFolder() {
|
||||
pager, err := PagerForSource(OneDriveSource, gs, suite.userID, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
drives, err := drives(ctx, pager, true)
|
||||
drives, err := Drives(ctx, pager, true)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, drives)
|
||||
|
||||
|
||||
@ -46,7 +46,7 @@ func (suite *ItemIntegrationSuite) SetupSuite() {
|
||||
pager, err := PagerForSource(OneDriveSource, suite.service, suite.user, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
odDrives, err := drives(ctx, pager, true)
|
||||
odDrives, err := Drives(ctx, pager, true)
|
||||
require.NoError(t, err)
|
||||
// Test Requirement 1: Need a drive
|
||||
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
|
||||
|
||||
type RepositoryLoadTestExchangeSuite struct {
|
||||
suite.Suite
|
||||
tester.Suite
|
||||
ctx context.Context
|
||||
repo repository.Repository
|
||||
acct account.Account //lint:ignore U1000 future test use
|
||||
|
||||
@ -3,10 +3,15 @@ package repository_test
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/microsoftgraph/msgraph-sdk-go/models"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"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/pkg/account"
|
||||
"github.com/alcionai/corso/src/pkg/control"
|
||||
@ -97,6 +102,7 @@ func (suite *RepositorySuite) TestConnect() {
|
||||
|
||||
type RepositoryIntegrationSuite struct {
|
||||
tester.Suite
|
||||
userID string
|
||||
}
|
||||
|
||||
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() {
|
||||
ctx, flush := tester.NewContext()
|
||||
defer flush()
|
||||
@ -219,3 +229,68 @@ func (suite *RepositoryIntegrationSuite) TestNewRestore() {
|
||||
require.NoError(t, err)
|
||||
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