Merge pull request #4938 from picklesrus/zero-minutes-fix

Change time library to default to 1 minute when the time remaining is less than 30 seconds.
This commit is contained in:
picklesrus 2021-02-01 15:56:37 -05:00 committed by GitHub
commit 6d53018486
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 2 deletions

View file

@ -1,3 +1,6 @@
// IMPORTANT: any changes to the time algorithm also need to be made in the corresponding
// scratchr2 file 'lib/format-time.js'
/**
Given a timestamp in the future, calculate the largest, closest unit to show.
On the high end we stop at hours. e.g. 15 days is still counted in hours not days or weeks.
@ -18,8 +21,10 @@ const getTimeUnitAndDuration = timeStamp => {
unit = 'hour';
duration = diff / oneHourInMs;
}
// Round to nearest hour or minute.
duration = Math.round(duration);
// Round to nearest hour or minute, but always have at least 1
// so we don't show something like "0 minutes". Hours isn't
// affected by the math.max because we choose minutes up to 2 hours.
duration = Math.max(1, Math.round(duration));
return {
unit: unit,
duration: duration

View file

@ -26,6 +26,13 @@ describe('unit test lib/format-time.js', () => {
expect(mockFormatExpression.format).toHaveBeenCalledWith(2, 'minute');
});
test('test timestamp that is 15 seconds in the future displays 1', () => {
const fifteenSec = 15 * 1000;
mockFormatExpression.format.mockReturnValue('in 1 minute');
format.formatRelativeTime(fifteenSec, 'en');
expect(mockFormatExpression.format).toHaveBeenCalledWith(1, 'minute');
});
test('test rounding timestamp that is 4.4 minutes rounds to 4', () => {
const fourPlusMin = 4.4 * 60 * 1000;
mockFormatExpression.format.mockReturnValue('in 4 minutes');