Skip to content

Commit

Permalink
clubs lists restore tests (#5074)
Browse files Browse the repository at this point in the history
clubs lists restore tests

#### Does this PR need a docs update or release note?

- [ ] ✅ Yes, it's included
- [ ] 🕐 Yes, but in a later PR
- [x] ⛔ No

#### Type of change

<!--- Please check the type of change your PR introduces: --->
- [ ] 🌻 Feature
- [ ] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [x] 🤖 Supportability/Tests
- [ ] 💻 CI/Deployment
- [ ] 🧹 Tech Debt/Cleanup

#### Issue(s)
#4754 

#### Test Plan

<!-- How will this be tested prior to merging.-->
- [x] 💪 Manual
- [x] ⚡ Unit test
- [x] 💚 E2E
  • Loading branch information
HiteshRepo authored Jan 23, 2024
1 parent e9bb20e commit 0b8a027
Showing 1 changed file with 52 additions and 119 deletions.
171 changes: 52 additions & 119 deletions src/internal/m365/collection/site/restore_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"fmt"
"io"
"testing"
"time"

"github.com/alcionai/clues"
"github.com/microsoftgraph/msgraph-sdk-go/models"
Expand Down Expand Up @@ -138,7 +137,7 @@ func (suite *SharePointRestoreSuite) TestListCollection_Restore() {
destName = restoreCfg.Location
lrh = NewListsRestoreHandler(suite.siteID, suite.ac.Lists())
service = createTestService(t, suite.creds)
list = createList(listTemplate, listName)
list = stubList(listTemplate, listName)
mockData = generateListData(t, service, list)
)

Expand Down Expand Up @@ -182,12 +181,12 @@ func (suite *SharePointRestoreSuite) TestListCollection_Restore_invalidListTempl
}{
{
name: "list with template documentLibrary",
list: createList(api.DocumentLibraryListTemplate, listName),
list: stubList(api.DocumentLibraryListTemplate, listName),
expect: assert.Error,
},
{
name: "list with template webTemplateExtensionsList",
list: createList(api.WebTemplateExtensionsListTemplate, listName),
list: stubList(api.WebTemplateExtensionsListTemplate, listName),
expect: assert.Error,
},
}
Expand Down Expand Up @@ -225,8 +224,8 @@ func (suite *SharePointRestoreSuite) TestListCollection_RestoreInPlace_skip() {
restoreCfg = testdata.DefaultRestoreConfig("")
lrh = NewListsRestoreHandler(suite.siteID, suite.ac.Lists())
service = createTestService(t, suite.creds)
list = createList(listTemplate, listName)
newList = createList(listTemplate, listName)
list = stubList(listTemplate, listName)
newList = stubList(listTemplate, listName)
cl = count.New()
)

Expand Down Expand Up @@ -262,120 +261,18 @@ func (suite *SharePointRestoreSuite) TestListCollection_RestoreInPlace_copy() {
listTemplate = "genericList"
listID = "some-list-id"
restoreCfg = testdata.DefaultRestoreConfig("")
lrh = NewListsRestoreHandler(suite.siteID, suite.ac.Lists())
service = createTestService(t, suite.creds)
cl = count.New()
)

restoreCfg.OnCollision = control.Copy

list := createList(listTemplate, listName)
list.SetId(ptr.To(listID))

newList := createList(listTemplate, listName)
newList.SetId(ptr.To(listID))

mockData := generateListData(t, service, list)

collisionKeyToItemID := map[string]string{
api.ListCollisionKey(newList): listID,
}

deets, err := restoreListItem(
ctx,
lrh,
mockData,
suite.siteID,
restoreCfg,
collisionKeyToItemID,
cl,
fault.New(true))
require.NoError(t, err, clues.ToCore(err))
assert.Zero(t, cl.Get(count.CollisionSkip))
assert.Zero(t, cl.Get(count.CollisionReplace))

// Clean-Up
deleteList(ctx, t, suite.siteID, lrh, deets)
}

func (suite *SharePointRestoreSuite) TestListCollection_RestoreInPlace_replace() {
t := suite.T()

ctx, flush := tester.NewContext(t)
defer flush()

var (
listName = "MockListing"
listTemplate = "genericList"
restoreCfg = testdata.DefaultRestoreConfig("")
lrh = NewListsRestoreHandler(suite.siteID, suite.ac.Lists())
service = createTestService(t, suite.creds)
cl = count.New()
now = time.Now()
temMinAfter = now.Add(10 * time.Minute)
)

restoreCfg.OnCollision = control.Replace

list := createList(listTemplate, listName)
list.SetLastModifiedDateTime(ptr.To(now))

newList := createList(listTemplate, listName)
newList.SetLastModifiedDateTime(ptr.To(temMinAfter))

createdList, err := lrh.PostList(
ctx,
listName,
newList,
fault.New(true))
require.NoError(t, err, clues.ToCore(err))

listID := ptr.Val(createdList.GetId())
list.SetId(ptr.To(listID))

mockData := generateListData(t, service, list)

collisionKeyToItemID := map[string]string{
api.ListCollisionKey(newList): listID,
}

deets, err := restoreListItem(
ctx,
lrh,
mockData,
suite.siteID,
restoreCfg,
collisionKeyToItemID,
cl,
fault.New(true))
require.NoError(t, err, clues.ToCore(err))
assert.Less(t, int64(0), cl.Get(count.CollisionReplace))

// Clean-Up
deleteList(ctx, t, suite.siteID, lrh, deets)
}

func (suite *SharePointRestoreSuite) TestListCollection_RestoreInPlace_replaceFails() {
t := suite.T()

ctx, flush := tester.NewContext(t)
defer flush()

var (
listName = "MockListing"
listTemplate = "genericList"
listID = "some-list-id"
restoreCfg = testdata.DefaultRestoreConfig("")
service = createTestService(t, suite.creds)
cl = count.New()
policyToKey = map[control.CollisionPolicy]count.Key{
control.Replace: count.CollisionReplace,
control.Skip: count.CollisionSkip,
}
)

restoreCfg.OnCollision = control.Replace

list := createList(listTemplate, listName)
list := stubList(listTemplate, listName)
list.SetId(ptr.To(listID))

newList := createList(listTemplate, listName)
newList := stubList(listTemplate, listName)
newList.SetId(ptr.To(listID))

collisionKeyToItemID := map[string]string{
Expand All @@ -386,6 +283,7 @@ func (suite *SharePointRestoreSuite) TestListCollection_RestoreInPlace_replaceFa
name string
lrh *siteMock.ListRestoreHandler
expectErr assert.ErrorAssertionFunc
collisionPolicy control.CollisionPolicy
expectCollisionCount int64
}{
{
Expand All @@ -394,38 +292,63 @@ func (suite *SharePointRestoreSuite) TestListCollection_RestoreInPlace_replaceFa
nil,
errors.New("failed to create list"),
nil),
expectErr: assert.Error,
collisionPolicy: control.Replace,
expectErr: assert.Error,
},
{
name: "DeleteList fails",
lrh: siteMock.NewListRestoreHandler(
errors.New("failed to delete list"),
nil,
nil),
expectErr: assert.Error,
collisionPolicy: control.Replace,
expectErr: assert.Error,
},
{
name: "PatchList fails",
lrh: siteMock.NewListRestoreHandler(
nil,
nil,
errors.New("failed to patch list")),
expectErr: assert.Error,
collisionPolicy: control.Replace,
expectErr: assert.Error,
},
{
name: "PostList passes for stored list",
lrh: siteMock.NewListRestoreHandler(
nil,
nil,
nil),
collisionPolicy: control.Replace,
expectErr: assert.NoError,
expectCollisionCount: 1,
},
{
name: "Skip collison policy",
lrh: siteMock.NewListRestoreHandler(
nil,
nil,
nil),
collisionPolicy: control.Skip,
expectErr: assert.Error,
expectCollisionCount: 1,
},
{
name: "Copy collison policy",
lrh: siteMock.NewListRestoreHandler(
nil,
nil,
nil),
collisionPolicy: control.Copy,
expectErr: assert.NoError,
},
}

for _, test := range tests {
suite.Run(test.name, func() {
mockData := generateListData(t, service, list)
cl := count.New()
restoreCfg.OnCollision = test.collisionPolicy

_, err := restoreListItem(
ctx,
Expand All @@ -437,7 +360,17 @@ func (suite *SharePointRestoreSuite) TestListCollection_RestoreInPlace_replaceFa
cl,
fault.New(true))
test.expectErr(t, err)
assert.Equal(t, test.expectCollisionCount, cl.Get(count.CollisionReplace))

if test.collisionPolicy == control.Skip {
assert.Equal(t, core.ErrAlreadyExists.Error(), err.Error())
}

if test.collisionPolicy == control.Copy {
assert.Zero(t, cl.Get(count.CollisionSkip))
assert.Zero(t, cl.Get(count.CollisionReplace))
}

assert.Equal(t, test.expectCollisionCount, cl.Get(policyToKey[test.collisionPolicy]))
})
}
}
Expand Down Expand Up @@ -501,7 +434,7 @@ func generateListData(
return mockData
}

func createList(listTemplate, listDisplayName string) models.Listable {
func stubList(listTemplate, listDisplayName string) models.Listable {
listInfo := models.NewListInfo()
listInfo.SetTemplate(ptr.To(listTemplate))

Expand Down

0 comments on commit 0b8a027

Please sign in to comment.