Files
crawler-plugin/admin-frontend-vue/tests/task-16.test.ts
T
huangzd1997 4c88964473 task-283(后台迁移收尾/发布): admin-vue 后台工程入库 + Flask 后台整体退役
- 新后台 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/
2026-09-06 10:41:47 +08:00

81 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 确认 + runLogoutstore 退出清态并跳登录。
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/)
})