import { WebLimitBlockType } from '@lenovo-software/lsa-clients-common/dist/models/limitingModels'; import { WebLimiter } from '../webLimiting'; const sendToWebHelperMock = jest.fn(); jest.mock('../../extensionComm', () => { return { extensionComm: { sendToWebHelper: (obj: any) => sendToWebHelperMock(obj) } }; }); let webLimiter: WebLimiter; beforeAll(() => { webLimiter = WebLimiter.getInstance(); jest.useFakeTimers(); }); beforeEach(() => { sendToWebHelperMock.mockClear(); }); describe('WebLimiter', () => { it('should block a website', async () => { const params = { blockType: WebLimitBlockType.Block, sites: ['https://example.com'], blockIPAddresses: true, blockIncognito: true, className: 'className' }; await webLimiter.start(params); jest.advanceTimersByTime(5100); expect(sendToWebHelperMock).toHaveBeenCalledTimes(3); expect(sendToWebHelperMock).toHaveBeenNthCalledWith(3, { message: 'WebLimitURLList', value: JSON.stringify({ listType: '3', entries: params.sites }) }); await webLimiter.stop(); }); it('should block all websites', async () => { const params = { blockType: WebLimitBlockType.BlockAll, className: 'className' }; await webLimiter.start(params); jest.advanceTimersByTime(5100); expect(sendToWebHelperMock).toHaveBeenCalledTimes(3); expect(sendToWebHelperMock).toHaveBeenNthCalledWith(3, { message: 'WebLimitURLList', value: JSON.stringify({ listType: '1' }) }); await webLimiter.stop(); }); it('should allow specific websites', async () => { const params = { blockType: WebLimitBlockType.Allow, sites: ['https://example.com'], blockIPAddresses: true, blockIncognito: true, className: 'className' }; await webLimiter.start(params); jest.advanceTimersByTime(5100); expect(sendToWebHelperMock).toHaveBeenCalledTimes(3); expect(sendToWebHelperMock).toHaveBeenNthCalledWith(3, { message: 'WebLimitURLList', value: JSON.stringify({ listType: '2', entries: params.sites }) }); await webLimiter.stop(); }); });