Files
menav/test/multi-level-sites-external-default.node-test.js
rbetree 30d50ebcd7 fix: 修复外部资源、图标模式与嵌套交互(#30)
Fixes: https://github.com/rbetree/menav/issues/30

- Font Awesome:bootcdn→Cloudflare cdnjs
- favicon:gstatic `.com` 失败自动回退 `.cn`
- `icons.mode`:修复 `site.yml` 配置未生效(提升到顶层)
- 站点级图标覆盖:支持 `faviconUrl` / `forceIconMode`(优先级:`faviconUrl` > `forceIconMode` > `icons.mode`)
- 折叠交互:恢复二级分组折叠按钮(桌面端悬停显示)
- 新标签页:递归补齐多级 `sites.external` 默认值
2026-01-02 18:09:20 +08:00

71 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const os = require('node:os');
const path = require('node:path');
const { loadConfig } = require('../src/generator.js');
function withTempCwd(callback) {
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'menav-multilevel-external-test-'));
const originalCwd = process.cwd();
try {
process.chdir(tmpDir);
callback(tmpDir);
} finally {
process.chdir(originalCwd);
fs.rmSync(tmpDir, { recursive: true, force: true });
}
}
test('多级结构下 sites.external 未配置时应默认 true且 external:false 不应被覆盖', () => {
withTempCwd((tmpDir) => {
const defaultConfigDir = path.join(tmpDir, 'config', '_default');
const defaultPagesDir = path.join(defaultConfigDir, 'pages');
fs.mkdirSync(defaultPagesDir, { recursive: true });
fs.writeFileSync(path.join(defaultConfigDir, 'site.yml'), 'title: Test\n', 'utf8');
fs.writeFileSync(
path.join(defaultPagesDir, 'bookmarks.yml'),
[
'title: 书签',
'subtitle: bookmarks',
'template: bookmarks',
'categories:',
' - name: 技术资源',
' groups:',
' - name: 组内站点',
' sites:',
' - name: GroupSite',
' url: https://example.com/group',
' subcategories:',
' - name: 前端开发',
' groups:',
' - name: 框架库',
' subgroups:',
' - name: 深层分组',
' sites:',
' - name: DeepDefaultExternal',
' url: https://example.com/deep-default',
' - name: DeepExternalFalse',
' url: https://example.com/deep-false',
' external: false',
''
].join('\n'),
'utf8'
);
const config = loadConfig();
const groupSite = config.bookmarks.categories[0].groups[0].sites[0];
assert.equal(groupSite.external, true);
const deepSites = config.bookmarks.categories[0].subcategories[0].groups[0].subgroups[0].sites;
assert.equal(deepSites[0].external, true);
assert.equal(deepSites[1].external, false);
});
});