33 lines
2.0 KiB
JavaScript
33 lines
2.0 KiB
JavaScript
'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');
|
||
});
|