mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-25 11:28:51 +01:00
bde74756d3
* 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
89 lines
2.5 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
});
|