83 lines
2.6 KiB
JavaScript
83 lines
2.6 KiB
JavaScript
const { describe, it } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const { parseEventToMeeting, formatEventChoice, isRecurring } = require('../lib/o365-calendar.js');
|
|
|
|
describe('parseEventToMeeting', () => {
|
|
it('extracts meeting data from Graph API event', () => {
|
|
const event = {
|
|
id: 'AAMkAG123',
|
|
subject: 'IT Team Weekly',
|
|
start: { dateTime: '2026-04-14T09:00:00', timeZone: 'Europe/Berlin' },
|
|
end: { dateTime: '2026-04-14T10:00:00', timeZone: 'Europe/Berlin' },
|
|
body: { content: '<p>Agenda: Status updates</p>', contentType: 'html' },
|
|
attendees: [
|
|
{
|
|
emailAddress: { name: 'Christopher Klein', address: 'c.klein@krah.de' },
|
|
type: 'required'
|
|
},
|
|
{
|
|
emailAddress: { name: 'Philip Losch', address: 'p.losch@krah.de' },
|
|
type: 'required'
|
|
}
|
|
],
|
|
seriesMasterId: 'AAMkSeries456'
|
|
};
|
|
|
|
const result = parseEventToMeeting(event);
|
|
|
|
assert.equal(result.id, 'AAMkAG123');
|
|
assert.equal(result.title, 'IT Team Weekly');
|
|
assert.equal(result.date, '2026-04-14');
|
|
assert.equal(result.start, '09:00');
|
|
assert.equal(result.end, '10:00');
|
|
assert.equal(result.bodyText, 'Agenda: Status updates');
|
|
assert.equal(result.attendees.length, 2);
|
|
assert.equal(result.attendees[0].email, 'c.klein@krah.de');
|
|
assert.equal(result.attendees[0].name, 'Christopher Klein');
|
|
assert.equal(result.isRecurring, true);
|
|
});
|
|
|
|
it('handles event without attendees', () => {
|
|
const event = {
|
|
id: 'AAMkAG789',
|
|
subject: 'Focus Time',
|
|
start: { dateTime: '2026-04-14T14:00:00', timeZone: 'Europe/Berlin' },
|
|
end: { dateTime: '2026-04-14T15:00:00', timeZone: 'Europe/Berlin' },
|
|
body: { content: '', contentType: 'text' },
|
|
attendees: []
|
|
};
|
|
|
|
const result = parseEventToMeeting(event);
|
|
|
|
assert.equal(result.attendees.length, 0);
|
|
assert.equal(result.isRecurring, false);
|
|
assert.equal(result.bodyText, '');
|
|
});
|
|
});
|
|
|
|
describe('formatEventChoice', () => {
|
|
it('formats event for selection list', () => {
|
|
const meeting = {
|
|
title: 'IT Team Weekly',
|
|
date: '2026-04-14',
|
|
start: '09:00',
|
|
end: '10:00'
|
|
};
|
|
|
|
const result = formatEventChoice(meeting);
|
|
|
|
assert.equal(result, '📅 09:00-10:00 IT Team Weekly');
|
|
});
|
|
});
|
|
|
|
describe('isRecurring', () => {
|
|
it('returns true when seriesMasterId exists', () => {
|
|
assert.equal(isRecurring({ seriesMasterId: 'ABC' }), true);
|
|
});
|
|
|
|
it('returns false when no seriesMasterId', () => {
|
|
assert.equal(isRecurring({}), false);
|
|
assert.equal(isRecurring({ seriesMasterId: null }), false);
|
|
});
|
|
});
|