diff --git a/packages/analytics/__tests__/Providers/AWSPinpointProvider-unit-test.ts b/packages/analytics/__tests__/Providers/AWSPinpointProvider-unit-test.ts index fa5d98d0426..4305271aab8 100644 --- a/packages/analytics/__tests__/Providers/AWSPinpointProvider-unit-test.ts +++ b/packages/analytics/__tests__/Providers/AWSPinpointProvider-unit-test.ts @@ -730,12 +730,14 @@ describe('AnalyticsProvider test', () => { test('error case', async () => { const analytics = new AnalyticsProvider(); + const mockError = { message: 'error' }; + analytics.configure(options); const spyon = jest .spyOn(Pinpoint.prototype, 'updateEndpoint') - .mockImplementationOnce((params, callback) => { - callback({ message: 'error' }, null); - }); + .mockImplementationOnce(params => ({ + promise: jest.fn().mockRejectedValue(mockError), + })); jest.spyOn(Credentials, 'get').mockImplementationOnce(() => { return Promise.resolve(credentials); @@ -744,7 +746,29 @@ describe('AnalyticsProvider test', () => { const params = { event: { name: '_update_endpoint', immediate: true } }; await analytics.record(params, { resolve, reject }); - expect(reject).toBeCalled(); + expect(reject).toBeCalledWith(mockError); + spyon.mockRestore(); + }); + + test('BAD_REQUEST_CODE without message rejects error', async () => { + const analytics = new AnalyticsProvider(); + const mockError = { debug: 'error', statusCode: 400 }; + + analytics.configure(options); + const spyon = jest + .spyOn(Pinpoint.prototype, 'updateEndpoint') + .mockImplementationOnce(params => ({ + promise: jest.fn().mockRejectedValue(mockError), + })); + + jest.spyOn(Credentials, 'get').mockImplementationOnce(() => { + return Promise.resolve(credentials); + }); + + const params = { event: { name: '_update_endpoint', immediate: true } }; + + await analytics.record(params, { resolve, reject }); + expect(reject).toBeCalledWith(mockError); spyon.mockRestore(); }); }); diff --git a/packages/analytics/src/Providers/AWSPinpointProvider.ts b/packages/analytics/src/Providers/AWSPinpointProvider.ts index 424137ffc6d..d7bcb4fe58d 100644 --- a/packages/analytics/src/Providers/AWSPinpointProvider.ts +++ b/packages/analytics/src/Providers/AWSPinpointProvider.ts @@ -372,9 +372,7 @@ export default class AWSPinpointProvider implements AnalyticsProvider { typeof params.resendLimit === 'number' ? params.resendLimit : resendLimit; if (params.resendLimit-- > 0) { logger.debug( - `resending event ${params.eventName} with ${ - params.resendLimit - } retry times left` + `resending event ${params.eventName} with ${params.resendLimit} retry times left` ); this._pinpointPutEvents(params, handlers); } else { @@ -450,7 +448,9 @@ export default class AWSPinpointProvider implements AnalyticsProvider { const { message } = err; const { ApplicationId, EndpointRequest } = update_params; - if (!message.startsWith('Exceeded maximum endpoint per user count')) { + if ( + !String(message).startsWith('Exceeded maximum endpoint per user count') + ) { return endpointObject.handlers.reject(err); } @@ -494,9 +494,7 @@ export default class AWSPinpointProvider implements AnalyticsProvider { if (params.resendLimit-- > 0) { logger.debug( - `resending endpoint update ${params.event.eventId} with ${ - params.resendLimit - } retry attempts remaining` + `resending endpoint update ${params.event.eventId} with ${params.resendLimit} retry attempts remaining` ); // insert at the front of endpointBuffer this._endpointBuffer.unshift(endpointObject); @@ -504,9 +502,7 @@ export default class AWSPinpointProvider implements AnalyticsProvider { } logger.warn( - `resending endpoint update ${params.event.eventId} failed after ${ - params.config.resendLimit - } attempts` + `resending endpoint update ${params.event.eventId} failed after ${params.config.resendLimit} attempts` ); if (this._endpointGenerating) {