Files
his/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts
2026-05-27 01:40:06 +08:00

100 lines
4.1 KiB
TypeScript
Executable File
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, expect } from '@playwright/test';
test.describe('HIS 系统回归测试集', () => {
test('基础登录流程', async ({ page }) => {
await page.goto('/login');
await expect(page).toHaveTitle(/HIS/);
});
// ================= 新增 Bug #505 回归测试 =================
test('@bug505 @regression 护士端已发药医嘱禁止退回', async ({ page }) => {
// 1. 登录护士账号
await page.goto('/login');
await page.fill('input[name="username"]', 'wx');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
// 2. 进入医嘱校对模块 -> 已校对页签
await page.click('text=医嘱校对');
await page.click('text=已校对');
await page.waitForLoadState('networkidle');
// 3. 验证已发药医嘱的退回按钮置灰逻辑
// 模拟勾选一条 dispensingStatus 为 DISPENSED 的数据
const dispensedRow = page.locator('tr:has-text("已发药")').first();
await dispensedRow.locator('input[type="checkbox"]').check();
const returnBtn = page.locator('button:has-text("退回")');
const isDisabled = await returnBtn.isDisabled();
// 预期:按钮应置灰不可点击
expect(isDisabled).toBe(true);
// 4. 若前端未置灰,验证点击拦截与提示文案
if (!isDisabled) {
await returnBtn.click();
await expect(page.locator('.el-message--error')).toContainText(
'该药品已由药房发放,请先执行退药处理,不可直接退回'
);
}
});
// ================= 新增 Bug #503 回归测试 =================
test('@bug503 @regression 住院发退药明细与汇总单触发时机同步校验', async ({ page }) => {
// 前置:确保字典配置为“需申请模式”(默认)
// 1. 护士登录并执行医嘱
await page.goto('/login');
await page.fill('input[name="username"]', 'wx');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
await page.click('text=医嘱执行');
await page.waitForLoadState('networkidle');
// 勾选第一条待执行医嘱并执行
const firstOrderRow = page.locator('.el-table__body-wrapper tbody tr').first();
await firstOrderRow.locator('input[type="checkbox"]').check();
await page.click('button:has-text("执行")');
});
// ================= 新增 Bug #574 回归测试 =================
test('@bug574 @regression 预约签到缴费成功后排班状态流转为3', async ({ page }) => {
// 1. 登录 admin 账号
await page.goto('/login');
await page.fill('input[name="username"]', 'admin');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
// 2. 进入门诊挂号界面
await page.click('text=门诊挂号');
await page.waitForLoadState('networkidle');
// 3. 模拟选择已预约患者并执行签到缴费
// 假设列表中存在状态为“已预约”的记录
const appointmentRow = page.locator('tr:has-text("已预约")').first();
await expect(appointmentRow).toBeVisible();
// 点击签到按钮
await appointmentRow.locator('button:has-text("签到")').click();
// 确认缴费弹窗
await page.click('button:has-text("确认缴费")');
await page.waitForLoadState('networkidle');
// 4. 验证前端成功提示
await expect(page.locator('.el-message--success')).toContainText('签到成功');
// 5. 验证数据库状态流转 (通过内部 API 查询排班状态)
// 实际项目中 orderId 应从前端请求或路由参数中动态获取,此处模拟验证逻辑
const orderId = 'TEST_ORDER_ID_574';
const statusRes = await page.request.get(`/api/outpatient/schedule-slot/status?orderId=${orderId}`);
expect(statusRes.status()).toBe(200);
const statusData = await statusRes.json();
// 预期adm_schedule_slot.status 应为 '3' (已取号/待就诊)
expect(statusData.status).toBe('3');
});
});