import test from 'node:test' import assert from 'node:assert/strict' import { loadModule } from './load.mjs' const w = await loadModule('src/lib/worksheetView.js') const ws = (o = {}) => ({ totalTime: 60, isComment: false, countsToPlan: false, serviceType: 'Remote', ...o }) const sup = (n, name = 'Anna Meier') => JSON.stringify(Array.from({ length: n }, (_, i) => ({ employeeId: 'e' + i, name, task: 'DNS' }))) test('worksheetSums: Kommentare zählen nie, Abo nur countsToPlan, Zeiten offen', () => { const list = [ws(), ws({ supporters: sup(1), countsToPlan: true }), ws({ isComment: true, totalTime: 0 }), ws({ serviceType: 'GIT', isComment: true, totalTime: 0 }), ws({ serviceType: 'GIT', totalTime: 30, startTime: '0900' })] assert.deepEqual(w.worksheetSums(list), { totalMinutes: 180, aboMinutes: 90, openCount: 1 }) assert.deepEqual(w.worksheetSums([]), { totalMinutes: 0, aboMinutes: 0, openCount: 0 }) assert.deepEqual(w.worksheetSums([ws({ isComment: true, countsToPlan: true })]), { totalMinutes: 0, aboMinutes: 0, openCount: 0 }) }) test('showAboToggle: Regel bleibt exakt', () => { assert.equal(w.showAboToggle(ws(), true), true) assert.equal(w.showAboToggle(ws(), false), false) assert.equal(w.showAboToggle(ws({ countsToPlan: true }), false), true) assert.equal(w.showAboToggle(ws({ totalTime: 0 }), true), false) assert.equal(w.showAboToggle(ws({ isComment: true }), true), false) assert.equal(w.showAboToggle(ws({ totalTime: '45' }), true), true) }) test('worksheetWhen: Start-, sonst Endzweig, Altwerte als Rohtext', () => { assert.deepEqual(w.worksheetWhen({ startDate: '2.5.2026', startTime: '0930', endDate: '2.5.2026', endTime: '1100' }), { date: '02.05.2026', time: '09:30' }) assert.deepEqual(w.worksheetWhen({ startDate: '', startTime: '', endDate: '31.02.2026', endTime: '1405' }), { date: '31.02.2026', time: '14:05' }) assert.deepEqual(w.worksheetWhen({ startDate: '03.10.2026', startTime: '' }), { date: '03.10.2026', time: '' }) assert.deepEqual(w.worksheetWhen({}), { date: '', time: '' }) }) test('Art, Badge, Status danach, Zeit', () => { assert.equal(w.worksheetKindLabel(ws({ isComment: true })), 'Kommentar') assert.deepEqual(['Remote', 'On Site', 'Off Site', 'GIT'].map((s) => w.worksheetKindLabel(ws({ serviceType: s, isComment: s === 'GIT' }))), ['Fernwartung', 'Vor Ort', 'Fernwartung', 'GIT']) assert.deepEqual(w.worksheetBadge(ws({ serviceType: 'GIT', isComment: true, totalTime: 0 })), { tone: 'orange', text: 'Zeit offen' }) assert.deepEqual(w.worksheetBadge(ws({ serviceType: 'GIT', startTime: '0900' })), { tone: 'green', text: 'Zeit eingetragen' }) assert.equal(w.worksheetBadge(ws()), null) assert.equal(w.statusAfterLabel({ oldStatus: 'Open', newStatus: 'Occupied' }), 'Status danach: In Arbeit') assert.equal(w.statusAfterLabel({ oldStatus: 'Closed', newStatus: 'Open' }), 'Status danach: Offen') assert.equal(w.statusAfterLabel({ oldStatus: 'Open', newStatus: 'Completed' }), 'Status danach: Completed') for (const same of [{ oldStatus: 'Open', newStatus: 'Open' }, { oldStatus: 'Open', newStatus: '' }, {}]) assert.equal(w.statusAfterLabel(same), '') assert.deepEqual([ws({ isComment: true }), ws({ totalTime: 0 }), ws({ totalTime: 90 }), ws({ totalTime: '45' })].map(w.timeLabel), ['', '–', '1 h 30 min', '45 min']) }) test('supportLines: je Person eine Zeile, Wörter wie bisher', () => { assert.deepEqual(w.supportLines(ws({ supporters: sup(1) })), ['Unterstützung Anna · DNS · 30 min']) assert.deepEqual(w.supportLines(ws({ totalTime: 75, supporters: sup(1, '') })), ['Unterstützung · DNS · 45 min']) assert.deepEqual(w.supportLines(ws({ isComment: true, supporters: sup(1) })), []) assert.deepEqual(w.supportLines(ws({ supporters: '{kaputt' })), []) })