From 754981d0d2368da92d86ea43dc5999a3edfcba92 Mon Sep 17 00:00:00 2001 From: ashmrtn Date: Thu, 9 Feb 2023 09:44:10 -0800 Subject: [PATCH] Make order insensitive permission compare (#2448) ## Description Update the comparison for OneDrive permissions so it doesn't assume a fixed order. Also fix index out of bounds errors if backup did not retrieve the expected permissions ## Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No ## Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [x] :robot: Test - [ ] :computer: CI/Deployment - [ ] :broom: Tech Debt/Cleanup ## Issue(s) * #2447 ## Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- .../connector/graph_connector_helper_test.go | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/internal/connector/graph_connector_helper_test.go b/src/internal/connector/graph_connector_helper_test.go index ad6ea556e..cbbb9b0f6 100644 --- a/src/internal/connector/graph_connector_helper_test.go +++ b/src/internal/connector/graph_connector_helper_test.go @@ -14,6 +14,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/exp/maps" + "golang.org/x/exp/slices" "github.com/alcionai/corso/src/internal/connector/mockconnector" "github.com/alcionai/corso/src/internal/connector/onedrive" @@ -652,6 +653,35 @@ func compareExchangeEvent( checkEvent(t, expectedEvent, itemEvent) } +func permissionEqual(expected onedrive.UserPermission, got onedrive.UserPermission) bool { + if !strings.EqualFold(expected.Email, got.Email) { + return false + } + + if (expected.Expiration == nil && got.Expiration != nil) || + (expected.Expiration != nil && got.Expiration == nil) { + return false + } + + if expected.Expiration != nil && + got.Expiration != nil && + !expected.Expiration.Equal(*got.Expiration) { + return false + } + + if len(expected.Roles) != len(got.Roles) { + return false + } + + for _, r := range got.Roles { + if !slices.Contains(expected.Roles, r) { + return false + } + } + + return true +} + func compareOneDriveItem( t *testing.T, expected map[string][]byte, @@ -695,13 +725,7 @@ func compareOneDriveItem( } assert.Equal(t, len(expectedMeta.Permissions), len(itemMeta.Permissions), "number of permissions after restore") - - // FIXME(meain): The permissions before and after might not be in the same order. - for i, p := range expectedMeta.Permissions { - assert.Equal(t, strings.ToLower(p.Email), strings.ToLower(itemMeta.Permissions[i].Email)) - assert.Equal(t, p.Roles, itemMeta.Permissions[i].Roles) - assert.Equal(t, p.Expiration, itemMeta.Permissions[i].Expiration) - } + testElementsMatch(t, expectedMeta.Permissions, itemMeta.Permissions, permissionEqual) } func compareItem(