Skip to content

Commit

Permalink
Allow users to set a different URL for timeouts than manual sign outs
Browse files Browse the repository at this point in the history
  • Loading branch information
gunjam committed Sep 11, 2020
1 parent 727a333 commit 618b051
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 12 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

## [Unreleased]

## [1.16.0] - 2020-09-10

### Changed

- `hmrcTimeoutDialog` Allow users to set a different URL for timeouts than manual sign outs

## [1.15.3] - 2020-08-14

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hmrc-frontend",
"version": "1.15.3",
"version": "1.16.0",
"description": "Design patterns for HMRC frontends",
"scripts": {
"start": "gulp dev",
Expand Down
1 change: 1 addition & 0 deletions src/components/timeout-dialog/template.njk
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
data-countdown="{{ params.countdown }}"
data-keep-alive-url="{{ params.keepAliveUrl }}"
data-sign-out-url="{{ params.signOutUrl }}"
data-timeout-url="{{ params.timeoutUrl }}"
data-title="{{ params.title }}"
data-message="{{ params.message }}"
data-message-suffix="{{ params.messageSuffix }}"
Expand Down
10 changes: 9 additions & 1 deletion src/components/timeout-dialog/timeout-dialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ function TimeoutDialog ($module) {
countdown: validate.int(lookupData('data-countdown')),
keepAliveUrl: validate.string(lookupData('data-keep-alive-url')),
signOutUrl: validate.string(lookupData('data-sign-out-url')),
timeoutUrl: validate.string(lookupData('data-timeout-url')),
title: validate.string(lookupData('data-title')),
message: validate.string(lookupData('data-message')),
messageSuffix: validate.string(lookupData('data-message-suffix')),
Expand All @@ -69,6 +70,9 @@ function TimeoutDialog ($module) {
)
}

// Default timeoutUrl to signOutUrl if not set
options.timeoutUrl = options.timeoutUrl || options.signOutUrl

validateInput(options)
settings = mergeOptionsWithDefaults(options, localisedDefaults)
setupDialogTimer()
Expand Down Expand Up @@ -255,7 +259,7 @@ function TimeoutDialog ($module) {
var counter = getSecondsRemaining()
updateCountdown(counter, $countdownElement)
if (counter <= 0) {
signOut()
timeout()
}
currentTimer = window.setTimeout(runUpdate, getNextTimeout())
}
Expand All @@ -278,6 +282,10 @@ function TimeoutDialog ($module) {
RedirectHelper.redirectToUrl(settings.signOutUrl)
}

function timeout () {
RedirectHelper.redirectToUrl(settings.timeoutUrl)
}

function cleanup () {
while (cleanupFunctions.length > 0) {
var fn = cleanupFunctions.shift()
Expand Down
34 changes: 25 additions & 9 deletions src/components/timeout-dialog/timeout-dialog.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,8 @@ describe('/components/timeout-dialog', () => {
'data-message-suffix': 'My message suffix.',
'data-keep-alive-button-text': 'KEEP alive',
'data-sign-out-button-text': 'sign OUT',
'data-sign-out-url': '/mySignOutUrl.html'
'data-sign-out-url': '/mySignOutUrl.html',
'data-timeout-url': '/myTimeoutUrl.html'
})
pretendSecondsHavePassed(780)
})
Expand Down Expand Up @@ -416,7 +417,8 @@ describe('/components/timeout-dialog', () => {
'data-timeout': 130,
'data-countdown': 120,
'data-message': 'time:',
'data-sign-out-url': 'logout'
'data-sign-out-url': 'signout',
'data-timeout-url': 'timeout'
})

pretendSecondsHavePassed(10)
Expand Down Expand Up @@ -451,20 +453,31 @@ describe('/components/timeout-dialog', () => {
expect(getAudibleCountText()).toEqual('time: 20 seconds.')
pretendSecondsHavePassed(1)

expect(redirectHelper.redirectToUrl).toHaveBeenCalledWith('logout')
expect(redirectHelper.redirectToUrl).toHaveBeenCalledWith('timeout')
expect(getVisualCountText()).toEqual('time: -1 seconds.')
expect(getAudibleCountText()).toEqual('time: 20 seconds.')
pretendSecondsHavePassed(1)

expect(getVisualCountText()).toEqual('time: -2 seconds.')
expect(getAudibleCountText()).toEqual('time: 20 seconds.')
})
it('should default redirectToUrl to data-sign-out-url if data-timeout-url is not set', function () {
setupDialog({
'data-timeout': 130,
'data-countdown': 120,
'data-message': 'time:',
'data-sign-out-url': 'logout'
})
pretendSecondsHavePassed(131)
expect(redirectHelper.redirectToUrl).toHaveBeenCalledWith('logout')
})
it('should have an audio countdown which counts the last minute in 20 second decrements', function () {
setupDialog({
'data-timeout': 70,
'data-countdown': 65,
'data-message': 'time:',
'data-sign-out-url': 'logout'
'data-sign-out-url': 'signout',
'data-timeout-url': 'timeout'
})

pretendSecondsHavePassed(10)
Expand Down Expand Up @@ -505,7 +518,8 @@ describe('/components/timeout-dialog', () => {
'data-timeout': 130,
'data-countdown': 120,
'data-message': 'Welsh, time:',
'data-sign-out-url': 'logout'
'data-sign-out-url': 'signout',
'data-timeout-url': 'timeout'
})

pretendSecondsHavePassed(10)
Expand Down Expand Up @@ -540,7 +554,7 @@ describe('/components/timeout-dialog', () => {
expect(getAudibleCountText()).toEqual('Welsh, time: 20 eiliad.')
pretendSecondsHavePassed(1)

expect(redirectHelper.redirectToUrl).toHaveBeenCalledWith('logout')
expect(redirectHelper.redirectToUrl).toHaveBeenCalledWith('timeout')
expect(getVisualCountText()).toEqual('Welsh, time: -1 eiliad.')
expect(getAudibleCountText()).toEqual('Welsh, time: 20 eiliad.')
pretendSecondsHavePassed(1)
Expand Down Expand Up @@ -623,7 +637,8 @@ describe('/components/timeout-dialog', () => {
'data-timeout': 130,
'data-countdown': 50,
'data-message': 'Remaining time is',
'data-sign-out-url': 'logout'
'data-sign-out-url': 'signout',
'data-timeout-url': 'timeout'
})
const lowestAudibleCount = 'Remaining time is 20 seconds.'

Expand Down Expand Up @@ -651,7 +666,7 @@ describe('/components/timeout-dialog', () => {
expect(getAudibleCountText()).toEqual(lowestAudibleCount)
pretendSecondsHavePassed(1)

expect(redirectHelper.redirectToUrl).toHaveBeenCalledWith('logout')
expect(redirectHelper.redirectToUrl).toHaveBeenCalledWith('timeout')
expect(getVisualCountText()).toEqual('Remaining time is -1 seconds.')
expect(getAudibleCountText()).toEqual(lowestAudibleCount)
pretendSecondsHavePassed(1)
Expand All @@ -666,7 +681,8 @@ describe('/components/timeout-dialog', () => {
'data-timeout': 130,
'data-countdown': 50,
'data-message': 'time:',
'data-sign-out-url': 'logout'
'data-sign-out-url': 'signout',
'data-timeout-url': 'timeout'
})

pretendSecondsHavePassed(80)
Expand Down

0 comments on commit 618b051

Please sign in to comment.