import { extensionComm } from '../../background/extensionComm'; jest.mock('@lenovo-software/lsa-clients-common', () => { return { WebHelperExtensionIds: ['extension_1', 'extension_2'], LSAClient: { getInstance: () => { return { logExporter: { logMessage: () => {}, logWarning: () => {} } }; } } }; }); afterEach(() => { jest.clearAllMocks(); jest.resetAllMocks(); jest.resetModules(); }); describe('extensionMessage', function () { jest.setTimeout(7000); it('should call sendMessage twice', function (done) { let extensionMessageSent = jest.fn(); //@ts-ignore chrome.runtime.sendMessage.mockImplementation((target, message, callback) => { if (target.startsWith && target.startsWith('extension')) { extensionMessageSent(); callback({ foo: 'bar' }); } }); extensionComm.extensionMessage({ foo: 'bar' }, function (ids: any[]) { expect(extensionMessageSent).toBeCalledTimes(2); expect(Array.isArray(ids)).toEqual(true); expect(ids.length).toEqual(0); done(); }); }); it('should call sendMessage only once because it got a success message', function (done) { let extensionMessageSent = jest.fn(); //@ts-ignore chrome.runtime.sendMessage.mockImplementation((target, message, callback) => { if (target.startsWith && target.startsWith('extension')) { extensionMessageSent(); callback({ data: 'success' }); } }); extensionComm.extensionMessage({ foo: 'bar' }, function (ids: any[]) { expect(extensionMessageSent).toBeCalledTimes(1); expect(ids.length).toEqual(2); done(); }); }); it('should call the extension only once and only include one extension because it got an ID back', function (done) { let extensionMessageSent = jest.fn(); //@ts-ignore chrome.runtime.sendMessage.mockImplementation((target, message, callback) => { if (target.startsWith && target.startsWith('extension')) { extensionMessageSent(); callback({ data: 'success', id: 'hello' }); } }); extensionComm.extensionMessage({ foo: 'bar' }, function (ids: any[]) { expect(extensionMessageSent).toBeCalledTimes(1); expect(ids.length).toEqual(1); expect(ids[0]).toEqual('hello'); done(); }); }); it('should timeout', function (done) { let extensionMessageSent = jest.fn(); //@ts-ignore chrome.runtime.sendMessage.mockImplementation((target, message, callback) => { if (target.startsWith && target.startsWith('extension')) { extensionMessageSent(); //callback not being called here, which will cause the timeout } }); extensionComm.setCommTimeout(50); extensionComm.extensionMessage({ foo: 'bar' }, function (ids: any[]) { expect(extensionMessageSent).toBeCalledTimes(2); expect(ids.length).toEqual(0); done(); }); }); });