This commit is contained in:
2026-10-27 09:38:05 +07:00
parent 1ce8efeef5
commit ccf7240584
8 changed files with 147 additions and 3 deletions
+42
View File
@@ -0,0 +1,42 @@
import assert from 'node:assert/strict'
import { test } from 'node:test'
import { formatGameDuration } from '../src/utils/gameDuration.js'
const start = '2026-10-27T08:00:00Z'
const now = Date.parse(start)
const actualNow = now + new Date(now).getTimezoneOffset() * 60000
test('длительность игры форматируется на границах единиц времени', () => {
for (const [seconds, expected] of [
[0, '0с'], [59, '59с'], [60, '1м 0с'], [3599, '59м 59с'],
[3600, '1ч 0м'], [86399, '23ч 59м'], [86400, '1д 0ч'],
[30 * 86400, '1мес 0д'], [365 * 86400, '1г 0д'],
] as const) {
assert.equal(formatGameDuration(start, '', actualNow + seconds * 1000), expected)
}
assert.equal(formatGameDuration('2026-10-27T11:00:00+03:00', '', actualNow + 60000), '1м 0с')
})
test('начало, завершение и некорректные даты обрабатываются явно', () => {
assert.equal(formatGameDuration('', '', now), 'Игра ещё не началась')
assert.equal(formatGameDuration(start, '', actualNow - 1), 'Игра ещё не началась')
assert.equal(formatGameDuration(start, '2026-10-27T09:12:00Z', now + 86400000), '1ч 12м')
assert.equal(formatGameDuration('invalid', '', now), 'Время игры недоступно')
assert.equal(formatGameDuration(start, 'invalid', now), 'Время игры недоступно')
})
test('идущая игра считает местные часы сервера как вкладка «Игра»', (t) => {
const previousTimezone = process.env.TZ
t.after(() => {
if (previousTimezone === undefined) delete process.env.TZ
else process.env.TZ = previousTimezone
})
process.env.TZ = 'Asia/Barnaul'
const now = Date.parse('2026-10-27T08:12:00Z')
// В Барнауле игра началась в 15:00; API возвращает эти часы с суффиксом Z.
assert.equal(formatGameDuration('2026-10-27T15:00:00Z', '', now), '12м 0с')
assert.equal(formatGameDuration('2026-10-27T15:00:00Z', '', now + 1000), '12м 1с')
assert.equal(formatGameDuration('2026-10-27T15:00:00Z', '2026-10-27T15:05:00Z', now), '5м 0с')
process.env.TZ = 'UTC'
assert.equal(formatGameDuration('2026-10-27T08:00:00Z', '', now), '12м 0с')
})