saleor-dashboard/src/services/errorTracking/trackerFactory.test.ts
Jakub Majorek 383055a2de
SALEOR-2064 Add generic error tracker with Sentry adapter (#956)
* Add generic error tracker with Sentry extension

* Add Sentry webpack plugin

* Update variable names and README

* Update deploy-staging template

* Update changelog
2021-01-22 15:05:26 +01:00

83 lines
2.3 KiB
TypeScript

import { ErrorTrackerFactory } from "./trackerFactory";
import { TrackerMethods, TrackerPermission } from "./types";
const testErrorId = "testId";
const initMockFn = jest.fn();
const captureExceptionMockFn = jest.fn(_ => testErrorId);
const setUserDataMockFn = jest.fn();
const TestAdapter = (): TrackerMethods => {
const init: TrackerMethods["init"] = () => {
initMockFn();
return true;
};
const setUserData: TrackerMethods["setUserData"] = userData =>
setUserDataMockFn(userData);
const captureException: TrackerMethods["captureException"] = (e: Error) =>
captureExceptionMockFn(e);
return {
captureException,
init,
setUserData
};
};
describe("Error Tracking", () => {
it("Initiates the tracker", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter());
const enabled = errorTracking.init();
expect(enabled).toBe(true);
expect(initMockFn).toHaveBeenCalled();
});
it("Does not fire events when is not initiated", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter());
const sampleError = new Error("test");
const id = errorTracking.captureException(sampleError);
expect(id).toBe(undefined);
expect(captureExceptionMockFn).toHaveBeenCalledTimes(0);
});
it("Sends a captured exception", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter());
errorTracking.init();
const sampleError = new Error("test");
const id = errorTracking.captureException(sampleError);
expect(id).toBe(testErrorId);
expect(captureExceptionMockFn).toHaveBeenCalledWith(sampleError);
});
it("Does not save user data without permission", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter());
errorTracking.init();
const userData = {
email: "john@example.com",
id: "id",
username: "John Doe"
};
errorTracking.setUserData(userData);
expect(setUserDataMockFn).toHaveBeenCalledTimes(0);
});
it("Does save user data with proper permission", () => {
const errorTracking = ErrorTrackerFactory(TestAdapter(), [
TrackerPermission.USER_DATA
]);
errorTracking.init();
const userData = {
email: "john@example.com",
id: "id",
username: "John Doe"
};
errorTracking.setUserData(userData);
expect(setUserDataMockFn).toHaveBeenCalledWith(userData);
});
});