1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/pages/desktop-pairing/desktop-pairing.test.js
João Tavares bde74756d3
Add extension desktop UI (#17748)
* feat: add desktop enable button component

This component will be added
to the experimental page. Users
will then be able to initialize
a desktop connection

* feat: add desktop pairing page

* feat: add desktop deep-linking shared lib

* test: add initial entries to render helper

Allow specifying initialEntries for
MemoryRouter. This change will allow
testing pages that use the useParam
hook.

* feat: add desktop error page

Error page for any desktop pairing
related issue

* feat: add desktop routes to route component

* feat: add enable desktop button to experimental tab

* feat: add desktop icon when paired in dev mode

* feat: disable ledger live control when desktop enabled

* feat: register desktop error actions on ui init

* fix: add missing code fencing

* chore: remove enable desktop rpc middleware

Now that we are adding the UI
there's no need for this rpc middleware
(as it was used to test desktop background
code)

* fix: display experimental tab for desktop
2023-02-23 16:39:48 +00:00

111 lines
3.3 KiB
JavaScript

import React from 'react';
import reactRouterDom from 'react-router-dom';
import { waitFor, act, screen } from '@testing-library/react';
import actions from '../../store/actions';
import configureStore from '../../store/store';
import { renderWithProvider } from '../../../test/jest';
import mockState from '../../../test/data/mock-state.json';
import { SECOND } from '../../../shared/constants/time';
import DesktopPairingPage from '.';
const mockHideLoadingIndication = jest.fn();
const mockShowLoadingIndication = jest.fn();
jest.mock('../../store/actions', () => {
return {
hideLoadingIndication: () => mockHideLoadingIndication,
showLoadingIndication: () => mockShowLoadingIndication,
generateOtp: jest.fn(),
};
});
const mockedActions = actions;
describe('Desktop Pairing page', () => {
const mockHistoryPush = jest.fn();
function flushPromises() {
// Wait for promises running in the non-async timer callback to complete.
// From https://github.com/facebook/jest/issues/2157#issuecomment-897935688
return new Promise(jest.requireActual('timers').setImmediate);
}
beforeEach(() => {
jest
.spyOn(reactRouterDom, 'useHistory')
.mockImplementation()
.mockReturnValue({ push: mockHistoryPush });
});
afterEach(() => {
jest.resetAllMocks();
jest.clearAllMocks();
});
it('should render otp component', async () => {
const otp = '123456';
mockedActions.generateOtp.mockResolvedValue(otp);
const store = configureStore(mockState);
let container = null;
act(() => {
container = renderWithProvider(<DesktopPairingPage />, store).container;
});
await waitFor(() => {
expect(screen.getByTestId('desktop-pairing-otp-content')).toBeDefined();
});
expect(container).toMatchSnapshot();
});
it('should re-render otp component after 30s', async () => {
jest.useFakeTimers();
const otp = '123456';
const newOtp = '654321';
const neverGeneratedOTP = '111222';
mockedActions.generateOtp
.mockResolvedValueOnce(otp)
.mockResolvedValueOnce(newOtp)
.mockResolvedValueOnce(neverGeneratedOTP);
const store = configureStore(mockState);
act(() => {
renderWithProvider(<DesktopPairingPage />, store);
});
// First render
await waitFor(async () => {
await flushPromises();
expect(screen.getByTestId('desktop-pairing-otp-content')).toBeDefined();
expect(screen.getByText(otp)).toBeDefined();
expect(mockedActions.generateOtp).toHaveBeenCalledTimes(1);
});
// Advance timers 30s to trigger next OTP
act(() => jest.advanceTimersByTime(30 * SECOND));
await waitFor(async () => {
await flushPromises();
expect(screen.getByTestId('desktop-pairing-otp-content')).toBeDefined();
expect(screen.getByText(newOtp)).toBeDefined();
expect(mockedActions.generateOtp).toHaveBeenCalledTimes(2);
});
// Advance timers 10s to test that OTP is still the same
act(() => jest.advanceTimersByTime(10 * SECOND));
await waitFor(async () => {
await flushPromises();
expect(screen.getByTestId('desktop-pairing-otp-content')).toBeDefined();
expect(screen.getByText(newOtp)).toBeDefined();
expect(mockedActions.generateOtp).toHaveBeenCalledTimes(2);
});
jest.clearAllTimers();
jest.useRealTimers();
});
});