'use strict'; const test = require('node:test'); const assert = require('node:assert/strict'); const { SETTINGS_SECTIONS, SCRAPER_TABS, settingsRoute, readingDayText } = require('../public/settings-nav'); test('settings organize unique routes into User and Admin, with scraper-local tabs', () => { assert.equal(new Set(SETTINGS_SECTIONS.map(s => s.id)).size, SETTINGS_SECTIONS.length); assert.deepEqual([...new Set(SETTINGS_SECTIONS.map(s => s.group))], ['User', 'Admin']); assert.ok(SETTINGS_SECTIONS.every(s => s.id.split('/').length === 2)); assert.deepEqual(SCRAPER_TABS, ['activity', 'queue', 'updates', 'sources']); for (const section of SETTINGS_SECTIONS) assert.equal(settingsRoute('#' + section.id, true).id, section.id); }); test('settings deep links default safely and never route ordinary readers into admin', () => { assert.deepEqual(settingsRoute('', false), { id: 'user/reading', tab: 'activity' }); assert.equal(settingsRoute('#not/a/section', true).id, 'user/reading'); assert.equal(settingsRoute('#admin/users', false).id, 'user/reading'); assert.equal(settingsRoute('#admin/scraper/hosters', false).id, 'user/reading'); assert.equal(settingsRoute('#user/notifications', false).id, 'user/notifications'); assert.deepEqual(settingsRoute('#admin/scraper/hosters', true), { id: 'admin/scraper', tab: 'sources' }); assert.deepEqual(settingsRoute('#admin/scraper/sources', true), { id: 'admin/scraper', tab: 'sources' }); assert.equal(settingsRoute('#admin/scraper/unknown', true).tab, 'activity'); }); test('reading-hours rows include overnight carry from the previous day', () => { const schedule = { days: [ [['08:00', '01:00']], [['07:00', '24:00']], [], [], [], [], [['08:00', '01:00']], ] }; assert.equal(readingDayText(schedule, 0), '00:00–01:00 (from Saturday) · 08:00–01:00 (next day)'); assert.equal(readingDayText(schedule, 1), '00:00–01:00 (from Sunday) · 07:00–24:00'); assert.equal(readingDayText(schedule, 2), 'Closed all day'); });