70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
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);
|
||
});
|
||
});
|