quiet-hours.test.js 1.42 KB
import { describe, expect, it } from 'vitest'
import { nextAllowedSendTime } from '../src/quiet-hours.js'

const night = { timezone: 'Asia/Shanghai', quiet_start_hour: 23, quiet_end_hour: 8 }

describe('安静时段', () => {
  it('不在安静时段 → 立即', () => {
    const now = new Date('2026-10-12T04:00:00.000Z') // 上海 12:00
    expect(nextAllowedSendTime(now, night)).toBe(now)
  })

  it('跨午夜的安静时段:23:30 与 02:15 都推迟到当地 08:00', () => {
    expect(nextAllowedSendTime(new Date('2026-10-12T15:30:00.000Z'), night)).toEqual(new Date('2026-10-13T00:00:00.000Z'))
    expect(nextAllowedSendTime(new Date('2026-10-12T18:15:20.500Z'), night)).toEqual(new Date('2026-10-13T00:00:00.000Z'))
  })

  it('边界:23:00 整算安静,08:00 整不算', () => {
    expect(nextAllowedSendTime(new Date('2026-10-12T15:00:00.000Z'), night)).toEqual(new Date('2026-10-13T00:00:00.000Z'))
    const eight = new Date('2026-10-13T00:00:00.000Z')
    expect(nextAllowedSendTime(eight, night)).toBe(eight)
  })

  it('不跨午夜的安静时段,以及起止相同表示不设安静时段', () => {
    const noon = new Date('2026-10-12T12:30:00.000Z')
    expect(nextAllowedSendTime(noon, { timezone: 'UTC', quiet_start_hour: 12, quiet_end_hour: 14 })).toEqual(new Date('2026-10-12T14:00:00.000Z'))
    expect(nextAllowedSendTime(noon, { timezone: 'UTC', quiet_start_hour: 9, quiet_end_hour: 9 })).toBe(noon)
  })
})