import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import * as themeSkinModel from '../src/composables/useThemeSkin.js'
const settingsModel = readFileSync(new URL('../src/utils/settingsModelHelper.js', import.meta.url), 'utf8')
const settingsView = readFileSync(new URL('../src/views/SettingsView.vue', import.meta.url), 'utf8')
const settingsStyles = readFileSync(new URL('../src/assets/styles/views/settings-view.css', import.meta.url), 'utf8')
const aiModeStyles = readFileSync(
new URL('../src/assets/styles/components/personal-workbench-ai-mode.css', import.meta.url),
'utf8'
)
function testAppearanceSectionIsThemeSettings() {
assert.match(settingsModel, /id:\s*'appearance'[\s\S]*label:\s*'主题设置'/)
assert.match(settingsModel, /id:\s*'appearance'[\s\S]*title:\s*'主题风格与界面体验'/)
assert.match(settingsModel, /id:\s*'appearance'[\s\S]*actionLabel:\s*'保存主题设置'/)
assert.match(settingsView, /
主题风格与界面体验<\/h4>/)
assert.doesNotMatch(settingsModel, /label:\s*'界面皮肤'/)
assert.doesNotMatch(settingsView, /界面皮肤与企业主色/)
}
function testThemeOptionsCollapseToThreeExperienceModes() {
assert.deepEqual(
themeSkinModel.THEME_SKIN_OPTIONS.map((theme) => theme.id),
['vivid', 'enterprise', 'intelligent']
)
assert.deepEqual(
themeSkinModel.THEME_SKIN_OPTIONS.map((theme) => theme.label),
['动感活泼', '企业沉稳', '专业智能']
)
assert.equal(typeof themeSkinModel.normalizeThemeMode, 'function')
assert.equal(themeSkinModel.normalizeThemeMode('sky'), 'vivid')
assert.equal(themeSkinModel.normalizeThemeMode('blue'), 'vivid')
assert.equal(themeSkinModel.normalizeThemeMode('legacy-green'), 'vivid')
assert.equal(themeSkinModel.normalizeThemeMode('navy'), 'enterprise')
assert.equal(themeSkinModel.normalizeThemeMode('slate'), 'enterprise')
assert.equal(themeSkinModel.normalizeThemeMode('soft-violet'), 'intelligent')
assert.equal(themeSkinModel.normalizeThemeMode(''), 'enterprise')
assert.equal(themeSkinModel.normalizeThemeMode('unknown-theme'), 'enterprise')
}
function testSettingsThemeCardsAvoidLegacySkinLanguage() {
assert.match(settingsView, /theme-option-grid/)
assert.match(settingsView, /theme-preview-panel/)
assert.match(settingsStyles, /\.theme-option-grid/)
assert.match(settingsStyles, /\.theme-style-preview/)
assert.doesNotMatch(settingsView, /skin-option-grid/)
assert.doesNotMatch(settingsStyles, /\.skin-option-grid/)
}
function testEnterpriseThemeHasAiModeOverrides() {
assert.match(aiModeStyles, /\[data-theme-mode="enterprise"\]\s+\.workbench-ai-mode\s*\{/)
assert.match(aiModeStyles, /\[data-theme-mode="enterprise"\]\s+\.workbench-ai-mode\.has-conversation\s*\{/)
assert.match(aiModeStyles, /\[data-theme-mode="enterprise"\]\s+\.workbench-ai-orb\s*\{/)
assert.match(
aiModeStyles,
/\[data-theme-mode="enterprise"\]\s+\.workbench-ai-orb\s*\{[\s\S]*border:\s*0;[\s\S]*border-radius:\s*50%;[\s\S]*background:\s*transparent;[\s\S]*box-shadow:\s*none;/
)
assert.match(aiModeStyles, /\[data-theme-mode="enterprise"\]\s+\.workbench-ai-composer[\s\S]*\{/)
assert.match(aiModeStyles, /\[data-theme-mode="enterprise"\]\s+\.workbench-ai-message\s*\{/)
assert.match(aiModeStyles, /\[data-theme-mode="enterprise"\]\s+\.workbench-ai-thinking-panel\s*\{/)
}
function run() {
testAppearanceSectionIsThemeSettings()
testThemeOptionsCollapseToThreeExperienceModes()
testSettingsThemeCardsAvoidLegacySkinLanguage()
testEnterpriseThemeHasAiModeOverrides()
console.log('settings theme section tests passed')
}
run()