const { describe, it } = require('node:test'); const assert = require('node:assert/strict'); const { detectSeries, loadJourFixeAgenda, buildMeetingNote, buildFileName } = require('../lib/meeting-builder.js'); describe('detectSeries', () => { const jourFixeFolders = ['IT Team', 'Christian Hermann', 'SAP Team']; it('matches event title to Jour Fixe folder', () => { assert.equal(detectSeries('IT Team Weekly', jourFixeFolders), 'IT Team'); }); it('matches partial title containing folder name', () => { assert.equal(detectSeries('Jour Fixe Christian Hermann', jourFixeFolders), 'Christian Hermann'); }); it('returns empty string for no match', () => { assert.equal(detectSeries('Call mit LANdata', jourFixeFolders), ''); }); }); describe('buildFileName', () => { it('builds date-prefixed filename', () => { assert.equal(buildFileName('2026-04-14', 'IT Team Weekly'), '2026-04-14 IT Team Weekly.md'); }); it('sanitizes invalid filename characters', () => { assert.equal( buildFileName('2026-04-14', 'Review: Q2/Q3 Plan'), '2026-04-14 Review - Q2-Q3 Plan.md' ); }); }); describe('buildMeetingNote', () => { it('generates complete meeting note markdown', () => { const data = { title: 'IT Team Weekly', date: '2026-04-14', start: '09:00', end: '10:00', serie: 'IT Team', o365_id: 'AAMkAG123', teilnehmer: [ { wikilink: '[[Christopher Klein]]', name: 'Christopher Klein', isNew: false }, { wikilink: '[[Philip Losch]]', name: 'Philip Losch', isNew: false } ], agenda: '- Allgemeiner Status-Update KIT' }; const note = buildMeetingNote(data); assert.ok(note.includes('tags: [meeting]')); assert.ok(note.includes('date: 2026-04-14')); assert.ok(note.includes('serie: "IT Team"')); assert.ok(note.includes('- "[[Christopher Klein]]"')); assert.ok(note.includes('# IT Team Weekly')); assert.ok(note.includes('- Allgemeiner Status-Update KIT')); }); });