yxh
7 天以前 68ff33beff11310e830b0615b5a81f83fad0f683
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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"));
    }
}