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

80 lines
3.6 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 { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
// 注:实际项目可能使用 Cypress/Playwright此处以标准 E2E 断言结构演示,可根据实际测试框架替换底层 API
import ExamApply from '@/views/outpatient/exam/ExamApply.vue'
describe('门诊检查申请单交互回归测试', () => {
// ... 原有测试用例 ...
describe('Bug #550 Regression', { tags: ['@bug550', '@regression'] }, () => {
it('应解耦项目与方法勾选、修复卡片显示并实现结构化层级展示', async () => {
const wrapper = mount(ExamApply, {
global: {
stubs: { 'el-tree': true, 'el-checkbox-group': true, 'el-checkbox': true, 'el-tooltip': true, 'el-icon': true }
}
})
// 1. 模拟勾选彩超项目 "128线排"
await wrapper.find('.item-checkbox[data-id="item_128"]').trigger('click')
// 验证:检查方法未被自动勾选(解耦)
const methodCheckbox = wrapper.find('.method-checkbox[data-id="method_default"]')
expect(methodCheckbox.attributes('checked')).toBeUndefined()
// 2. 验证已选卡片显示
const selectedCard = wrapper.find('.selected-card')
expect(selectedCard.text()).not.toContain('套餐') // 去除冗余前缀
expect(selectedCard.attributes('title')).toContain('128线排') // 完整名称提示
// 3. 验证默认收起状态
const detailsPanel = wrapper.find('.selected-details')
expect(detailsPanel.isVisible()).toBe(false)
// 4. 验证层级结构:项目 > 检查方法
const hierarchy = wrapper.find('.selected-list')
expect(hierarchy.find('.group-header').exists()).toBe(true)
expect(hierarchy.find('.method-item').exists()).toBe(true)
// 点击展开验证
await wrapper.find('.group-header').trigger('click')
expect(detailsPanel.isVisible()).toBe(true)
})
})
})
describe('Bug #506 Regression', { tags: ['@bug506', '@regression'] }, () => {
it('门诊诊前退号后,多表状态值应与 PRD 定义严格一致', async () => {
// 模拟前端发起退号请求
const orderId = 10086
const slotId = 2001
const poolId = 3001
// 1. 调用退号接口
const cancelRes = await mockApi.post('/api/outpatient/registration/cancel', { orderId })
expect(cancelRes.status).toBe(200)
// 2. 验证 order_main 表状态
const orderMain = await mockApi.get(`/api/order/main/${orderId}`)
expect(orderMain.data.status).toBe(0) // 已取消
expect(orderMain.data.pay_status).toBe(3) // 已退费
expect(orderMain.data.cancel_reason).toBe('诊前退号') // 原因字段修正
expect(orderMain.data.cancel_time).not.toBeNull() // 必须写入当前操作时间
// 3. 验证 adm_schedule_slot 表状态
const slot = await mockApi.get(`/api/schedule/slot/${slotId}`)
expect(slot.data.status).toBe(0) // 回滚至待约状态
expect(slot.data.order_id).toBeNull() // 解除号源绑定
// 4. 验证 adm_schedule_pool 表状态
const poolBefore = await mockApi.get(`/api/schedule/pool/${poolId}`)
const poolAfter = await mockApi.get(`/api/schedule/pool/${poolId}`)
expect(poolAfter.data.version).toBe(poolBefore.data.version + 1) // version 累加 1
expect(poolAfter.data.booked_num).toBe(poolBefore.data.booked_num - 1) // booked_num 递减
// 5. 验证 refund_log 表关联
const refundLogs = await mockApi.get(`/api/refund/log?order_id=${orderId}`)
expect(refundLogs.data.length).toBeGreaterThan(0)
expect(refundLogs.data[0].order_id).toBe(orderId) // 必须关联 order_main.id
})
})