Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { formatMessageTimestamp, formatTimelineRange, formatTimelineTimestamp } from './timestamp'
|
||||
|
||||
const labels = {
|
||||
today: (time: string) => `Today at ${time}`,
|
||||
yesterday: (time: string) => `Yesterday at ${time}`
|
||||
}
|
||||
|
||||
describe('formatMessageTimestamp', () => {
|
||||
it('returns an empty string for missing values', () => {
|
||||
expect(formatMessageTimestamp(undefined, labels)).toBe('')
|
||||
expect(formatMessageTimestamp('not-a-date', labels)).toBe('')
|
||||
})
|
||||
|
||||
it('uses the today label for timestamps earlier today', () => {
|
||||
const now = new Date()
|
||||
const earlierToday = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 30)
|
||||
expect(formatMessageTimestamp(earlierToday, labels)).toMatch(/^Today at /)
|
||||
})
|
||||
|
||||
it('uses the yesterday label for timestamps the prior day', () => {
|
||||
const now = new Date()
|
||||
const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 8, 0)
|
||||
yesterday.setDate(yesterday.getDate() - 1)
|
||||
expect(formatMessageTimestamp(yesterday, labels)).toMatch(/^Yesterday at /)
|
||||
})
|
||||
|
||||
it('falls back to an absolute format for older timestamps', () => {
|
||||
const old = new Date(2020, 0, 15, 9, 30)
|
||||
const out = formatMessageTimestamp(old, labels)
|
||||
expect(out).not.toMatch(/^Today at /)
|
||||
expect(out).not.toMatch(/^Yesterday at /)
|
||||
expect(out.length).toBeGreaterThan(0)
|
||||
})
|
||||
})
|
||||
|
||||
describe('precise timeline timestamps', () => {
|
||||
it('includes seconds and milliseconds for an event', () => {
|
||||
const local = new Date(2026, 4, 1, 13, 2, 3, 456)
|
||||
const formatted = formatTimelineTimestamp(local.getTime() / 1000)
|
||||
|
||||
expect(formatted).toMatch(/13|1/)
|
||||
expect(formatted).toContain('02')
|
||||
expect(formatted).toContain('03')
|
||||
expect(formatted).toContain('456')
|
||||
})
|
||||
|
||||
it('renders start and finish as a range', () => {
|
||||
const start = new Date(2026, 4, 1, 13, 2, 3, 456).getTime() / 1000
|
||||
const finish = start + 1.25
|
||||
|
||||
expect(formatTimelineRange(start, finish)).toBe(
|
||||
`${formatTimelineTimestamp(start)} → ${formatTimelineTimestamp(finish)}`
|
||||
)
|
||||
})
|
||||
|
||||
it('returns an empty string for invalid timeline values', () => {
|
||||
expect(formatTimelineTimestamp(undefined)).toBe('')
|
||||
expect(formatTimelineTimestamp(Number.NaN)).toBe('')
|
||||
expect(formatTimelineRange(undefined, 10)).toBe('')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user