Files
Codeman/test/away-digest-ui.test.ts
2026-06-19 17:58:06 -04:00

43 lines
1.9 KiB
TypeScript

import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import { describe, expect, it } from 'vitest';
const indexHtml = readFileSync(join(process.cwd(), 'src/web/public/index.html'), 'utf-8');
const panelsJs = readFileSync(join(process.cwd(), 'src/web/public/panels-ui.js'), 'utf-8');
const stylesCss = readFileSync(join(process.cwd(), 'src/web/public/styles.css'), 'utf-8');
const mobileCss = readFileSync(join(process.cwd(), 'src/web/public/mobile.css'), 'utf-8');
describe('away digest UI', () => {
it('exposes a header entry point and modal shell', () => {
expect(indexHtml).toContain('onclick="app.openAwayDigest()"');
expect(indexHtml).toContain('aria-label="Open away digest"');
expect(indexHtml).toContain('id="awayDigestModal"');
expect(indexHtml).toContain('id="awayDigestSummary"');
expect(indexHtml).toContain('id="awayDigestSections"');
});
it('offers supported range controls', () => {
expect(indexHtml).toContain('data-away-range="since-last-visit"');
expect(indexHtml).toContain('data-away-range="1h"');
expect(indexHtml).toContain('data-away-range="today"');
expect(indexHtml).toContain('data-away-range="24h"');
expect(indexHtml).toContain('id="awayDigestCustomSince"');
expect(indexHtml).toContain('id="awayDigestCustomUntil"');
});
it('fetches the aggregate endpoint and preserves since-last-visit until successful close', () => {
expect(panelsJs).toContain('/api/away-digest');
expect(panelsJs).toContain('codeman-away-digest-last-viewed');
expect(panelsJs).toContain('openAwayDigest');
expect(panelsJs).toContain('closeAwayDigest');
});
it('has desktop and mobile layout styles', () => {
expect(stylesCss).toContain('.away-digest-modal');
expect(stylesCss).toContain('.away-digest-summary');
expect(stylesCss).toContain('.away-digest-item');
expect(mobileCss).toContain('.away-digest-modal');
expect(mobileCss).toContain('.away-digest-ranges');
});
});