diff --git a/src/api/__tests__/queueMarkAsRead-test.js b/src/api/__tests__/queueMarkAsRead-test.js index 86d8f82c874..caafd7eb8e4 100644 --- a/src/api/__tests__/queueMarkAsRead-test.js +++ b/src/api/__tests__/queueMarkAsRead-test.js @@ -2,17 +2,26 @@ import queueMarkAsRead, { resetAll } from '../queueMarkAsRead'; import * as messagesFlags from '../messages/messagesFlags'; import * as eg from '../../__tests__/exampleData'; +import { Lolex } from '../../__tests__/aux/lolex'; // $FlowFixMe Make flow understand about mocking messagesFlags.default = jest.fn(() => {}); -jest.useFakeTimers(); - describe('queueMarkAsRead', () => { - beforeEach(() => { - resetAll(); + let lolex: Lolex; + + beforeAll(() => { + lolex = new Lolex(); + }); + + afterAll(() => { + lolex.dispose(); + }); + + afterEach(() => { jest.clearAllMocks(); - jest.clearAllTimers(); + lolex.clearAllTimers(); + resetAll(); }); test('should not call messagesFlags on consecutive calls of queueMarkAsRead, setTimout on further calls', () => { @@ -21,36 +30,25 @@ describe('queueMarkAsRead', () => { queueMarkAsRead(eg.selfAuth, [7, 8, 9]); queueMarkAsRead(eg.selfAuth, [10, 11, 12]); - expect(setTimeout).toHaveBeenCalledTimes(1); + expect(lolex.getTimerCount()).toBe(1); expect(messagesFlags.default).toHaveBeenCalledTimes(1); }); test('should call messagesFlags, if calls to queueMarkAsRead are 2s apart', () => { - const start = Date.now(); - // $FlowFixMe Make flow understand about mocking - Date.now = jest.fn().mockReturnValue(start); queueMarkAsRead(eg.selfAuth, [13, 14, 15]); - - // $FlowFixMe Make flow understand about mocking - Date.now = jest.fn().mockReturnValue(start + 2100); + lolex.advanceTimersByTime(2100); queueMarkAsRead(eg.selfAuth, [16, 17, 18]); expect(messagesFlags.default).toHaveBeenCalledTimes(2); }); test('should set timeout for time remaining for next API call to clear queue', () => { - const start = Date.now(); - // $FlowFixMe Make flow understand about mocking - Date.now = jest.fn().mockReturnValue(start); queueMarkAsRead(eg.selfAuth, [1, 2, 3]); - // $FlowFixMe Make flow understand about mocking - Date.now = jest.fn().mockReturnValue(start + 1900); + lolex.advanceTimersByTime(1900); queueMarkAsRead(eg.selfAuth, [4, 5, 6]); - // $FlowFixMe Make flow understand about mocking - Date.now = jest.fn().mockReturnValue(start + 2001); - jest.runOnlyPendingTimers(); + lolex.runOnlyPendingTimers(); expect(messagesFlags.default).toHaveBeenCalledTimes(2); }); }); diff --git a/src/api/queueMarkAsRead.js b/src/api/queueMarkAsRead.js index 1e767dfef3e..ed3d1ddf3df 100644 --- a/src/api/queueMarkAsRead.js +++ b/src/api/queueMarkAsRead.js @@ -6,13 +6,13 @@ import messagesFlags from './messages/messagesFlags'; const debouncePeriodMs = 2000; let unsentMessageIds = []; -let lastSentTime = 0; +let lastSentTime = -Infinity; let timeout = null; /** Private; exported only for tests. */ export const resetAll = () => { unsentMessageIds = []; - lastSentTime = 0; + lastSentTime = -Infinity; timeout = null; };