Files
his/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts
2026-05-26 23:16:34 +08:00

122 lines
5.4 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('Bug #589 Regression: 出院带药医嘱类型与交互', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/login');
await page.fill('input[name="username"]', 'doctor1');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await page.waitForURL(/\/inpatient/);
await page.click('.patient-list-item:first-child');
await page.click('text=临床医嘱');
await page.click('text=新增');
});
test('@bug589 @regression 验证出院带药类型存在且联动临时医嘱', async ({ page }) => {
await page.click('.order-type-select .el-input__inner');
await expect(page.locator('.el-select-dropdown__item:has-text("出院带药")')).toBeVisible();
await page.click('.el-select-dropdown__item:has-text("出院带药")');
await expect(page.locator('input[name="orderFrequency"][value="临时"]')).toBeChecked();
await expect(page.locator('input[name="orderFrequency"][value="长期"]')).toBeDisabled();
await expect(page.locator('.discharge-med-panel')).toBeVisible();
});
test('@bug589 @regression 验证用药天数校验逻辑(普通<=7, 慢病<=30)', async ({ page }) => {
await page.click('.order-type-select .el-input__inner');
await page.click('.el-select-dropdown__item:has-text("出院带药")');
await page.fill('input[name="medicationDays"]', '8');
await page.click('.discharge-med-panel .el-button--primary');
await expect(page.locator('.el-message--error')).toContainText('非慢性病出院带药天数不得超过7天');
await page.click('label:has-text("慢性病")');
await page.fill('input[name="medicationDays"]', '31');
await page.click('.discharge-med-panel .el-button--primary');
await expect(page.locator('.el-message--error')).toContainText('慢性病出院带药天数不得超过30天');
});
test('@bug589 @regression 验证总量自动计算与必填拦截', async ({ page }) => {
await page.click('.order-type-select .el-input__inner');
await page.click('.el-select-dropdown__item:has-text("出院带药")');
await page.fill('input[name="singleDosage"]', '2');
await page.fill('input[name="frequency"]', '3');
await page.fill('input[name="medicationDays"]', '5');
await expect(page.locator('input[name="totalAmount"]')).toHaveValue('30');
await page.fill('input[name="totalAmount"]', '');
await page.click('.discharge-med-panel .el-button--primary');
await expect(page.locator('.el-message--error')).toContainText('总量为必填项');
});
});
// Bug #467 Regression Tests
test.describe('Bug #467 Regression: 住院检验申请列表显示规范', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/login');
await page.fill('input[name="username"]', 'doctor1');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await page.waitForURL(/\/inpatient/);
});
test('@bug467 @regression 验证申请单列表列名与名称截断', async ({ page }) => {
await page.click('text=检验申请');
await expect(page.locator('th:has-text("申请单号")')).toBeVisible();
await expect(page.locator('th:has-text("申请单名称")')).toBeVisible();
});
});
// Bug #506 Regression Tests
test.describe('Bug #506 Regression: 门诊诊前退号状态与数据一致性', () => {
test.beforeEach(async ({ page }) => {
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 page.waitForURL(/\/outpatient/);
await page.click('text=门诊挂号');
});
test('@bug506 @regression 验证退号后订单状态、号源回滚及退费日志关联', async ({ page }) => {
// 1. 进入挂号列表,选择已缴费已签到患者
await page.click('tr:has-text("压力山大")');
await page.click('button:has-text("退号")');
// 2. 确认退费
await page.click('button:has-text("确认退费")');
await page.waitForTimeout(1500);
// 3. 验证前端成功提示
await expect(page.locator('.el-message--success')).toContainText('退号成功');
// 4. 拦截并验证后端返回的关键状态模拟DB校验逻辑
const dbState = await page.evaluate(async () => {
// 实际测试环境可通过内部调试接口验证DB状态
const res = await fetch('/api/internal/debug/verify-bug506', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ action: 'verify_cancel' })
});
return res.json();
});
// 验证 order_main 状态
expect(dbState.order_main.status).toBe(0);
expect(dbState.order_main.pay_status).toBe(3);
expect(dbState.order_main.cancel_reason).toBe('诊前退号');
expect(dbState.order_main.cancel_time).not.toBeNull();
// 验证 adm_schedule_slot 回滚
expect(dbState.adm_schedule_slot.status).toBe(0);
expect(dbState.adm_schedule_slot.order_id).toBeNull();
// 验证 adm_schedule_pool 版本与库存
expect(dbState.adm_schedule_pool.version_incremented).toBe(true);
expect(dbState.adm_schedule_pool.booked_num_decremented).toBe(true);
// 验证 refund_log 关联
expect(dbState.refund_log.order_id).toBe(dbState.order_main.id);
});
});