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.AppRegisterRegionDatasetVO;
|
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.Arrays;
|
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());
|
}
|
|
/**
|
* APP 完整地区数据集应过滤区县层级的市辖区占位节点。
|
*/
|
@Test
|
void buildRegionDatasetShouldHideMunicipalDistrictPlaceholder() {
|
SysRegion province = buildRegion(1L, "江西省", "360000", 0L);
|
SysRegion city = buildRegion(2L, "吉安市", "360800", 1L);
|
SysRegion placeholder = buildRegion(3L, "吉安市市辖区", "360801", 2L);
|
SysRegion district = buildRegion(4L, "吉州区", "360802", 2L);
|
when(sysRegionMapper.selectAllOrdered()).thenReturn(
|
Arrays.asList(province, city, placeholder, district)
|
);
|
|
AppRegisterRegionDatasetVO dataset = appRegisterRegionService.buildRegionDataset();
|
|
assertEquals(1, dataset.getAreas().size());
|
assertEquals(1, dataset.getAreas().get(0).size());
|
assertEquals(1, dataset.getAreas().get(0).get(0).size());
|
assertEquals("吉州区", dataset.getAreas().get(0).get(0).get(0).getLabel());
|
assertEquals("360802", dataset.getAreas().get(0).get(0).get(0).getValue());
|
}
|
|
/**
|
* 海诊通仅返回地区名称时,应通过 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;
|
}
|
}
|