4c88964473
- 新后台 admin-frontend-vue 整工程入库(base=/admin-vue/、History 路由、Nginx 静态托管方案与 verify-dist 校验) - Java AdminConsoleController 改为入口重定向: /admin|/admin.html、/login|/login.html -> /admin-vue/; 删除 classpath:static 旧 admin.html/login.html 单页与 admin.js 副本 - Flask 后台整体退役: 删除 admin_api/auth/main 蓝图、web_source 页面、static 脚本与 admin 相关测试; app.py 收敛为仅注册 version_bp(/api/version、/api/version/latest, 供桌面端更新检查) - AdminApiGuardFilterTest 豁免样例路径 /admin.html -> /admin-vue/
81 lines
3.1 KiB
TypeScript
81 lines
3.1 KiB
TypeScript
import test from 'node:test'
|
||
import assert from 'node:assert/strict'
|
||
import { readSource } from './helpers.ts'
|
||
import {
|
||
LOGOUT_CONFIRM_CANCEL,
|
||
LOGOUT_CONFIRM_MESSAGE,
|
||
LOGOUT_CONFIRM_OK,
|
||
LOGOUT_CONFIRM_TITLE,
|
||
runLogout,
|
||
} from '../src/layout/logout.ts'
|
||
|
||
test('test_task_016_shell_logout_interaction_normal_primary_path', async () => {
|
||
// 正常主路径:确认后执行退出。
|
||
let signedOut = 0
|
||
await runLogout({ confirm: async () => true, signOut: async () => { signedOut += 1 } })
|
||
assert.equal(signedOut, 1)
|
||
})
|
||
|
||
test('test_task_016_shell_logout_interaction_normal_variant_input', async () => {
|
||
// 正常变体:取消确认则不退出。
|
||
let signedOut = 0
|
||
await runLogout({ confirm: async () => false, signOut: async () => { signedOut += 1 } })
|
||
assert.equal(signedOut, 0)
|
||
})
|
||
|
||
test('test_task_016_shell_logout_interaction_normal_repeated_operation_is_idempotent', async () => {
|
||
// 正常重复:多次确认分别各执行一次,互不污染状态。
|
||
let signedOut = 0
|
||
const deps = { confirm: async () => true, signOut: async () => { signedOut += 1 } }
|
||
await runLogout(deps)
|
||
await runLogout(deps)
|
||
assert.equal(signedOut, 2)
|
||
})
|
||
|
||
test('test_task_016_shell_logout_interaction_boundary_empty_input', async () => {
|
||
// 边界空值:确认被拒后即便 signOut 有副作用也不会被调用。
|
||
let signedOut = 0
|
||
await runLogout({ confirm: async () => false, signOut: async () => { signedOut += 1 } })
|
||
assert.equal(signedOut, 0)
|
||
})
|
||
|
||
test('test_task_016_shell_logout_interaction_boundary_single_item', async () => {
|
||
// 边界单元素:signOut 异常向上抛出,供调用方反馈(不静默)。
|
||
await assert.rejects(
|
||
runLogout({ confirm: async () => true, signOut: async () => { throw new Error('退出接口失败') } }),
|
||
/退出接口失败/,
|
||
)
|
||
})
|
||
|
||
test('test_task_016_shell_logout_interaction_boundary_limit_or_missing_field', () => {
|
||
// 边界上限/缺字段:确认文案齐全、按钮语义完整。
|
||
assert.ok(LOGOUT_CONFIRM_MESSAGE.length > 0)
|
||
assert.ok(LOGOUT_CONFIRM_TITLE.length > 0)
|
||
assert.ok(LOGOUT_CONFIRM_OK.length > 0)
|
||
assert.ok(LOGOUT_CONFIRM_CANCEL.length > 0)
|
||
})
|
||
|
||
test('test_task_016_shell_logout_interaction_invalid_input_rejected', async () => {
|
||
// 异常输入:确认对话框异常(fail-closed),不得退出。
|
||
let signedOut = 0
|
||
await assert.rejects(
|
||
runLogout({
|
||
confirm: async () => { throw new Error('弹窗异常') },
|
||
signOut: async () => { signedOut += 1 },
|
||
}),
|
||
/弹窗异常/,
|
||
)
|
||
assert.equal(signedOut, 0)
|
||
})
|
||
|
||
test('test_task_016_shell_logout_interaction_dependency_failure_returns_actionable_message', () => {
|
||
// 依赖失败:壳层使用 ElMessageBox 确认 + runLogout;store 退出清态并跳登录。
|
||
const layout = readSource('src/layout/AdminLayout.vue')
|
||
assert.match(layout, /ElMessageBox\.confirm/)
|
||
assert.match(layout, /runLogout/)
|
||
const store = readSource('src/stores/admin-session.ts')
|
||
assert.match(store, /\$reset\(\)/)
|
||
assert.match(store, /location\.assign\(joinAdminPath\('login'\)\)/)
|
||
assert.match(layout, /LOGOUT_CONFIRM_MESSAGE/)
|
||
})
|