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