import test from 'node:test' import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' const tauriApi = readFileSync(new URL('../src/lib/tauri-api.js', import.meta.url), 'utf8') const wsClient = readFileSync(new URL('../src/lib/ws-client.js', import.meta.url), 'utf8') const main = readFileSync(new URL('../src/main.js', import.meta.url), 'utf8') const chat = readFileSync(new URL('../src/pages/chat.js', import.meta.url), 'utf8') test('Web/headless 模式配置写入不能隐式 reload Gateway', () => { assert.match( tauriApi, /function\s+_debouncedReloadGateway\(\)\s*\{[\s\S]*?if\s*\(\s*!isTauriRuntime\(\)\s*\)\s*return/, 'tauri-api 的防抖 reload 必须在 Web/headless 模式直接跳过', ) }) test('Web/headless 模式自动配对重连不能隐式 reload Gateway', () => { assert.match( wsClient, /import\s+\{\s*api\s*,\s*isTauriRuntime\s*\}\s+from\s+['"]\.\/tauri-api\.js['"]/, 'ws-client 必须能判断当前是否为 Tauri 桌面端', ) assert.match( wsClient, /if\s*\(\s*isTauriRuntime\(\)\s*\)\s*\{[\s\S]*?await\s+api\.reloadGateway\(\)/, '自动配对后的 reload 只能在 Tauri 桌面端执行', ) }) test('Web/headless 模式启动自动连接不能隐式 reload Gateway', () => { assert.match( main, /if\s*\(\s*needReload\s*&&\s*isTauriRuntime\(\)\s*\)\s*\{[\s\S]*?await\s+api\.reloadGateway\(\)/, '启动自动连接合并 reload 只能在 Tauri 桌面端执行', ) }) test('Web/headless 模式聊天连接修复不自动 reload Gateway', () => { assert.match( chat, /if\s*\(\s*isTauriRuntime\(\)\s*\)\s*\{[\s\S]*?await\s+api\.reloadGateway\(\)/, '聊天页连接修复按钮只能在 Tauri 桌面端自动 reload', ) }) test('聊天发送按钮会在输入状态变化时重新同步 disabled 状态', () => { assert.match( chat, /