diff --git a/shared/modules/browser-runtime.utils.test.js b/shared/modules/browser-runtime.utils.test.js new file mode 100644 index 000000000..b116f2d7c --- /dev/null +++ b/shared/modules/browser-runtime.utils.test.js @@ -0,0 +1,54 @@ +import sinon from 'sinon'; +import browser from 'webextension-polyfill'; +import log from 'loglevel'; +import * as BrowserRuntimeUtil from './browser-runtime.utils'; + +const mockLastError = { message: 'error', stack: [] }; + +describe('Browser Runtime Utils', () => { + beforeAll(() => { + sinon.replace(browser, 'runtime', { + lastError: undefined, + }); + }); + + describe('checkForLastError', () => { + it('should return undefined if no lastError found', () => { + expect(BrowserRuntimeUtil.checkForLastError()).toBeUndefined(); + }); + + it('should return the lastError (Error object) if lastError is found', () => { + sinon.stub(browser.runtime, 'lastError').value(mockLastError); + + expect(BrowserRuntimeUtil.checkForLastError()).toStrictEqual( + mockLastError, + ); + }); + + it('should return an Error object if the lastError is found with no stack', () => { + sinon + .stub(browser.runtime, 'lastError') + .value({ message: mockLastError.message }); + + const result = BrowserRuntimeUtil.checkForLastError(); + + expect(result).toStrictEqual(expect.any(Error)); + expect(result).toHaveProperty('stack'); + expect(result.message).toBe(mockLastError.message); + }); + }); + + describe('checkForLastErrorAndLog', () => { + it('should log and return error if error was found', () => { + sinon.stub(browser.runtime, 'lastError').value({ ...mockLastError }); + sinon.stub(log, 'error'); + + const result = BrowserRuntimeUtil.checkForLastErrorAndLog(); + + expect(log.error.calledWith(result)).toBeTruthy(); + expect(result).toStrictEqual(mockLastError); + + log.error.restore(); + }); + }); +});