import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { deriveRoomSections, sectionTag, validateSectionName } from './roomSections'; describe('deriveRoomSections', () => { it('groups by u.* tags, orders members by order then name, sections by name', () => { const { sections, sectioned } = deriveRoomSections([ { roomId: '!a', name: 'Alpha', tags: { 'u.Raids': { order: 0.7 } } }, { roomId: '!b', name: 'Beta', tags: { 'u.Raids': { order: 0.2 }, 'm.favourite': {} } }, { roomId: '!c', name: 'Gamma', tags: { 'u.Raids': {}, 'u.off-topic': { order: '0.1' } } }, { roomId: '!d', name: 'Delta', tags: { 'm.lowpriority': {} } }, { roomId: '!e', name: 'Eps', tags: undefined }, ]); assert.deepEqual( sections.map((s) => [s.name, s.tag, s.rooms]), [ ['off-topic', 'u.off-topic', ['!c']], ['Raids', 'u.Raids', ['!b', '!a', '!c']], ], ); assert.deepEqual([...sectioned].sort(), ['!a', '!b', '!c']); }); it('has no empty sections', () => { assert.deepEqual(deriveRoomSections([{ roomId: '!a', name: 'A', tags: {} }]).sections, []); }); it('ignores m.* and malformed u. tags', () => { const { sections } = deriveRoomSections([ { roomId: '!a', name: 'A', tags: { 'm.favourite': {}, 'u.': {}, 'x.y': {} } }, ]); assert.deepEqual(sections, []); }); }); describe('section names', () => { it('builds the tag and validates input', () => { assert.equal(sectionTag(' Raids '), 'u.Raids'); assert.equal(validateSectionName('Raids', []), undefined); assert.ok(validateSectionName('', [])); assert.ok(validateSectionName('raids', ['Raids'])); assert.ok(validateSectionName('a.b', [])); assert.ok(validateSectionName('x'.repeat(41), [])); }); });