1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 18:00:18 +01:00
metamask-extension/shared/lib/deep-linking.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

89 lines
2.5 KiB
JavaScript

import { openCustomProtocol } from './deep-linking';
describe('#openCustomProtocol', () => {
describe('with msLaunchUri available', () => {
const mockMsLaunchUri = jest.fn();
let windowSpy;
beforeEach(() => {
windowSpy = jest
.spyOn(global, 'window', 'get')
.mockImplementation(() => ({
navigator: {
msLaunchUri: mockMsLaunchUri,
},
}));
});
afterEach(() => {
windowSpy.mockRestore();
mockMsLaunchUri.mockRestore();
});
it('successfully open when protocol found', async () => {
mockMsLaunchUri.mockImplementation((_protocol, cb) => cb());
await openCustomProtocol('TEST PROTOCOL');
expect(mockMsLaunchUri).toHaveBeenCalledTimes(1);
});
it('throws when protocol not found', async () => {
mockMsLaunchUri.mockImplementation((_protocol, _cb, errorCb) =>
errorCb(),
);
await expect(openCustomProtocol('TEST PROTOCOL')).rejects.toThrow(
'Failed to open custom protocol link',
);
expect(mockMsLaunchUri).toHaveBeenCalledTimes(1);
});
});
describe('without msLaunchUri available', () => {
it('successfully open when protocol found', async () => {
// eslint-disable-next-line consistent-return
const mockAddEventListener = jest.fn().mockImplementation((event, cb) => {
if (event === 'blur') {
return cb();
}
});
const clearTimeoutMock = jest.fn();
const windowSpy = jest
.spyOn(global, 'window', 'get')
.mockImplementation(() => ({
addEventListener: mockAddEventListener,
setTimeout: jest.fn(),
clearTimeout: clearTimeoutMock,
}));
await openCustomProtocol('TEST PROTOCOL');
expect(mockAddEventListener).toHaveBeenCalledTimes(1);
expect(clearTimeoutMock).toHaveBeenCalledTimes(1);
windowSpy.mockRestore();
mockAddEventListener.mockRestore();
clearTimeoutMock.mockRestore();
});
it('throws when protocol not found', async () => {
jest.useFakeTimers();
const setTimeoutSpy = jest.spyOn(window, 'setTimeout');
const addEventListenerSpy = jest.spyOn(window, 'addEventListener');
const openCustomProtocolPromise = openCustomProtocol('TEST PROTOCOL');
jest.advanceTimersByTime(500);
await expect(openCustomProtocolPromise).rejects.toThrow(
'Timeout opening custom protocol link',
);
expect(setTimeoutSpy).toHaveBeenCalledTimes(1);
expect(addEventListenerSpy).toHaveBeenCalledTimes(1);
});
});
});