93 lines
2.2 KiB
TypeScript
93 lines
2.2 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
const {
|
|
shutdownMock,
|
|
captureMock,
|
|
getSettingMock,
|
|
setSettingMock,
|
|
loggerDebugMock,
|
|
loggerErrorMock,
|
|
} = vi.hoisted(() => ({
|
|
shutdownMock: vi.fn(),
|
|
captureMock: vi.fn(),
|
|
getSettingMock: vi.fn(),
|
|
setSettingMock: vi.fn(),
|
|
loggerDebugMock: vi.fn(),
|
|
loggerErrorMock: vi.fn(),
|
|
}));
|
|
|
|
vi.mock('posthog-node', () => ({
|
|
PostHog: vi.fn(function PostHogMock() {
|
|
return {
|
|
capture: captureMock,
|
|
shutdown: shutdownMock,
|
|
};
|
|
}),
|
|
}));
|
|
|
|
vi.mock('@electron/utils/store', () => ({
|
|
getSetting: getSettingMock,
|
|
setSetting: setSettingMock,
|
|
}));
|
|
|
|
vi.mock('@electron/utils/logger', () => ({
|
|
logger: {
|
|
debug: loggerDebugMock,
|
|
error: loggerErrorMock,
|
|
info: vi.fn(),
|
|
warn: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
vi.mock('electron', () => ({
|
|
app: {
|
|
getVersion: () => '0.2.1',
|
|
},
|
|
}));
|
|
|
|
vi.mock('node-machine-id', () => ({
|
|
machineIdSync: () => 'machine-id-1',
|
|
}));
|
|
|
|
describe('main telemetry shutdown', () => {
|
|
beforeEach(() => {
|
|
vi.resetModules();
|
|
vi.clearAllMocks();
|
|
getSettingMock.mockImplementation(async (key: string) => {
|
|
switch (key) {
|
|
case 'telemetryEnabled':
|
|
return true;
|
|
case 'machineId':
|
|
return 'existing-machine-id';
|
|
case 'hasReportedInstall':
|
|
return true;
|
|
default:
|
|
return undefined;
|
|
}
|
|
});
|
|
setSettingMock.mockResolvedValue(undefined);
|
|
captureMock.mockReturnValue(undefined);
|
|
});
|
|
|
|
it('ignores PostHog network timeout errors during shutdown', async () => {
|
|
shutdownMock.mockRejectedValueOnce(
|
|
Object.assign(new Error('Network error while fetching PostHog'), {
|
|
name: 'PostHogFetchNetworkError',
|
|
cause: Object.assign(new Error('The operation was aborted due to timeout'), {
|
|
name: 'TimeoutError',
|
|
}),
|
|
}),
|
|
);
|
|
|
|
const { initTelemetry, shutdownTelemetry } = await import('@electron/utils/telemetry');
|
|
await initTelemetry();
|
|
await shutdownTelemetry();
|
|
|
|
expect(loggerErrorMock).not.toHaveBeenCalled();
|
|
expect(loggerDebugMock).toHaveBeenCalledWith(
|
|
'Ignored telemetry shutdown network error:',
|
|
expect.objectContaining({ name: 'PostHogFetchNetworkError' }),
|
|
);
|
|
});
|
|
});
|