v0.31.4
This commit is contained in:
1 parent
95c55da2ee
commit
d942c1a35d
42 files changed
+1265
-109
No files matched your search
@@ -0,0 +1,52 @@
|
||||
// Test the real admin settings normalization helpers and visible form wiring;
|
||||
// source-level UI test only, not a Rust or browser integration test.
|
||||
import assert from 'node:assert/strict';
|
||||
import fs from 'node:fs';
|
||||
import vm from 'node:vm';
|
||||
|
||||
const js = fs.readFileSync('src/admin/web/settings.js','utf8');
|
||||
const html = fs.readFileSync('src/admin/web/index.html','utf8');
|
||||
const en = JSON.parse(fs.readFileSync('langs/en_US.json','utf8'));
|
||||
const pl = JSON.parse(fs.readFileSync('langs/pl_pl.json','utf8'));
|
||||
const api = JSON.parse(fs.readFileSync('src/admin/openapi.json','utf8'));
|
||||
const begin = js.indexOf(' function pinnedAdminHostname(value) {');
|
||||
const end = js.indexOf(' const normalizedRequestedTab', begin);
|
||||
assert(begin >= 0 && end > begin, 'real admin form normalization helpers must exist');
|
||||
const sandbox = vm.createContext({URL});
|
||||
vm.runInContext(js.slice(begin,end),sandbox);
|
||||
const normalize = (hosts, pin) => Array.from(vm.runInContext(
|
||||
`additionalAdminHosts(${JSON.stringify(hosts)},${JSON.stringify(pin)})`,sandbox));
|
||||
|
||||
const cases = [
|
||||
{name:'empty form',hosts:[],pin:null,expected:[]},
|
||||
{name:'simple single origin',hosts:[],pin:'https://panel.example.test',expected:[]},
|
||||
{name:'0.31.4 repeated host',hosts:['panel.example.test'],pin:'https://panel.example.test',expected:[]},
|
||||
{name:'case and trailing dot',hosts:['PANEL.Example.Test.',' other.example.test '],pin:'https://panel.example.test:8443',expected:['other.example.test']},
|
||||
{name:'multiple additional names',hosts:['foo.example.test','panel.example.test','bar.example.test'],pin:'https://panel.example.test',expected:['foo.example.test','bar.example.test']},
|
||||
{name:'pin changed',hosts:['other.example.test'],pin:'https://new.example.test',expected:['other.example.test']},
|
||||
{name:'no pin means independent allowlist',hosts:['panel.example.test'],pin:'',expected:['panel.example.test']},
|
||||
{name:'invalid URL delegates to server validation',hosts:['other.example.test'],pin:'not a url',expected:['other.example.test']},
|
||||
{name:'blank host lines removed',hosts:['',' panel.example.test ',' '],pin:null,expected:['panel.example.test']},
|
||||
];
|
||||
for (const item of cases) {
|
||||
assert.deepEqual(normalize(item.hosts,item.pin),item.expected,item.name);
|
||||
}
|
||||
const admin = html.split('id="settings-page-administration"')[1].split('id="settings-page-system-info"')[0];
|
||||
for (const id of ['admin-public-origin','admin-extra-hosts-details','admin-hosts'])
|
||||
assert(admin.includes(`id="${id}"`),`missing ${id}`);
|
||||
assert(admin.indexOf('id="admin-public-origin"') < admin.indexOf('id="admin-extra-hosts-details"'));
|
||||
assert(admin.includes('<details id="admin-extra-hosts-details">'));
|
||||
assert(js.includes('$("admin-extra-hosts-details").open = extraHosts.length > 0'));
|
||||
assert(js.includes('additionalAdminHosts(admin.allowed_hosts || [], admin.public_origin)'));
|
||||
assert(js.includes('allowed_hosts: additionalAdminHosts($("admin-hosts").value.split('));
|
||||
assert(!js.includes('allowed_hosts: $("admin-hosts").value.split('));
|
||||
for (const key of ['administrationHosts','administrationHostsAdvanced','administrationHostsHelp','administrationPublicOriginHelp']) {
|
||||
assert.equal(typeof en.translations[key],'string'); assert.equal(typeof pl.translations[key],'string');
|
||||
assert(en.translations[key].length > 15 && pl.translations[key].length > 15,key);
|
||||
}
|
||||
// Config contract remains compatible; the pin allows a host implicitly.
|
||||
const spec = api.components?.schemas || api.definitions;
|
||||
const specText=JSON.stringify(spec);
|
||||
assert(specText.includes('implicitly allowed'));
|
||||
assert(specText.includes('automatically allowed'));
|
||||
console.log(`PASS: ${cases.length} real settings-helper scenarios, HTML/wiring, locale parity and OpenAPI descriptions`);
|
||||
Reference in new issue
Block a user