“mitao”
2026-04-07 a013b0c9d580b0a10200bfc60d1ea3af15e45740
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
109
110
111
112
113
114
115
116
117
package com.tcm.training.admin.app.register.service;
 
import com.tcm.training.admin.app.register.entity.SysRegion;
import com.tcm.training.admin.app.register.mapper.SysRegionMapper;
import com.tcm.training.admin.app.register.vo.AppRegisterRegionOptionVO;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
 
import java.util.Collections;
import java.util.List;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.mockito.Mockito.when;
 
/**
 * APP 注册行政区划服务测试。
 */
@ExtendWith(MockitoExtension.class)
class AppRegisterRegionServiceTest {
 
    @Mock
    private SysRegionMapper sysRegionMapper;
 
    private AppRegisterRegionService appRegisterRegionService;
 
    /**
     * 每个用例前重建被测服务。
     */
    @BeforeEach
    void setUp() {
        appRegisterRegionService = new AppRegisterRegionService(sysRegionMapper);
    }
 
    /**
     * 未传父级编码时应返回省级列表。
     */
    @Test
    void listRegionsShouldReturnProvinceOptions() {
        SysRegion province = buildRegion(1L, "浙江省", "330000", 0L);
        when(sysRegionMapper.selectByParentId(0L)).thenReturn(Collections.singletonList(province));
 
        List<AppRegisterRegionOptionVO> options = appRegisterRegionService.listRegions(null);
 
        assertEquals(1, options.size());
        assertEquals("330000", options.get(0).getCode());
        assertEquals("浙江省", options.get(0).getName());
        assertEquals(Integer.valueOf(1), options.get(0).getLevel());
    }
 
    /**
     * 海诊通仅返回地区名称时,应通过 sys_region 解析出完整编码。
     */
    @Test
    void resolveRegionSelectionShouldUseNamesWhenCodesMissing() {
        SysRegion province = buildRegion(10L, "浙江省", "330000", 0L);
        SysRegion city = buildRegion(11L, "杭州市", "330100", 10L);
        SysRegion district = buildRegion(12L, "西湖区", "330106", 11L);
 
        when(sysRegionMapper.selectByParentIdAndName(0L, "浙江省")).thenReturn(province);
        when(sysRegionMapper.selectByParentIdAndName(10L, "杭州市")).thenReturn(city);
        when(sysRegionMapper.selectByParentIdAndName(11L, "西湖区")).thenReturn(district);
 
        AppRegisterRegionService.RegionSelection selection = appRegisterRegionService.resolveRegionSelection(
                null,
                "浙江省",
                null,
                "杭州市",
                null,
                "西湖区"
        );
 
        assertEquals("330000", selection.getProvinceCode());
        assertEquals("浙江省", selection.getProvinceName());
        assertEquals("330100", selection.getCityCode());
        assertEquals("杭州市", selection.getCityName());
        assertEquals("330106", selection.getDistrictCode());
        assertEquals("西湖区", selection.getDistrictName());
    }
 
    /**
     * 海诊通未返回任何地区信息时,应保持空值供前端手动选择。
     */
    @Test
    void resolveRegionSelectionShouldReturnEmptyWhenRegionMissing() {
        AppRegisterRegionService.RegionSelection selection = appRegisterRegionService.resolveRegionSelection(
                null,
                null,
                null,
                null,
                null,
                null
        );
 
        assertNull(selection.getProvinceCode());
        assertNull(selection.getProvinceName());
        assertNull(selection.getCityCode());
        assertNull(selection.getCityName());
        assertNull(selection.getDistrictCode());
        assertNull(selection.getDistrictName());
    }
 
    /**
     * 使用统一辅助方法构造测试地区节点。
     */
    private SysRegion buildRegion(Long id, String name, String code, Long parentId) {
        SysRegion region = new SysRegion();
        region.setId(id);
        region.setName(name);
        region.setCode(code);
        region.setParentId(parentId);
        return region;
    }
}