package cn.lihu.jh.module.ecg.enums;
|
|
import org.junit.Test;
|
|
import static org.junit.Assert.*;
|
|
/**
|
* 检查状态编码归一化与心电业务单判定的回归测试。
|
*
|
* <p>测试数据取自 2026-09-17 生产日志中的真实报文值,用于锁定本次修复的行为:
|
* <ul>
|
* <li>{@code S0405} 的 {@code processStep.code} 在报文中存在 {@code "3"}/{@code "03"}/
|
* {@code "7"}/{@code "08"}/{@code "10"} 等不同写法,必须归一到同一编码;</li>
|
* <li>病理专用状态 {@code 21}/{@code 22}/{@code 23} 不属于心电编码表,应被拒绝;</li>
|
* <li>{@code AppointmentTypeEnum} 原 type 值含空格/制表符({@code " 1"}、{@code " 3\t"}),
|
* 导致 {@code getByType("3")} 匹配失败,此处固化修复结果;</li>
|
* <li>心电业务单判定需正确识别心电单与放射/超声单。</li>
|
* </ul>
|
*
|
* @author 心电排队装机系统
|
*/
|
public class HisCheckStatusEnumTest {
|
|
// ==================== HisCheckStatusEnum.normalize ====================
|
|
@Test
|
public void testNormalize_shouldStripLeadingZero() {
|
// 日志实测:"03" 与 "3" 都出现过,必须归一为同一个值
|
assertEquals("3", HisCheckStatusEnum.normalize("3"));
|
assertEquals("3", HisCheckStatusEnum.normalize("03"));
|
assertEquals("8", HisCheckStatusEnum.normalize("08"));
|
assertEquals("1", HisCheckStatusEnum.normalize("01"));
|
}
|
|
@Test
|
public void testNormalize_shouldTrimWhitespace() {
|
assertEquals("7", HisCheckStatusEnum.normalize(" 7 "));
|
assertEquals("10", HisCheckStatusEnum.normalize("\t10"));
|
}
|
|
@Test
|
public void testNormalize_shouldKeepTwoDigitCodes() {
|
// char(2) 列可容纳 "10"
|
assertEquals("10", HisCheckStatusEnum.normalize("10"));
|
assertEquals("9", HisCheckStatusEnum.normalize("9"));
|
}
|
|
@Test
|
public void testNormalize_shouldRejectPathologyCodes() {
|
// 21 标本送检 / 22 取消标本送检 / 23 已缴费 属病理专用,心电不涉及
|
assertNull(HisCheckStatusEnum.normalize("21"));
|
assertNull(HisCheckStatusEnum.normalize("22"));
|
assertNull(HisCheckStatusEnum.normalize("23"));
|
}
|
|
@Test
|
public void testNormalize_shouldRejectInvalidInput() {
|
assertNull(HisCheckStatusEnum.normalize(null));
|
assertNull(HisCheckStatusEnum.normalize(""));
|
assertNull(HisCheckStatusEnum.normalize(" "));
|
assertNull(HisCheckStatusEnum.normalize("abc"));
|
assertNull(HisCheckStatusEnum.normalize("0")); // 不在编码表内
|
assertNull(HisCheckStatusEnum.normalize("99"));
|
}
|
|
@Test
|
public void testContains() {
|
assertTrue(HisCheckStatusEnum.contains(1));
|
assertTrue(HisCheckStatusEnum.contains(10));
|
assertFalse(HisCheckStatusEnum.contains(0));
|
assertFalse(HisCheckStatusEnum.contains(21));
|
assertFalse(HisCheckStatusEnum.contains(null));
|
}
|
|
@Test
|
public void testGetNameByCode() {
|
assertEquals("申请单开立", HisCheckStatusEnum.getNameByCode(1));
|
assertEquals("检查登记", HisCheckStatusEnum.getNameByCode(3));
|
assertEquals("报告审核", HisCheckStatusEnum.getNameByCode(10));
|
assertNull(HisCheckStatusEnum.getNameByCode(21));
|
}
|
|
// ==================== AppointmentTypeEnum(修复空格污染后) ====================
|
|
@Test
|
public void testAppointmentTypeEnum_shouldMatchWithoutWhitespaceIssue() {
|
// 原实现 type 值为 " 1" / " 3\t",getByType("1") 会返回 null。修复后必须能匹配。
|
assertEquals("申请单开立", AppointmentTypeEnum.getByType("1"));
|
assertEquals("检查登记", AppointmentTypeEnum.getByType("3"));
|
assertEquals("检查结束", AppointmentTypeEnum.getByType("7"));
|
assertEquals("报告审核", AppointmentTypeEnum.getByType("10"));
|
}
|
|
@Test
|
public void testAppointmentTypeEnum_shouldTolerateLeadingZeroAndSpace() {
|
assertEquals("检查登记", AppointmentTypeEnum.getByType("03"));
|
assertEquals("检查登记", AppointmentTypeEnum.getByType(" 3 "));
|
assertEquals("报告审核", AppointmentTypeEnum.getByType("010"));
|
}
|
|
@Test
|
public void testAppointmentTypeEnum_shouldRejectPathologyAndInvalid() {
|
assertNull(AppointmentTypeEnum.getByType("21"));
|
assertNull(AppointmentTypeEnum.getByType("23"));
|
assertNull(AppointmentTypeEnum.getByType(null));
|
assertNull(AppointmentTypeEnum.getByType("abc"));
|
}
|
}
|