Files
zkxw/web-admin/src/utils/oa-overtime-hours.test.ts
T
2026-08-11 11:13:01 +08:00

67 lines
1.6 KiB
TypeScript

import { describe, it } from 'node:test'
import assert from 'node:assert/strict'
import {
calcOvertimeHours,
DEFAULT_OVERTIME_WINDOWS,
type RestDayResolver
} from './oa-overtime-hours'
/** 固定:2026-08-07 周五工作日,08-08 周六休息日 */
const restMap: Record<string, boolean> = {
'2026-08-07': false,
'2026-08-08': true,
'2026-08-09': true
}
function isRestDay(ymd: string): boolean {
if (ymd in restMap) return restMap[ymd]
const d = new Date(ymd + 'T00:00:00')
const w = d.getDay()
return w === 0 || w === 6
}
describe('calcOvertimeHours', () => {
const w = DEFAULT_OVERTIME_WINDOWS
it('weekday 18:00-20:00 => 2.0', () => {
assert.equal(
calcOvertimeHours('2026-08-07 18:00', '2026-08-07 20:00', w, isRestDay),
2.0
)
})
it('weekday 14:00-18:00 => 0.5', () => {
assert.equal(
calcOvertimeHours('2026-08-07 14:00', '2026-08-07 18:00', w, isRestDay),
0.5
)
})
it('weekday 17:30 to next 08:30 => 15.0', () => {
assert.equal(
calcOvertimeHours('2026-08-07 17:30', '2026-08-08 08:30', w, isRestDay),
15.0
)
})
it('Saturday 09:00-15:00 => 4.0', () => {
assert.equal(
calcOvertimeHours('2026-08-08 09:00', '2026-08-08 15:00', w, isRestDay),
4.0
)
})
it('Fri 18:00 - Sat 12:00 => 17.5', () => {
assert.equal(
calcOvertimeHours('2026-08-07 18:00', '2026-08-08 12:00', w, isRestDay),
17.5
)
})
it('end <= start => null', () => {
assert.equal(
calcOvertimeHours('2026-08-07 20:00', '2026-08-07 18:00', w, isRestDay),
null
)
})
})