mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-26 17:24:23 -04:00
Merge branch 'main' of https://github.com/GSA/notifications-admin into 803-keep-current-service-visible
This commit is contained in:
@@ -12,6 +12,6 @@ module.exports = {
|
||||
setupFiles: ['./support/setup.js'],
|
||||
testEnvironment: 'jsdom',
|
||||
testEnvironmentOptions: {
|
||||
url: 'https://www.notifications.service.gov.uk',
|
||||
url: 'https://beta.notify.gov',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
let _location = {
|
||||
reload: jest.fn(),
|
||||
hostname: "www.notifications.service.gov.uk",
|
||||
hostname: "beta.notify.gov",
|
||||
assign: jest.fn(),
|
||||
href: "https://www.notifications.service.gov.uk",
|
||||
href: "https://beta.notify.gov",
|
||||
}
|
||||
|
||||
// JSDOM provides a read-only window.location, which does not allow for
|
||||
|
||||
131
tests/javascripts/timeoutPopup.test.js
Normal file
131
tests/javascripts/timeoutPopup.test.js
Normal file
@@ -0,0 +1,131 @@
|
||||
beforeAll(() => {
|
||||
jest.spyOn(global, 'setTimeout');
|
||||
|
||||
document.body.innerHTML = `
|
||||
<dialog class="usa-modal" id="sessionTimer" aria-labelledby="sessionTimerHeading" aria-describedby="timerWarning">
|
||||
<div class="usa-modal__content">
|
||||
<div class="usa-modal__main">
|
||||
<h2 class="usa-modal__heading" id="sessionTimerHeading">
|
||||
Your session will end soon.
|
||||
<span class="usa-sr-only">Please choose to extend your session or sign out. Your session will expire in 5 minutes or less.</span>
|
||||
</h2>
|
||||
<div class="usa-prose">
|
||||
<p>You have been inactive for too long.
|
||||
Your session will expire in <span id="timeLeft" role="timer"></span>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="usa-modal__footer">
|
||||
<ul class="usa-button-group">
|
||||
<li class="usa-button-group__item">
|
||||
<button type="button" class="usa-button" id="extendSessionTimer" data-close-modal>
|
||||
Extend Session
|
||||
</button>
|
||||
</li>
|
||||
<li class="usa-button-group__item">
|
||||
<button type="button" class="usa-button usa-button--unstyled padding-105 text-center" id="logOutTimer"
|
||||
data-close-modal>
|
||||
Sign out
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
`
|
||||
|
||||
const sessionTimerModule = require('../../app/assets/javascripts/timeoutPopup.js');
|
||||
window.GOVUK.modules.start();
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
document.body.innerHTML = '';
|
||||
});
|
||||
|
||||
|
||||
describe('When the session timer module is loaded', () => {
|
||||
beforeEach(() => {
|
||||
jest.useFakeTimers();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.useFakeTimers();
|
||||
});
|
||||
|
||||
test('everything initializes properly', () => {
|
||||
const sessionTimer = document.getElementById("sessionTimer");
|
||||
sessionTimer.showModal = jest.fn();
|
||||
sessionTimer.close = jest.fn();
|
||||
|
||||
jest.runAllTimers();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
describe('The session timer ', () => {
|
||||
beforeEach(() => {
|
||||
jest.useFakeTimers();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.useFakeTimers();
|
||||
});
|
||||
|
||||
test('signoutUser method logs the user out', () => {
|
||||
const signoutUserMethod = window.GOVUK.Modules.TimeoutPopup.signoutUser;
|
||||
|
||||
expect(window.location.href).toEqual(expect.not.stringContaining('/sign-out'));
|
||||
|
||||
signoutUserMethod();
|
||||
|
||||
expect(window.location.href).toEqual(expect.stringContaining('/sign-out'));
|
||||
});
|
||||
|
||||
test('expireUserSession method logs the user out with next query parameter', () => {
|
||||
const expireUserSessionMethod = window.GOVUK.Modules.TimeoutPopup.expireUserSession;
|
||||
|
||||
expect(window.location.href).toEqual(expect.not.stringContaining('/sign-out?next='));
|
||||
|
||||
expireUserSessionMethod();
|
||||
|
||||
expect(window.location.href).toEqual(expect.stringContaining('/sign-out?next='));
|
||||
});
|
||||
|
||||
test('extendSession method reloads the page', () => {
|
||||
const windowReload = jest.spyOn(window.location, 'reload');
|
||||
const extendSessionMethod = window.GOVUK.Modules.TimeoutPopup.extendSession;
|
||||
|
||||
extendSessionMethod();
|
||||
|
||||
expect(windowReload).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('showTimer method shows the session timer modal', () => {
|
||||
const sessionTimer = document.getElementById("sessionTimer");
|
||||
sessionTimer.showModal = jest.fn();
|
||||
|
||||
const showTimerMock = jest.spyOn(sessionTimer, 'showModal');
|
||||
|
||||
window.GOVUK.Modules.TimeoutPopup.showTimer();
|
||||
|
||||
expect(showTimerMock).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('closeTimer method closes the session timer modal', () => {
|
||||
const sessionTimer = document.getElementById("sessionTimer");
|
||||
sessionTimer.close = jest.fn();
|
||||
|
||||
const closeTimerMock = jest.spyOn(sessionTimer, 'close');
|
||||
|
||||
window.GOVUK.Modules.TimeoutPopup.closeTimer();
|
||||
|
||||
expect(closeTimerMock).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('checkTimer is called', () => {
|
||||
const checkTimerMock = jest.spyOn(window.GOVUK.Modules.TimeoutPopup, "checkTimer");
|
||||
window.GOVUK.Modules.TimeoutPopup.checkTimer();
|
||||
expect(checkTimerMock).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user