diff --git a/src/lib/analytics/index.ts b/src/lib/analytics/index.ts index a270f285cb..e48837d260 100644 --- a/src/lib/analytics/index.ts +++ b/src/lib/analytics/index.ts @@ -49,7 +49,7 @@ export function allowAnalytics(): boolean { * given by the data parameter, or called from {@link addDataAndSend}. * @param customData the analytics data to send to the backend. */ -export async function postAnalytics( +async function postAnalytics( customData, ): Promise { // if the user opt'ed out of analytics, then let's bail out early @@ -80,7 +80,7 @@ export async function postAnalytics( const queryString = Object.keys(queryStringParams).length > 0 ? queryStringParams : undefined; - return makeRequest({ + const res = await makeRequest({ body: { data: analyticsData, }, @@ -90,6 +90,8 @@ export async function postAnalytics( method: 'post', headers: headers, }); + + return res; } catch (err) { debug('analytics', err); // this swallows the analytics error } diff --git a/test/jest/unit/lib/analytics/index.spec.ts b/test/jest/unit/lib/analytics/index.spec.ts index 81ab65579b..804276e064 100644 --- a/test/jest/unit/lib/analytics/index.spec.ts +++ b/test/jest/unit/lib/analytics/index.spec.ts @@ -4,18 +4,36 @@ import { argsFrom } from './utils'; import * as apiTokenModule from '../../../../../src/lib/api-token'; describe('analytics module', () => { + afterEach(() => { + jest.restoreAllMocks(); + }); + it('sends anaytics with no token set', async () => { analytics.add('k1', 'v1'); const requestSpy = jest.spyOn(request, 'makeRequest'); + requestSpy.mockResolvedValue(); + const someTokenExistsSpy = jest.spyOn(apiTokenModule, 'someTokenExists'); someTokenExistsSpy.mockReturnValue(false); - requestSpy.mockImplementation(jest.fn()); + await analytics.addDataAndSend({ args: argsFrom({}), }); + expect(requestSpy).toBeCalledTimes(1); expect(requestSpy.mock.calls[0][0]).not.toHaveProperty( 'headers.authorization', ); }); + + it('ignores analytics request failures', async () => { + const requestSpy = jest.spyOn(request, 'makeRequest'); + requestSpy.mockRejectedValue(new Error('this should be ignored')); + + const result = analytics.addDataAndSend({ + args: argsFrom({}), + }); + + await expect(result).resolves.toBeUndefined(); + }); });