kindergarten_java/lesingle-edu-reading-platform-frontend/tests/e2e/admin/99-logout.spec.ts

132 lines
4.3 KiB
TypeScript
Raw Normal View History

/**
* E2E - 退
*/
import { test, expect } from '@playwright/test';
import { loginAsAdmin, logout } from './helpers';
import { ADMIN_CONFIG } from './fixtures';
test.describe('退出登录', () => {
test('点击退出登录', async ({ page }) => {
// 先登录
await loginAsAdmin(page);
// 查找退出登录按钮并点击
const logoutButton = page.getByRole('button', { name: /退出登录 | 退出 | logout/i });
if (await logoutButton.isVisible()) {
await logoutButton.click();
} else {
// 尝试点击用户菜单后再找退出按钮
const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
if (await userMenu.isVisible()) {
await userMenu.click();
await page.waitForTimeout(200);
const dropdownLogout = page.getByText(/退出登录 | 退出/);
if (await dropdownLogout.isVisible()) {
await dropdownLogout.click();
}
}
}
// 等待跳转到登录页
await page.waitForURL('**/login*');
await expect(page).toHaveURL(/\/login/);
});
test('验证跳转回登录页', async ({ page }) => {
// 先登录
await loginAsAdmin(page);
// 退出登录
const logoutButton = page.getByRole('button', { name: /退出登录 | 退出 | logout/i });
if (await logoutButton.isVisible()) {
await logoutButton.click();
} else {
const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
if (await userMenu.isVisible()) {
await userMenu.click();
await page.waitForTimeout(200);
const dropdownLogout = page.getByText(/退出登录 | 退出/);
if (await dropdownLogout.isVisible()) {
await dropdownLogout.click();
}
}
}
// 验证在登录页面
await page.waitForURL('**/login*');
await expect(page).toHaveURL(/\/login/);
// 验证登录表单存在
await expect(page.getByPlaceholder('请输入账号')).toBeVisible();
await expect(page.getByPlaceholder('请输入密码')).toBeVisible();
});
test('验证 token 已清除', async ({ page }) => {
// 先登录
await loginAsAdmin(page);
// 获取当前 token
const tokenBeforeLogout = await page.evaluate(() => localStorage.getItem('token'));
expect(tokenBeforeLogout).toBeTruthy();
// 退出登录
const logoutButton = page.getByRole('button', { name: /退出登录 | 退出 | logout/i });
if (await logoutButton.isVisible()) {
await logoutButton.click();
} else {
const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
if (await userMenu.isVisible()) {
await userMenu.click();
await page.waitForTimeout(200);
const dropdownLogout = page.getByText(/退出登录 | 退出/);
if (await dropdownLogout.isVisible()) {
await dropdownLogout.click();
}
}
}
// 等待跳转完成
await page.waitForTimeout(500);
// 验证 token 已清除
const tokenAfterLogout = await page.evaluate(() => localStorage.getItem('token'));
expect(tokenAfterLogout).toBeFalsy();
// 验证 sessionStorage 中的用户信息也已清除
const userInfo = await page.evaluate(() => sessionStorage.getItem('userInfo'));
expect(userInfo).toBeFalsy();
});
test('退出后无法访问管理页面', async ({ page }) => {
// 先登录
await loginAsAdmin(page);
// 退出登录
const logoutButton = page.getByRole('button', { name: /退出登录 | 退出 | logout/i });
if (await logoutButton.isVisible()) {
await logoutButton.click();
} else {
const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
if (await userMenu.isVisible()) {
await userMenu.click();
await page.waitForTimeout(200);
const dropdownLogout = page.getByText(/退出登录 | 退出/);
if (await dropdownLogout.isVisible()) {
await dropdownLogout.click();
}
}
}
// 等待跳转完成
await page.waitForTimeout(500);
// 尝试直接访问管理页面
await page.goto('/admin/dashboard');
// 应该被重定向到登录页
await page.waitForURL('**/login*');
await expect(page).toHaveURL(/\/login/);
});
});