feat: 实现认证场景测试
- 创建登录流程测试(6个测试用例) - 管理员用户登录成功 - 普通用户登录成功 - 错误密码登录失败 - 空用户名登录失败 - 空密码登录失败 - Token注入登录 - 创建登出流程测试(4个测试用例) - 用户登出成功 - 登出后无法访问受保护页面 - 登出后Token被清除 - 多角色登出测试
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import { RoleFactory } from '../../roles/role-factory';
|
||||
import { AuthHelper } from '../../shared/auth-helper';
|
||||
|
||||
test.describe('登出流程测试', () => {
|
||||
let authHelper: AuthHelper;
|
||||
|
||||
test.beforeEach(async ({ page, context }) => {
|
||||
authHelper = new AuthHelper(page, context);
|
||||
await authHelper.loginAsRole('admin');
|
||||
});
|
||||
|
||||
test('用户登出成功', async ({ page }) => {
|
||||
await page.goto('/dashboard');
|
||||
|
||||
await page.click('[data-testid="user-menu"]');
|
||||
await page.click('[data-testid="logout-button"]');
|
||||
|
||||
await expect(page).toHaveURL(/\/login/, { timeout: 10000 });
|
||||
|
||||
const loginButton = page.locator('button[type="submit"]');
|
||||
await expect(loginButton).toBeVisible();
|
||||
});
|
||||
|
||||
test('登出后无法访问受保护页面', async ({ page }) => {
|
||||
await page.goto('/dashboard');
|
||||
|
||||
await page.click('[data-testid="user-menu"]');
|
||||
await page.click('[data-testid="logout-button"]');
|
||||
|
||||
await expect(page).toHaveURL(/\/login/);
|
||||
|
||||
await page.goto('/user-management');
|
||||
|
||||
await expect(page).toHaveURL(/\/login/);
|
||||
});
|
||||
|
||||
test('登出后Token被清除', async ({ page, context }) => {
|
||||
await page.goto('/dashboard');
|
||||
|
||||
await page.click('[data-testid="user-menu"]');
|
||||
await page.click('[data-testid="logout-button"]');
|
||||
|
||||
await expect(page).toHaveURL(/\/login/);
|
||||
|
||||
const cookies = await context.cookies();
|
||||
const tokenCookie = cookies.find(c => c.name === 'token');
|
||||
expect(tokenCookie).toBeUndefined();
|
||||
|
||||
const localStorageToken = await page.evaluate(() => {
|
||||
return localStorage.getItem('token');
|
||||
});
|
||||
expect(localStorageToken).toBeNull();
|
||||
});
|
||||
|
||||
test('多角色登出测试', async ({ page, context }) => {
|
||||
const roles = ['admin', 'user', 'test'];
|
||||
|
||||
for (const roleName of roles) {
|
||||
const helper = new AuthHelper(page, context);
|
||||
await helper.clearAuth();
|
||||
await helper.loginAsRole(roleName);
|
||||
|
||||
await page.goto('/dashboard');
|
||||
|
||||
await page.click('[data-testid="user-menu"]');
|
||||
await page.click('[data-testid="logout-button"]');
|
||||
|
||||
await expect(page).toHaveURL(/\/login/, { timeout: 10000 });
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user