/* * Copyright (c) 2015 Nordic Semiconductor ASA * * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause */ import React from 'react'; import { fireEvent, screen } from '@testing-library/react'; import render from '../../test/testrenderer'; import { getAppSpecificStore as store } from '../utils/persistentStore'; import { generateSystemReport } from '../utils/systemReport'; import ErrorBoundary from './ErrorBoundary'; jest.mock('../utils/systemReport'); jest.mock('../telemetry/telemetry', () => ({ ...jest.requireActual('../telemetry/telemetry'), sendErrorReport: jest.fn(), isEnabled: () => true, })); const SYSTEM_REPORT = 'system report'; const OKBUTTONTEXT = 'Restore'; jest.mocked(generateSystemReport).mockImplementation( () => new Promise(res => { res(SYSTEM_REPORT); }), ); const Child = () => { throw new Error(); }; describe('ErrorBoundary', () => { beforeEach(() => { const spy = jest.spyOn(console, 'error'); spy.mockImplementation(() => {}); }); afterEach(() => { jest.clearAllMocks(); }); it('accepts custom reporting functions', () => { const sendTelemetryEvent = jest.fn(); render( , ); expect(sendTelemetryEvent).toHaveBeenCalled(); }); it('renders error boundary component when there is an error', () => { render( , ); const errorMessage = screen.getByText('Oops! There was a problem'); expect(errorMessage).toBeDefined(); }); it('clears store on factory reset', async () => { render( , ); fireEvent.click(screen.getByText('Restore default settings')); await screen.findByText(OKBUTTONTEXT); fireEvent.click(screen.getByText(OKBUTTONTEXT)); expect(store().clear).toHaveBeenCalled(); }); it('presents system information', async () => { render( , ); const report = await screen.findByText(SYSTEM_REPORT); expect(report).toBeDefined(); }); });