remove top query param in paged queries (#3719)
#### Does this PR need a docs update or release note? - [x] ⛔ No #### Type of change - [x] 🐛 Bugfix #### Test Plan - [x] 💪 Manual - [x] ⚡ Unit test - [x] 💚 E2E
This commit is contained in:
parent
7795f58c30
commit
43d4a4d5e8
@ -749,7 +749,7 @@ func testExchangeContinuousBackups(suite *BackupOpIntegrationSuite, toggles cont
|
|||||||
categories = map[path.CategoryType][]string{
|
categories = map[path.CategoryType][]string{
|
||||||
path.EmailCategory: exchange.MetadataFileNames(path.EmailCategory),
|
path.EmailCategory: exchange.MetadataFileNames(path.EmailCategory),
|
||||||
path.ContactsCategory: exchange.MetadataFileNames(path.ContactsCategory),
|
path.ContactsCategory: exchange.MetadataFileNames(path.ContactsCategory),
|
||||||
path.EventsCategory: exchange.MetadataFileNames(path.EventsCategory),
|
// path.EventsCategory: exchange.MetadataFileNames(path.EventsCategory),
|
||||||
}
|
}
|
||||||
container1 = fmt.Sprintf("%s%d_%s", incrementalsDestContainerPrefix, 1, now)
|
container1 = fmt.Sprintf("%s%d_%s", incrementalsDestContainerPrefix, 1, now)
|
||||||
container2 = fmt.Sprintf("%s%d_%s", incrementalsDestContainerPrefix, 2, now)
|
container2 = fmt.Sprintf("%s%d_%s", incrementalsDestContainerPrefix, 2, now)
|
||||||
@ -772,8 +772,8 @@ func testExchangeContinuousBackups(suite *BackupOpIntegrationSuite, toggles cont
|
|||||||
|
|
||||||
sel.Include(
|
sel.Include(
|
||||||
sel.MailFolders(containers, selectors.PrefixMatch()),
|
sel.MailFolders(containers, selectors.PrefixMatch()),
|
||||||
sel.ContactFolders(containers, selectors.PrefixMatch()),
|
sel.ContactFolders(containers, selectors.PrefixMatch()))
|
||||||
sel.EventCalendars(containers, selectors.PrefixMatch()))
|
// sel.EventCalendars(containers, selectors.PrefixMatch()))
|
||||||
|
|
||||||
creds, err := acct.M365Config()
|
creds, err := acct.M365Config()
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
@ -838,13 +838,13 @@ func testExchangeContinuousBackups(suite *BackupOpIntegrationSuite, toggles cont
|
|||||||
container2: {},
|
container2: {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
path.EventsCategory: {
|
// path.EventsCategory: {
|
||||||
dbf: eventDBF,
|
// dbf: eventDBF,
|
||||||
dests: map[string]contDeets{
|
// dests: map[string]contDeets{
|
||||||
container1: {},
|
// container1: {},
|
||||||
container2: {},
|
// container2: {},
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
}
|
}
|
||||||
|
|
||||||
// populate initial test data
|
// populate initial test data
|
||||||
|
|||||||
@ -103,10 +103,9 @@ func (c Contacts) NewContactsPager(
|
|||||||
selectProps ...string,
|
selectProps ...string,
|
||||||
) itemPager[models.Contactable] {
|
) itemPager[models.Contactable] {
|
||||||
options := &users.ItemContactFoldersItemContactsRequestBuilderGetRequestConfiguration{
|
options := &users.ItemContactFoldersItemContactsRequestBuilderGetRequestConfiguration{
|
||||||
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize)),
|
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize)),
|
||||||
QueryParameters: &users.ItemContactFoldersItemContactsRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemContactFoldersItemContactsRequestBuilderGetQueryParameters{},
|
||||||
Top: ptr.To(maxNonDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(selectProps) > 0 {
|
if len(selectProps) > 0 {
|
||||||
@ -181,7 +180,7 @@ func (c Contacts) NewContactIDsPager(
|
|||||||
config := &users.ItemContactFoldersItemContactsRequestBuilderGetRequestConfiguration{
|
config := &users.ItemContactFoldersItemContactsRequestBuilderGetRequestConfiguration{
|
||||||
QueryParameters: &users.ItemContactFoldersItemContactsRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemContactFoldersItemContactsRequestBuilderGetQueryParameters{
|
||||||
Select: idAnd(parentFolderID),
|
Select: idAnd(parentFolderID),
|
||||||
Top: ptr.To(maxNonDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
||||||
}
|
}
|
||||||
@ -249,7 +248,7 @@ func (c Contacts) NewContactDeltaIDsPager(
|
|||||||
options := &users.ItemContactFoldersItemContactsDeltaRequestBuilderGetRequestConfiguration{
|
options := &users.ItemContactFoldersItemContactsDeltaRequestBuilderGetRequestConfiguration{
|
||||||
QueryParameters: &users.ItemContactFoldersItemContactsDeltaRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemContactFoldersItemContactsDeltaRequestBuilderGetQueryParameters{
|
||||||
Select: idAnd(parentFolderID),
|
Select: idAnd(parentFolderID),
|
||||||
// TOP is not allowed
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
Headers: newPreferHeaders(preferPageSize(maxDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
Headers: newPreferHeaders(preferPageSize(maxDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,9 +34,7 @@ func (c Drives) NewDriveItemPager(
|
|||||||
selectProps ...string,
|
selectProps ...string,
|
||||||
) itemPager[models.DriveItemable] {
|
) itemPager[models.DriveItemable] {
|
||||||
options := &drives.ItemItemsItemChildrenRequestBuilderGetRequestConfiguration{
|
options := &drives.ItemItemsItemChildrenRequestBuilderGetRequestConfiguration{
|
||||||
QueryParameters: &drives.ItemItemsItemChildrenRequestBuilderGetQueryParameters{
|
QueryParameters: &drives.ItemItemsItemChildrenRequestBuilderGetQueryParameters{},
|
||||||
Top: ptr.To(maxNonDeltaPageSize),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(selectProps) > 0 {
|
if len(selectProps) > 0 {
|
||||||
@ -126,7 +124,6 @@ func (c Drives) NewDriveItemDeltaPager(
|
|||||||
requestConfig := &drives.ItemItemsItemDeltaRequestBuilderGetRequestConfiguration{
|
requestConfig := &drives.ItemItemsItemDeltaRequestBuilderGetRequestConfiguration{
|
||||||
Headers: newPreferHeaders(preferHeaderItems...),
|
Headers: newPreferHeaders(preferHeaderItems...),
|
||||||
QueryParameters: &drives.ItemItemsItemDeltaRequestBuilderGetQueryParameters{
|
QueryParameters: &drives.ItemItemsItemDeltaRequestBuilderGetQueryParameters{
|
||||||
Top: ptr.To(maxDeltaPageSize),
|
|
||||||
Select: selectFields,
|
Select: selectFields,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@ -111,9 +111,9 @@ func (c Events) NewEventsPager(
|
|||||||
selectProps ...string,
|
selectProps ...string,
|
||||||
) itemPager[models.Eventable] {
|
) itemPager[models.Eventable] {
|
||||||
options := &users.ItemCalendarsItemEventsRequestBuilderGetRequestConfiguration{
|
options := &users.ItemCalendarsItemEventsRequestBuilderGetRequestConfiguration{
|
||||||
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize)),
|
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize)),
|
||||||
QueryParameters: &users.ItemCalendarsItemEventsRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemCalendarsItemEventsRequestBuilderGetQueryParameters{
|
||||||
Top: ptr.To(maxNonDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,9 +187,9 @@ func (c Events) NewEventIDsPager(
|
|||||||
immutableIDs bool,
|
immutableIDs bool,
|
||||||
) (itemIDPager, error) {
|
) (itemIDPager, error) {
|
||||||
options := &users.ItemCalendarsItemEventsRequestBuilderGetRequestConfiguration{
|
options := &users.ItemCalendarsItemEventsRequestBuilderGetRequestConfiguration{
|
||||||
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
||||||
QueryParameters: &users.ItemCalendarsItemEventsRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemCalendarsItemEventsRequestBuilderGetQueryParameters{
|
||||||
Top: ptr.To(maxNonDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,9 +244,9 @@ func (c Events) NewEventDeltaIDsPager(
|
|||||||
immutableIDs bool,
|
immutableIDs bool,
|
||||||
) (itemIDPager, error) {
|
) (itemIDPager, error) {
|
||||||
options := &users.ItemCalendarsItemEventsDeltaRequestBuilderGetRequestConfiguration{
|
options := &users.ItemCalendarsItemEventsDeltaRequestBuilderGetRequestConfiguration{
|
||||||
Headers: newPreferHeaders(preferPageSize(maxDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
Headers: newPreferHeaders(preferPageSize(maxDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
||||||
QueryParameters: &users.ItemCalendarsItemEventsDeltaRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemCalendarsItemEventsDeltaRequestBuilderGetQueryParameters{
|
||||||
Top: ptr.To(maxDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package api
|
package api_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
@ -13,10 +13,12 @@ import (
|
|||||||
"github.com/alcionai/corso/src/internal/common/dttm"
|
"github.com/alcionai/corso/src/internal/common/dttm"
|
||||||
"github.com/alcionai/corso/src/internal/common/ptr"
|
"github.com/alcionai/corso/src/internal/common/ptr"
|
||||||
exchMock "github.com/alcionai/corso/src/internal/m365/exchange/mock"
|
exchMock "github.com/alcionai/corso/src/internal/m365/exchange/mock"
|
||||||
|
"github.com/alcionai/corso/src/internal/m365/graph"
|
||||||
"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/backup/details"
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
||||||
"github.com/alcionai/corso/src/pkg/control/testdata"
|
"github.com/alcionai/corso/src/pkg/control/testdata"
|
||||||
|
"github.com/alcionai/corso/src/pkg/fault"
|
||||||
|
"github.com/alcionai/corso/src/pkg/services/m365/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
type EventsAPIUnitSuite struct {
|
type EventsAPIUnitSuite struct {
|
||||||
@ -129,7 +131,7 @@ func (suite *EventsAPIUnitSuite) TestEventInfo() {
|
|||||||
future = time.Now().UTC().AddDate(0, 0, 1)
|
future = time.Now().UTC().AddDate(0, 0, 1)
|
||||||
eventTime = time.Date(future.Year(), future.Month(), future.Day(), future.Hour(), 0, 0, 0, time.UTC)
|
eventTime = time.Date(future.Year(), future.Month(), future.Day(), future.Hour(), 0, 0, 0, time.UTC)
|
||||||
eventEndTime = eventTime.Add(30 * time.Minute)
|
eventEndTime = eventTime.Add(30 * time.Minute)
|
||||||
event, err = BytesToEventable(bytes)
|
event, err = api.BytesToEventable(bytes)
|
||||||
)
|
)
|
||||||
|
|
||||||
require.NoError(suite.T(), err, clues.ToCore(err))
|
require.NoError(suite.T(), err, clues.ToCore(err))
|
||||||
@ -149,7 +151,7 @@ func (suite *EventsAPIUnitSuite) TestEventInfo() {
|
|||||||
t := suite.T()
|
t := suite.T()
|
||||||
|
|
||||||
event, expected := test.evtAndRP()
|
event, expected := test.evtAndRP()
|
||||||
result := EventInfo(event)
|
result := api.EventInfo(event)
|
||||||
|
|
||||||
assert.Equal(t, expected.Subject, result.Subject, "subject")
|
assert.Equal(t, expected.Subject, result.Subject, "subject")
|
||||||
assert.Equal(t, expected.Sender, result.Sender, "sender")
|
assert.Equal(t, expected.Sender, result.Sender, "sender")
|
||||||
@ -209,7 +211,7 @@ func (suite *EventsAPIUnitSuite) TestBytesToEventable() {
|
|||||||
suite.Run(test.name, func() {
|
suite.Run(test.name, func() {
|
||||||
t := suite.T()
|
t := suite.T()
|
||||||
|
|
||||||
result, err := BytesToEventable(test.byteArray)
|
result, err := api.BytesToEventable(test.byteArray)
|
||||||
test.checkError(t, err, clues.ToCore(err))
|
test.checkError(t, err, clues.ToCore(err))
|
||||||
test.isNil(t, result)
|
test.isNil(t, result)
|
||||||
})
|
})
|
||||||
@ -218,8 +220,7 @@ func (suite *EventsAPIUnitSuite) TestBytesToEventable() {
|
|||||||
|
|
||||||
type EventsAPIIntgSuite struct {
|
type EventsAPIIntgSuite struct {
|
||||||
tester.Suite
|
tester.Suite
|
||||||
credentials account.M365Config
|
its intgTesterSetup
|
||||||
ac Client
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEventsAPIntgSuite(t *testing.T) {
|
func TestEventsAPIntgSuite(t *testing.T) {
|
||||||
@ -231,15 +232,7 @@ func TestEventsAPIntgSuite(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *EventsAPIIntgSuite) SetupSuite() {
|
func (suite *EventsAPIIntgSuite) SetupSuite() {
|
||||||
t := suite.T()
|
suite.its = newIntegrationTesterSetup(suite.T())
|
||||||
|
|
||||||
a := tester.NewM365Account(t)
|
|
||||||
m365, err := a.M365Config()
|
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
|
||||||
|
|
||||||
suite.credentials = m365
|
|
||||||
suite.ac, err = NewClient(m365)
|
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *EventsAPIIntgSuite) TestRestoreLargeAttachment() {
|
func (suite *EventsAPIIntgSuite) TestRestoreLargeAttachment() {
|
||||||
@ -251,7 +244,7 @@ func (suite *EventsAPIIntgSuite) TestRestoreLargeAttachment() {
|
|||||||
userID := tester.M365UserID(suite.T())
|
userID := tester.M365UserID(suite.T())
|
||||||
|
|
||||||
folderName := testdata.DefaultRestoreConfig("eventlargeattachmenttest").Location
|
folderName := testdata.DefaultRestoreConfig("eventlargeattachmenttest").Location
|
||||||
evts := suite.ac.Events()
|
evts := suite.its.ac.Events()
|
||||||
calendar, err := evts.CreateContainer(ctx, userID, folderName, "")
|
calendar, err := evts.CreateContainer(ctx, userID, folderName, "")
|
||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
@ -282,3 +275,44 @@ func (suite *EventsAPIIntgSuite) TestRestoreLargeAttachment() {
|
|||||||
require.NoError(t, err, clues.ToCore(err))
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
require.NotEmpty(t, id, "empty id for large attachment")
|
require.NotEmpty(t, id, "empty id for large attachment")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (suite *EventsAPIIntgSuite) TestEvents_canFindNonStandardFolder() {
|
||||||
|
t := suite.T()
|
||||||
|
|
||||||
|
t.Skip("currently broken: the test user needs to get rotated")
|
||||||
|
|
||||||
|
ctx, flush := tester.NewContext(t)
|
||||||
|
defer flush()
|
||||||
|
|
||||||
|
ac := suite.its.ac.Events()
|
||||||
|
rc := testdata.DefaultRestoreConfig("api_calendar_discovery")
|
||||||
|
|
||||||
|
cal, err := ac.CreateContainer(ctx, suite.its.userID, rc.Location, "")
|
||||||
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
|
||||||
|
var (
|
||||||
|
found bool
|
||||||
|
calID = ptr.Val(cal.GetId())
|
||||||
|
findContainer = func(gcc graph.CachedContainer) error {
|
||||||
|
if ptr.Val(gcc.GetId()) == calID {
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
err = ac.EnumerateContainers(
|
||||||
|
ctx,
|
||||||
|
suite.its.userID,
|
||||||
|
"Calendar",
|
||||||
|
findContainer,
|
||||||
|
fault.New(true))
|
||||||
|
require.NoError(t, err, clues.ToCore(err))
|
||||||
|
require.True(
|
||||||
|
t,
|
||||||
|
found,
|
||||||
|
"the restored container was discovered when enumerating containers. "+
|
||||||
|
"If this fails, the user's calendars have probably broken, "+
|
||||||
|
"and the user will need to be rotated")
|
||||||
|
}
|
||||||
|
|||||||
@ -134,9 +134,9 @@ func (c Mail) NewMailPager(
|
|||||||
selectProps ...string,
|
selectProps ...string,
|
||||||
) itemPager[models.Messageable] {
|
) itemPager[models.Messageable] {
|
||||||
options := &users.ItemMailFoldersItemMessagesRequestBuilderGetRequestConfiguration{
|
options := &users.ItemMailFoldersItemMessagesRequestBuilderGetRequestConfiguration{
|
||||||
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize)),
|
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize)),
|
||||||
QueryParameters: &users.ItemMailFoldersItemMessagesRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemMailFoldersItemMessagesRequestBuilderGetQueryParameters{
|
||||||
Top: ptr.To(maxNonDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ func (c Mail) NewMailIDsPager(
|
|||||||
config := &users.ItemMailFoldersItemMessagesRequestBuilderGetRequestConfiguration{
|
config := &users.ItemMailFoldersItemMessagesRequestBuilderGetRequestConfiguration{
|
||||||
QueryParameters: &users.ItemMailFoldersItemMessagesRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemMailFoldersItemMessagesRequestBuilderGetQueryParameters{
|
||||||
Select: idAnd("isRead"),
|
Select: idAnd("isRead"),
|
||||||
Top: ptr.To(maxNonDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
Headers: newPreferHeaders(preferPageSize(maxNonDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
||||||
}
|
}
|
||||||
@ -287,7 +287,7 @@ func (c Mail) NewMailDeltaIDsPager(
|
|||||||
config := &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetRequestConfiguration{
|
config := &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetRequestConfiguration{
|
||||||
QueryParameters: &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetQueryParameters{
|
QueryParameters: &users.ItemMailFoldersItemMessagesDeltaRequestBuilderGetQueryParameters{
|
||||||
Select: idAnd("isRead"),
|
Select: idAnd("isRead"),
|
||||||
Top: ptr.To(maxDeltaPageSize),
|
// do NOT set Top. It limits the total items received.
|
||||||
},
|
},
|
||||||
Headers: newPreferHeaders(preferPageSize(maxDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
Headers: newPreferHeaders(preferPageSize(maxDeltaPageSize), preferImmutableIDs(immutableIDs)),
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user