Files
tg-shuttle-score/test/history.test.js
T

56 lines
2.0 KiB
JavaScript
Raw Normal View History

import { test } from 'node:test'
import assert from 'node:assert/strict'
import { addPoint, createMatch, setFirstServer, settleMatch } from '../src/match.js'
import { buildHistoryPayload, saveHistory } from '../src/history.js'
test('buildHistoryPayload:欄位對齊 web 版 history(雙打)', () => {
const m = createMatch(['Gary', '蓉蓉'], ['柏威', '小念'])
setFirstServer(m, 0)
addPoint(m, 0)
addPoint(m, 1)
settleMatch(m)
const now = new Date('2026-08-17T20:30:00+08:00') // 週一
const p = buildHistoryPayload(m, now)
assert.deepEqual(p, {
time: Math.floor(now.getTime() / 1000),
dayOfWeek: 1,
score: [1, 1],
winScore: 21,
type: 0,
players: ['Gary', '蓉蓉', '柏威', '小念'],
team: [['Gary', '蓉蓉'], ['柏威', '小念']],
scoreList: [[0, 0, 0, 0], [1, 1, 0, 1]],
})
})
test('buildHistoryPayload:單打 players 以 [p1,p1,p3,p3] 讓 players[starter] 對得到人', () => {
const m = createMatch(['A'], ['B'], 15)
setFirstServer(m, 1)
addPoint(m, 1)
const p = buildHistoryPayload(m)
assert.equal(p.type, 1)
assert.equal(p.winScore, 15)
assert.deepEqual(p.players, ['A', 'A', 'B', 'B'])
assert.deepEqual(p.team, [['A'], ['B']])
assert.equal(p.players[p.scoreList[0][1]], 'B')
})
test('saveHistory:先 ensure table 再 INSERT,回傳 insertId', async () => {
const sqls = []
const query = async (sql, params) => {
sqls.push({ sql: sql.replace(/\s+/g, ' ').trim(), params })
return sql.includes('INSERT') ? { insertId: 42 } : []
}
const m = createMatch(['A', 'B'], ['C', 'D'])
setFirstServer(m, 0)
addPoint(m, 0)
const id = await saveHistory(m, { query, table: 'history_test' })
assert.equal(id, 42)
assert.match(sqls[0].sql, /CREATE TABLE IF NOT EXISTS `history_test`/)
assert.match(sqls[1].sql, /INSERT INTO `history_test` \(time, dayOfWeek, score, winScore, type, players, team, scoreList\)/)
assert.equal(sqls[1].params[2], '[1,0]')
assert.equal(sqls[1].params[5], '["A","B","C","D"]')
assert.equal(sqls[1].params[6], '[["A","B"],["C","D"]]')
assert.equal(sqls[1].params[7], '[[0,0,0,0]]')
})