-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[STCOR-869] Add small margin to fixed timeout warning to match call to /logout #1517
base: keycloak-ramsons
Are you sure you want to change the base?
Changes from all commits
b8d1fd8
cba4874
6761c00
13cd263
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,10 @@ | ||
import { render, screen, waitFor } from '@folio/jest-config-stripes/testing-library/react'; | ||
import ms from 'ms'; | ||
|
||
import Harness from '../../../test/jest/helpers/harness'; | ||
import FixedLengthSessionWarning from './FixedLengthSessionWarning'; | ||
import { timestampFormatter } from './utils'; | ||
import { RTR_TIME_MARGIN } from '../Root/constants'; | ||
|
||
jest.mock('../Root/token-util'); | ||
|
||
|
@@ -17,7 +20,9 @@ describe('FixedLengthSessionWarning', () => { | |
it('renders a warning with seconds remaining', async () => { | ||
render(<Harness stripes={stripes}><FixedLengthSessionWarning /></Harness>); | ||
screen.getByText(/stripes-core.rtr.fixedLengthSession.timeRemaining/); | ||
screen.getByText(/01:39/); | ||
screen.getByText( | ||
new RegExp(timestampFormatter(ms(stripes.config.rtr.fixedLengthSessionWarningTTL) - ms(RTR_TIME_MARGIN))) | ||
); | ||
}); | ||
|
||
it('renders 0:00 when time expires', async () => { | ||
|
@@ -31,7 +36,9 @@ describe('FixedLengthSessionWarning', () => { | |
|
||
render(<Harness stripes={zeroSecondsStripes}><FixedLengthSessionWarning /></Harness>); | ||
screen.getByText(/stripes-core.rtr.fixedLengthSession.timeRemaining/); | ||
screen.getByText(/0:00/); | ||
screen.getByText( | ||
new RegExp(timestampFormatter(ms(stripes.config.rtr.fixedLengthSessionWarningTTL) - ms(RTR_TIME_MARGIN))) | ||
); | ||
Comment on lines
-34
to
+41
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't understand why this test changed because from the user's point of view, nothing will be any different on screen: you will still see a countdown and it will still count down to 0:00 and then terminate your session. The only difference is that if your session was previously 100 seconds long, now it will be 99.8 seconds long. So, we still want to see |
||
}); | ||
|
||
// I've never had great luck with jest's fake timers, https://jestjs.io/docs/timer-mocks | ||
|
@@ -53,7 +60,9 @@ describe('FixedLengthSessionWarning', () => { | |
expect(setInterval).toHaveBeenCalledTimes(1); | ||
expect(setInterval).toHaveBeenLastCalledWith(expect.any(Function), 1000); | ||
|
||
await waitFor(() => screen.getByText(/00:09/), { timeout: 2000 }); | ||
await waitFor(() => screen.getByText( | ||
new RegExp(timestampFormatter(ms(stripes.config.rtr.fixedLengthSessionWarningTTL) - ms(RTR_TIME_MARGIN))) | ||
), { timeout: 2000 }); | ||
Comment on lines
-56
to
+65
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As above, I don't think we this test should need to change. Can you explain why this was necessary? |
||
}); | ||
}); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
/** | ||
* timestampFormatter | ||
* convert time-remaining to mm:ss. Given the remaining time can easily be | ||
* represented as elapsed-time since the JSDate epoch, convert to a | ||
* Date object, format it, and extract the minutes and seconds. | ||
* That is, given we have 99 seconds left, that converts to a Date | ||
* like `1970-01-01T00:01:39.000Z`; extract the `01:39`. | ||
*/ | ||
// eslint-disable-next-line import/prefer-default-export | ||
export const timestampFormatter = (remainingMillis) => { | ||
if (remainingMillis >= 1000) { | ||
return new Date(remainingMillis).toISOString().substring(14, 19); | ||
} | ||
|
||
return '00:00'; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TLDR, use
'200'
instead of'200m'
.ms()
parses strings -> ints and parses ints -> strings. Normally, the string contains a unit (s, m, h, d... for seconds, minutes, hours, days...) but if you want to provide an input in milliseconds then you omit the unit 🤷 just don't tell your high school physics teacher.Since all our other time-values here get pushed through
ms()
, I think it's good practice to follow suit here, even though it feels kinda dumb to convert from milliseconds to milliseconds. I should've included the same comment from line 71, "value must be a string parsable by ms()", just above on in the description for theRTR_*_EXPIRY_IF_UNKNOWN
values at line 87 🤦, which would have helped make this more obvious.