Files
2026-10-07 08:27:00 -05:00

31 lines
2.3 KiB
JavaScript

import assert from 'node:assert/strict';
import {dayKey, addDays, wallHour, layoutEvents} from '../static/app.js';
assert.equal(dayKey('2026-10-05T01:00:00Z'), '2026-10-04');
assert.equal(addDays('2026-10-31', 2), '2026-11-02');
assert.equal(wallHour('2026-11-02T15:00:00Z', '2026-11-02'), 9);
const event=(start,end)=>({start:`2026-10-04T${start}:00-05:00`,end:`2026-10-04T${end}:00-05:00`,allDay:false});
const blocks=layoutEvents([event('09:00','11:00'),event('10:00','12:00'),event('13:00','14:00')], '2026-10-04');
assert.deepEqual(blocks.map(b=>[b.column,b.columns]), [[0,2],[1,2],[0,1]]);
const overnight=layoutEvents([{start:'2026-10-03T23:00:00-05:00',end:'2026-10-04T02:00:00-05:00',allDay:false}], '2026-10-04');
assert.equal(overnight[0].start, 0);assert.equal(overnight[0].end, 2);
assert.equal(layoutEvents([event('09:00','10:00')], '2026-10-05').length, 0);
console.log('Overlap, midnight clipping, rolling dates and DST checks passed.');
const point=layoutEvents([{start:'2026-10-04T09:00:00-05:00',end:'2026-10-04T09:00:00-05:00',point:true,allDay:false}], '2026-10-04');
assert.equal(point.length,1);assert.equal(point[0].end,9);assert.equal(point[0].displayEnd,9.25);
assert.equal(layoutEvents([{start:'2026-10-03T09:00:00-05:00',end:'2026-10-03T09:00:00-05:00',point:true,allDay:false}], '2026-10-04').length,0);
const fold=layoutEvents([{start:'2026-11-01T01:45:00-05:00',end:'2026-11-01T01:15:00-06:00',allDay:false}], '2026-11-01');
assert.equal(fold.length,1);assert.equal(fold[0].end-fold[0].start,.5);
const {paginateHeights,sourceState}=await import('../static/app.js');
assert.deepEqual(paginateHeights([30,60,40,80],100),[[0,1],[2],[3]]);
assert.deepEqual(paginateHeights([150,20],100),[[0],[1]]);
assert.equal(sourceState({updated:'2000-01-01T00:00:00Z',status:'fresh'},Date.parse('2026-10-04T00:00:00Z')),'stale');
assert.equal(sourceState({updated:null,status:'unavailable'},Date.now()),'unavailable');
console.log('Point events, repeated DST hour, paging and stale-data checks passed.');
const {resolveTheme}=await import('../static/app.js');
assert.equal(resolveTheme('homeassistant'),'homeassistant');
assert.equal(resolveTheme('skylight'),'skylight');
assert.equal(resolveTheme(null),'skylight');
assert.equal(resolveTheme('<script>'),'skylight');
console.log('Theme selection and fallback checks passed.');