From: Lucas Di Pentima Date: Mon, 7 Sep 2020 16:46:29 +0000 (-0300) Subject: 16679: Adds tests for AutoLogout component. X-Git-Tag: 2.1.0~10^2~2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/8ca41c49857e0109f9c38f7eac67db89a064ecbc 16679: Adds tests for AutoLogout component. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- diff --git a/src/views-components/auto-logout/auto-logout.test.tsx b/src/views-components/auto-logout/auto-logout.test.tsx new file mode 100644 index 00000000..f8daa764 --- /dev/null +++ b/src/views-components/auto-logout/auto-logout.test.tsx @@ -0,0 +1,42 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import * as React from 'react'; +import { configure, mount } from "enzyme"; +import * as Adapter from 'enzyme-adapter-react-16'; +import { AutoLogoutComponent, AutoLogoutProps } from './auto-logout'; + +configure({ adapter: new Adapter() }); + +describe('', () => { + let props: AutoLogoutProps; + const sessionIdleTimeout = 300; + const lastWarningDuration = 60; + jest.useFakeTimers(); + + 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(); + }); +}); \ No newline at end of file diff --git a/src/views-components/auto-logout/auto-logout.tsx b/src/views-components/auto-logout/auto-logout.tsx index 52a1950a..f1464ce1 100644 --- a/src/views-components/auto-logout/auto-logout.tsx +++ b/src/views-components/auto-logout/auto-logout.tsx @@ -39,34 +39,35 @@ const mapDispatchToProps = (dispatch: Dispatch): AutoLogoutActionProps => ({ doCloseWarn: () => dispatch(snackbarActions.CLOSE_SNACKBAR()), }); -type AutoLogoutProps = AutoLogoutDataProps & AutoLogoutActionProps; +export type AutoLogoutProps = AutoLogoutDataProps & AutoLogoutActionProps; -export const AutoLogout = connect(mapStateToProps, mapDispatchToProps)( - (props: AutoLogoutProps) => { - let logoutTimer: NodeJS.Timer; - const lastWarningDuration = min([props.lastWarningDuration, props.sessionIdleTimeout])! * 1000 ; +export const AutoLogoutComponent = (props: AutoLogoutProps) => { + let logoutTimer: NodeJS.Timer; + const lastWarningDuration = min([props.lastWarningDuration, props.sessionIdleTimeout])! * 1000 ; - const handleOnIdle = () => { - logoutTimer = setTimeout( - () => props.doLogout(), lastWarningDuration); - props.doWarn( - "Your session is about to be closed due to inactivity", - lastWarningDuration); - }; - - const handleOnActive = () => { - clearTimeout(logoutTimer); - props.doCloseWarn(); - }; + const handleOnIdle = () => { + logoutTimer = setTimeout( + () => props.doLogout(), lastWarningDuration); + props.doWarn( + "Your session is about to be closed due to inactivity", + lastWarningDuration); + }; - useIdleTimer({ - timeout: (props.lastWarningDuration < props.sessionIdleTimeout) - ? 1000 * (props.sessionIdleTimeout - props.lastWarningDuration) - : 1, - onIdle: handleOnIdle, - onActive: handleOnActive, - debounce: 500 - }); + const handleOnActive = () => { + clearTimeout(logoutTimer); + props.doCloseWarn(); + }; - return ; + useIdleTimer({ + timeout: (props.lastWarningDuration < props.sessionIdleTimeout) + ? 1000 * (props.sessionIdleTimeout - props.lastWarningDuration) + : 1, + onIdle: handleOnIdle, + onActive: handleOnActive, + debounce: 500 }); + + return ; +}; + +export const AutoLogout = connect(mapStateToProps, mapDispatchToProps)(AutoLogoutComponent);