60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
import assert from "node:assert/strict"
|
|
import test from "node:test"
|
|
|
|
import { buildDayTimeLayout } from "./calendar-time-layout.ts"
|
|
|
|
test("scales schedule bars by the visible span of that day", () => {
|
|
const layout = buildDayTimeLayout(
|
|
[
|
|
{ id: 1, startAt: "2026-04-29 07:00:00", endAt: "2026-04-29 17:00:00" },
|
|
{ id: 2, startAt: "2026-04-29 09:00:00", endAt: "2026-04-29 12:00:00" },
|
|
{ id: 3, startAt: "2026-04-29 13:00:00", endAt: "2026-04-29 17:00:00" },
|
|
],
|
|
new Date(2026, 3, 29)
|
|
)
|
|
|
|
assert.equal(layout.rangeLabel, "07:00 - 17:00")
|
|
assert.deepEqual(layout.items.get(1), {
|
|
leftPercent: 0,
|
|
widthPercent: 100,
|
|
startLabel: "07:00",
|
|
endLabel: "17:00",
|
|
})
|
|
assert.deepEqual(layout.items.get(2), {
|
|
leftPercent: 20,
|
|
widthPercent: 30,
|
|
startLabel: "09:00",
|
|
endLabel: "12:00",
|
|
})
|
|
assert.deepEqual(layout.items.get(3), {
|
|
leftPercent: 60,
|
|
widthPercent: 40,
|
|
startLabel: "13:00",
|
|
endLabel: "17:00",
|
|
})
|
|
})
|
|
|
|
test("clips cross-day schedules to the current day before scaling", () => {
|
|
const layout = buildDayTimeLayout(
|
|
[
|
|
{ id: 1, startAt: "2026-04-28 22:00:00", endAt: "2026-04-29 08:00:00" },
|
|
{ id: 2, startAt: "2026-04-29 07:00:00", endAt: "2026-04-29 17:00:00" },
|
|
],
|
|
new Date(2026, 3, 29)
|
|
)
|
|
|
|
assert.equal(layout.rangeLabel, "00:00 - 17:00")
|
|
assert.deepEqual(layout.items.get(1), {
|
|
leftPercent: 0,
|
|
widthPercent: 47.06,
|
|
startLabel: "00:00",
|
|
endLabel: "08:00",
|
|
})
|
|
assert.deepEqual(layout.items.get(2), {
|
|
leftPercent: 41.18,
|
|
widthPercent: 58.82,
|
|
startLabel: "07:00",
|
|
endLabel: "17:00",
|
|
})
|
|
})
|