This commit is contained in:
oneao committed 2026-10-14 17:25:47 +08:00
1 parent 15e0ae5b67
commit e434374db5
71 files changed
+5726 -329

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
import { expect, test } from './support/fixtures'
import { loadSession } from './support/session'
/**
* 冒烟用例:证明「免登录」这条基础设施真的通了。
*
* 落点选 `/approval/todo` 而不是首页:
* - `/dashboard` **没有任何权限点**(`sql/20_registration/14_dashboard_menu.sql` 写明
* 「不建权限点」,只有 `g3soft` 提权可见);
* - e2e 默认账号 `demo_zhangwei` 只被授了 `menu.approval%`
* (`sql/90_mock/02_fms_workflow_runtime_mock.sql:186`)。
* 于是非超管进 `/dashboard` 会被守卫送到 `/403`,而 `/approval/todo` 是演示账号有授权的页面,
* 换成 `g3soft`(超管)也照样通过 —— 两边都不挑账号。
*/
test('种了会话就能直接进受保护页面,不跳登录页也不跳 403', async ({ page }) => {
await page.goto('/approval/todo')
// 断言最终 URL 就是目标页,同时覆盖两种失败:跳 /login(会话没种上)、
// 跳 /403(种上了但没授权)。只写 not.toHaveURL('/login') 会漏掉后者,而且
// goto 之后 URL 立刻就是目标值,not 断言会在重定向发生前就通过 —— 断言不到东西。
await expect(page).toHaveURL(/\/approval\/todo$/)
})
test('顶栏显示的是会话里的那个用户', async ({ page }) => {
const user = loadSession().user
const expected = user?.name || user?.account || ''
expect(expected, '会话里没有用户名,登录响应结构可能变了').not.toBe('')
await page.goto('/approval/todo')
await expect(page.locator('.layout-header__user')).toContainText(expected)
})
test('刷新后仍是登录态(会话读自 sessionStorage,不靠内存)', async ({ page }) => {
await page.goto('/approval/todo')
await expect(page).toHaveURL(/\/approval\/todo$/)
await page.reload()
await expect(page).toHaveURL(/\/approval\/todo$/)
})