// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; import { configure, mount } from "enzyme"; import Adapter from 'enzyme-adapter-react-16'; import { AutoLogoutComponent, AutoLogoutProps, LAST_ACTIVE_TIMESTAMP } from './auto-logout'; configure({ adapter: new Adapter() }); describe('', () => { let props: AutoLogoutProps; const sessionIdleTimeout = 300; const lastWarningDuration = 60; const eventListeners = {}; jest.useFakeTimers(); beforeAll(() => { window.addEventListener = jest.fn((event, cb) => { eventListeners[event] = cb; }); }); beforeEach(() => { props = { sessionIdleTimeout: sessionIdleTimeout, lastWarningDuration: lastWarningDuration, doLogout: jest.fn(), doWarn: jest.fn(), doCloseWarn: jest.fn(), }; mount(
); }); it('should logout after idle timeout', () => { jest.runTimersToTime((sessionIdleTimeout-1)*1000); expect(props.doLogout).not.toBeCalled(); jest.runTimersToTime(1*1000); expect(props.doLogout).toBeCalled(); }); it('should warn the user previous to close the session', () => { jest.runTimersToTime((sessionIdleTimeout-lastWarningDuration-1)*1000); expect(props.doWarn).not.toBeCalled(); jest.runTimersToTime(1*1000); expect(props.doWarn).toBeCalled(); }); it('should reset the idle timer when activity event is received', () => { jest.runTimersToTime((sessionIdleTimeout-lastWarningDuration-1)*1000); expect(props.doWarn).not.toBeCalled(); // Simulate activity from other window/tab eventListeners.storage({ key: LAST_ACTIVE_TIMESTAMP, newValue: '42' // value currently doesn't matter }) jest.runTimersToTime(1*1000); // Warning should not appear because idle timer was reset expect(props.doWarn).not.toBeCalled(); }); });