Add app_base/router_base config, compat path helpers, and scoped service worker registration so apps can mount under a URL prefix. Wire invoke_type modal through a handler registry and open the notification center from the standard menu flow. Co-authored-by: Cursor <cursoragent@cursor.com>
39 lines
1.6 KiB
JavaScript
39 lines
1.6 KiB
JavaScript
import { describe, it } from 'node:test';
|
|
import assert from 'node:assert';
|
|
import {
|
|
getViteBasePath,
|
|
prefixPublicAssetPath,
|
|
stripRouterBase,
|
|
withRouterBase
|
|
} from '../src/platform/compat.js';
|
|
import { initEnv, getConfigSync, CONFIG_KEYS } from '../src/platform/env.js';
|
|
|
|
describe('compat path helpers', () => {
|
|
it('normalizes vite base paths', () => {
|
|
assert.strictEqual(getViteBasePath('/'), '/');
|
|
assert.strictEqual(getViteBasePath('/admin'), '/admin/');
|
|
assert.strictEqual(getViteBasePath('/admin/'), '/admin/');
|
|
});
|
|
|
|
it('maps internal routes to public URLs and back', () => {
|
|
assert.strictEqual(withRouterBase('/home', '/admin'), '/admin/home');
|
|
assert.strictEqual(withRouterBase('/', '/admin'), '/admin/');
|
|
assert.strictEqual(stripRouterBase('/admin/home', '/admin'), '/home');
|
|
assert.strictEqual(stripRouterBase('/admin/', '/admin'), '/');
|
|
assert.strictEqual(stripRouterBase('/admin', '/admin'), '/');
|
|
assert.strictEqual(stripRouterBase('/home', '/admin'), '/');
|
|
});
|
|
|
|
it('prefixes public asset paths but not /api', () => {
|
|
assert.strictEqual(prefixPublicAssetPath('/brand-logo.svg', '/admin'), '/admin/brand-logo.svg');
|
|
assert.strictEqual(prefixPublicAssetPath('/api', '/admin'), '/api');
|
|
assert.strictEqual(prefixPublicAssetPath('/admin/logo.svg', '/admin'), '/admin/logo.svg');
|
|
});
|
|
|
|
it('seeds router base into env config', () => {
|
|
initEnv({ id: 'demo', app_base: '/admin' });
|
|
assert.strictEqual(getConfigSync(CONFIG_KEYS.APP_BASE), '/admin');
|
|
assert.strictEqual(getConfigSync(CONFIG_KEYS.ROUTER_BASE), '/admin');
|
|
});
|
|
});
|