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); }); });