115 lines
3.7 KiB
JavaScript
115 lines
3.7 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
require('../src/common');
|
|
|
|
const packageJson = require('../package.json');
|
|
const pages = require('../src/web/pages');
|
|
const registerAboutRoutes = require('../src/web/routes/settings/about/routes');
|
|
const renderAboutPage = require('../src/web/routes/settings/about');
|
|
const registerChangelogRoutes = require('../src/web/routes/settings/changelog/routes');
|
|
const renderChangelogPage = require('../src/web/routes/settings/changelog');
|
|
|
|
test('about page renders the footer link beside the version and lists bundled libraries', () => {
|
|
const html = pages.renderAboutPage({ id: 1 });
|
|
const libraries = renderAboutPage.buildLibraryList();
|
|
|
|
const orderedNames = libraries.map(function (library) {
|
|
return library.name;
|
|
});
|
|
let previousIndex = -1;
|
|
|
|
orderedNames.forEach(function (name) {
|
|
const currentIndex = html.indexOf(name);
|
|
assert.ok(currentIndex >= 0, `missing ${name}`);
|
|
assert.ok(currentIndex > previousIndex, `${name} is out of order`);
|
|
previousIndex = currentIndex;
|
|
});
|
|
|
|
assert.match(html, new RegExp('v' + packageJson.version.split('.').join('\\.')));
|
|
assert.match(html, /About Pulse/);
|
|
assert.match(html, /href="\/settings\/about"/);
|
|
assert.match(html, /href="\/settings\/changelog"/);
|
|
assert.match(html, />Changelog<\/a>/);
|
|
assert.match(html, /bi-git me-1/);
|
|
assert.doesNotMatch(html, /bi-github/);
|
|
libraries.forEach(function (library) {
|
|
assert.ok(library.version, `${library.name} version is missing`);
|
|
assert.match(html, new RegExp(`>${library.version}<`));
|
|
});
|
|
assert.match(html, /card card-outline card-primary h-100 overflow-hidden/);
|
|
assert.doesNotMatch(html, /rounded-3 overflow-hidden border/);
|
|
});
|
|
|
|
test('about route sends the about page', async () => {
|
|
const handlers = {};
|
|
const app = {
|
|
get(path, ...routeHandlers) {
|
|
handlers[path] = routeHandlers;
|
|
}
|
|
};
|
|
|
|
registerAboutRoutes(app, {
|
|
pages: {
|
|
renderAboutPage(currentUser) {
|
|
return currentUser && currentUser.id === 7 ? 'about-page' : 'unexpected';
|
|
}
|
|
}
|
|
});
|
|
|
|
const response = {
|
|
body: null,
|
|
send(value) {
|
|
this.body = value;
|
|
return this;
|
|
}
|
|
};
|
|
|
|
await handlers['/settings/about'][0]({ currentUser: { id: 7 } }, response, function () {});
|
|
|
|
assert.equal(response.body, 'about-page');
|
|
});
|
|
|
|
test('changelog page renders release notes from the project changelog', () => {
|
|
const html = pages.renderChangelogPage({ id: 1 });
|
|
const parsed = renderChangelogPage.parseChangelog('## 1.2.3 - 2026-01-02\n\n### Added\n\n- New feature');
|
|
|
|
assert.ok(parsed.length > 0);
|
|
assert.equal(parsed[0].version, '1.2.3');
|
|
assert.equal(parsed[0].sections[0].items[0], 'New feature');
|
|
assert.match(html, /Changelog/);
|
|
assert.match(html, new RegExp(packageJson.version.replaceAll('.', '\\.')));
|
|
assert.match(html, /Updates and fixes across Pulse Signage releases/);
|
|
assert.match(html, /<details class="changelog-release"[^>]*open/);
|
|
assert.match(html, /Latest release/);
|
|
assert.match(html, /API source Enable\/Disable action/);
|
|
});
|
|
|
|
test('changelog route sends the changelog page', async () => {
|
|
const handlers = {};
|
|
const app = {
|
|
get(path, ...routeHandlers) {
|
|
handlers[path] = routeHandlers;
|
|
}
|
|
};
|
|
|
|
registerChangelogRoutes(app, {
|
|
pages: {
|
|
renderChangelogPage(currentUser) {
|
|
return currentUser && currentUser.id === 7 ? 'changelog-page' : 'unexpected';
|
|
}
|
|
}
|
|
});
|
|
|
|
const response = {
|
|
body: null,
|
|
send(value) {
|
|
this.body = value;
|
|
return this;
|
|
}
|
|
};
|
|
|
|
await handlers['/settings/changelog'][0]({ currentUser: { id: 7 } }, response, function () {});
|
|
|
|
assert.equal(response.body, 'changelog-page');
|
|
}); |