Use DurationInSeconds for expireTimer
This commit is contained in:
parent
cf57c7aaf0
commit
6be69a7ba8
59 changed files with 411 additions and 216 deletions
|
@ -4,6 +4,7 @@
|
|||
import { assert } from 'chai';
|
||||
import * as moment from 'moment';
|
||||
import { setupI18n } from '../../util/setupI18n';
|
||||
import { DurationInSeconds } from '../../util/durations';
|
||||
import enMessages from '../../../_locales/en/messages.json';
|
||||
import esMessages from '../../../_locales/es/messages.json';
|
||||
import nbMessages from '../../../_locales/nb/messages.json';
|
||||
|
@ -24,7 +25,7 @@ describe('expiration timer utilities', () => {
|
|||
});
|
||||
|
||||
it('includes 1 hour as seconds', () => {
|
||||
const oneHour = moment.duration(1, 'hour').asSeconds();
|
||||
const oneHour = DurationInSeconds.fromHours(1);
|
||||
assert.include(DEFAULT_DURATIONS_IN_SECONDS, oneHour);
|
||||
});
|
||||
});
|
||||
|
@ -37,7 +38,7 @@ describe('expiration timer utilities', () => {
|
|||
});
|
||||
|
||||
it('handles no duration', () => {
|
||||
assert.strictEqual(format(i18n, 0), 'off');
|
||||
assert.strictEqual(format(i18n, DurationInSeconds.ZERO), 'off');
|
||||
});
|
||||
|
||||
it('formats durations', () => {
|
||||
|
@ -59,22 +60,31 @@ describe('expiration timer utilities', () => {
|
|||
[moment.duration(3, 'w').asSeconds(), '3 weeks'],
|
||||
[moment.duration(52, 'w').asSeconds(), '52 weeks'],
|
||||
]).forEach((expected, input) => {
|
||||
assert.strictEqual(format(i18n, input), expected);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(input)),
|
||||
expected
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('formats other languages successfully', () => {
|
||||
const esI18n = setupI18n('es', esMessages);
|
||||
assert.strictEqual(format(esI18n, 120), '2 minutos');
|
||||
assert.strictEqual(
|
||||
format(esI18n, DurationInSeconds.fromSeconds(120)),
|
||||
'2 minutos'
|
||||
);
|
||||
|
||||
const zhCnI18n = setupI18n('zh-CN', zhCnMessages);
|
||||
assert.strictEqual(format(zhCnI18n, 60), '1 分钟');
|
||||
assert.strictEqual(
|
||||
format(zhCnI18n, DurationInSeconds.fromSeconds(60)),
|
||||
'1 分钟'
|
||||
);
|
||||
|
||||
// The underlying library supports the "pt" locale, not the "pt_BR" locale. That's
|
||||
// what we're testing here.
|
||||
const ptBrI18n = setupI18n('pt_BR', ptBrMessages);
|
||||
assert.strictEqual(
|
||||
format(ptBrI18n, moment.duration(5, 'days').asSeconds()),
|
||||
format(ptBrI18n, DurationInSeconds.fromDays(5)),
|
||||
'5 dias'
|
||||
);
|
||||
|
||||
|
@ -83,7 +93,7 @@ describe('expiration timer utilities', () => {
|
|||
[setupI18n('nb', nbMessages), setupI18n('nn', nlMessages)].forEach(
|
||||
norwegianI18n => {
|
||||
assert.strictEqual(
|
||||
format(norwegianI18n, moment.duration(6, 'hours').asSeconds()),
|
||||
format(norwegianI18n, DurationInSeconds.fromHours(6)),
|
||||
'6 timer'
|
||||
);
|
||||
}
|
||||
|
@ -92,41 +102,76 @@ describe('expiration timer utilities', () => {
|
|||
|
||||
it('falls back to English if the locale is not supported', () => {
|
||||
const badI18n = setupI18n('bogus', {});
|
||||
assert.strictEqual(format(badI18n, 120), '2 minutes');
|
||||
assert.strictEqual(
|
||||
format(badI18n, DurationInSeconds.fromSeconds(120)),
|
||||
'2 minutes'
|
||||
);
|
||||
});
|
||||
|
||||
it('handles a "mix" of units gracefully', () => {
|
||||
// We don't expect there to be a "mix" of units, but we shouldn't choke if a bad
|
||||
// client gives us an unexpected timestamp.
|
||||
const mix = moment
|
||||
.duration(6, 'days')
|
||||
.add(moment.duration(2, 'hours'))
|
||||
.asSeconds();
|
||||
const mix = DurationInSeconds.fromSeconds(
|
||||
moment.duration(6, 'days').add(moment.duration(2, 'hours')).asSeconds()
|
||||
);
|
||||
assert.strictEqual(format(i18n, mix), '6 days, 2 hours');
|
||||
});
|
||||
|
||||
it('handles negative numbers gracefully', () => {
|
||||
// The proto helps enforce non-negative numbers by specifying a u32, but because
|
||||
// JavaScript lacks such a type, we test it here.
|
||||
assert.strictEqual(format(i18n, -1), '1 second');
|
||||
assert.strictEqual(format(i18n, -120), '2 minutes');
|
||||
assert.strictEqual(format(i18n, -0), 'off');
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(-1)),
|
||||
'1 second'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(-120)),
|
||||
'2 minutes'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(-0)),
|
||||
'off'
|
||||
);
|
||||
});
|
||||
|
||||
it('handles fractional seconds gracefully', () => {
|
||||
// The proto helps enforce integer numbers by specifying a u32, but this function
|
||||
// shouldn't choke if bad data is passed somehow.
|
||||
assert.strictEqual(format(i18n, 4.2), '4 seconds');
|
||||
assert.strictEqual(format(i18n, 4.8), '4 seconds');
|
||||
assert.strictEqual(format(i18n, 0.2), '1 second');
|
||||
assert.strictEqual(format(i18n, 0.8), '1 second');
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(4.2)),
|
||||
'4 seconds'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(4.8)),
|
||||
'4 seconds'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(0.2)),
|
||||
'1 second'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(0.8)),
|
||||
'1 second'
|
||||
);
|
||||
|
||||
// If multiple things go wrong and we pass a fractional negative number, we still
|
||||
// shouldn't explode.
|
||||
assert.strictEqual(format(i18n, -4.2), '4 seconds');
|
||||
assert.strictEqual(format(i18n, -4.8), '4 seconds');
|
||||
assert.strictEqual(format(i18n, -0.2), '1 second');
|
||||
assert.strictEqual(format(i18n, -0.8), '1 second');
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(-4.2)),
|
||||
'4 seconds'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(-4.8)),
|
||||
'4 seconds'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(-0.2)),
|
||||
'1 second'
|
||||
);
|
||||
assert.strictEqual(
|
||||
format(i18n, DurationInSeconds.fromSeconds(-0.8)),
|
||||
'1 second'
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue