Feat: Api 联通 + 地区整理

This commit is contained in:
Owen 2024-12-27 12:21:49 +08:00
parent 42e8accd97
commit aad3d0b5b6
9 changed files with 107 additions and 691 deletions

View File

@ -37,6 +37,19 @@ public class LianTongAreaUtils {
*/
private static Map<String, LianTongArea> areas;
public static LianTongArea getLianTongAreaByHaokaAddressCode(String code){
if (code.length()==6){
return areas.get(code);
}
if (code.length()==4){
return areas.get(code+"00");
}
if (code.length()==2){
return areas.get(code+"0000");
}
return areas.get(code);
}
private LianTongAreaUtils() {
areas = new HashMap<>();

View File

@ -0,0 +1,80 @@
package cn.iocoder.yudao.module.haoka.api.liantong.area;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.List;
/**
* 区域节点包括国家省份城市地区等信息
*
* 数据可见 resources/area.csv 文件
*
* @author 芋道源码
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LianTongAreaVo {
/**
* 编号 - 全球即根目录
*/
public static final String ID_GLOBAL = "0";
/**
* 编号 - 中国
*/
public static final String ID_CHINA = "1";
/**
* 编号
*/
private String id;
/**
* 名字
*/
private String name;
/**
* 类型
*
* 枚举 {@link AreaTypeEnum}
*/
private Integer type;
/**
* 收货地址省份编码
*/
private String provinceCode;
/**
* 收货地址省份名称
*/
private String provinceName;
/**
* 收货地址地市编码
*/
private String cityCode;
/**
* 收货地址地市名称
*/
private String cityName;
/**
* 收货地址区县编码
*/
private String districtCode;
/**
* 收货地址区县名称
*/
private String districtName;
/**
* 对应号码归属省份编码
*/
private String phoneProvinceCode;
/**
* 对应号码归属地市编码
*/
private String phoneCityCode;
}

View File

@ -31,7 +31,7 @@ public class AddressAreaController {
@Operation(summary = "获得区县")
@Parameter(name = "code", description = "编号", required = true, example = "1024")
@Parameter(name = "level", description = "编号", required = true, example = "1024")
public CommonResult<List<AddressVo>> getSubAddressList(@RequestParam("code") String code, @RequestParam AddressVo.Level level) {
public CommonResult<List<AddressVo>> getSubAddressList(@RequestParam(required = false) String code, @RequestParam AddressVo.Level level) {
return success(haoKaAddressService.getSubAddressList(code, level));
}

View File

@ -1,7 +1,11 @@
package cn.iocoder.yudao.module.haoka.controller.admin.api;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.haoka.api.ApiLianTongService;
import cn.iocoder.yudao.module.haoka.api.liantong.area.LianTongArea;
import cn.iocoder.yudao.module.haoka.api.liantong.area.LianTongAreaUtils;
import cn.iocoder.yudao.module.haoka.api.liantong.area.LianTongAreaVo;
import cn.iocoder.yudao.module.haoka.api.liantong.model.request.*;
import cn.iocoder.yudao.module.haoka.api.liantong.model.response.*;
import io.swagger.v3.oas.annotations.Operation;
@ -10,6 +14,8 @@ import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "API----上游接口")
@ -83,4 +89,11 @@ public class HaokaApiController {
KingNumSelectResponse response = haokaAllSuperiorApiService.lianTongTokenSelectNumber(request);
return success(response);
}
@PostMapping("/lian-tong/select-area")
@Operation(summary = "联通-地址-归属地查询")
public CommonResult<List<LianTongAreaVo>> lianTongAreaInfo(@RequestParam(required = false, defaultValue = "1") String code) {
LianTongArea area = LianTongAreaUtils.getArea(code);
return success(BeanUtils.toBean(area.getChildren(), LianTongAreaVo.class));
}
}

View File

@ -1,138 +0,0 @@
package cn.iocoder.yudao.module.haoka.service.address;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import jakarta.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.haoka.controller.admin.address.vo.*;
import cn.iocoder.yudao.module.haoka.dal.dataobject.address.AddressAreaDO;
import cn.iocoder.yudao.module.haoka.dal.mysql.address.AddressAreaMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AddressAreaServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
@Import(AddressAreaServiceImpl.class)
public class AddressAreaServiceImplTest extends BaseDbUnitTest {
@Resource
private AddressAreaServiceImpl addressAreaService;
@Resource
private AddressAreaMapper addressAreaMapper;
@Test
public void testCreateAddressArea_success() {
// 准备参数
AddressAreaSaveReqVO createReqVO = randomPojo(AddressAreaSaveReqVO.class).setId(null);
// 调用
String addressAreaId = addressAreaService.createAddressArea(createReqVO);
// 断言
assertNotNull(addressAreaId);
// 校验记录的属性是否正确
AddressAreaDO addressArea = addressAreaMapper.selectById(addressAreaId);
assertPojoEquals(createReqVO, addressArea, "id");
}
@Test
public void testUpdateAddressArea_success() {
// mock 数据
AddressAreaDO dbAddressArea = randomPojo(AddressAreaDO.class);
addressAreaMapper.insert(dbAddressArea);// @Sql: 先插入出一条存在的数据
// 准备参数
AddressAreaSaveReqVO updateReqVO = randomPojo(AddressAreaSaveReqVO.class, o -> {
o.setId(dbAddressArea.getId()); // 设置更新的 ID
});
// 调用
addressAreaService.updateAddressArea(updateReqVO);
// 校验是否更新正确
AddressAreaDO addressArea = addressAreaMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, addressArea);
}
@Test
public void testUpdateAddressArea_notExists() {
// 准备参数
AddressAreaSaveReqVO updateReqVO = randomPojo(AddressAreaSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> addressAreaService.updateAddressArea(updateReqVO), ADDRESS_AREA_NOT_EXISTS);
}
@Test
public void testDeleteAddressArea_success() {
// mock 数据
AddressAreaDO dbAddressArea = randomPojo(AddressAreaDO.class);
addressAreaMapper.insert(dbAddressArea);// @Sql: 先插入出一条存在的数据
// 准备参数
String id = dbAddressArea.getId();
// 调用
addressAreaService.deleteAddressArea(id);
// 校验数据不存在了
assertNull(addressAreaMapper.selectById(id));
}
@Test
public void testDeleteAddressArea_notExists() {
// 准备参数
String id = randomStringId();
// 调用, 并断言异常
assertServiceException(() -> addressAreaService.deleteAddressArea(id), ADDRESS_AREA_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值然后删除 @Disabled 注解
public void testGetAddressAreaPage() {
// mock 数据
AddressAreaDO dbAddressArea = randomPojo(AddressAreaDO.class, o -> { // 等会查询到
o.setName(null);
o.setCityCode(null);
o.setProvinceCode(null);
});
addressAreaMapper.insert(dbAddressArea);
// 测试 name 不匹配
addressAreaMapper.insert(cloneIgnoreId(dbAddressArea, o -> o.setName(null)));
// 测试 cityCode 不匹配
addressAreaMapper.insert(cloneIgnoreId(dbAddressArea, o -> o.setCityCode(null)));
// 测试 provinceCode 不匹配
addressAreaMapper.insert(cloneIgnoreId(dbAddressArea, o -> o.setProvinceCode(null)));
// 准备参数
AddressAreaPageReqVO reqVO = new AddressAreaPageReqVO();
reqVO.setName(null);
reqVO.setCityCode(null);
reqVO.setProvinceCode(null);
// 调用
PageResult<AddressAreaDO> pageResult = addressAreaService.getAddressAreaPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAddressArea, pageResult.getList().get(0));
}
}

View File

@ -1,134 +0,0 @@
package cn.iocoder.yudao.module.haoka.service.address;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import jakarta.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.haoka.controller.admin.address.vo.*;
import cn.iocoder.yudao.module.haoka.dal.dataobject.address.AddressCityDO;
import cn.iocoder.yudao.module.haoka.dal.mysql.address.AddressCityMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AddressCityServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
@Import(AddressCityServiceImpl.class)
public class AddressCityServiceImplTest extends BaseDbUnitTest {
@Resource
private AddressCityServiceImpl addressCityService;
@Resource
private AddressCityMapper addressCityMapper;
@Test
public void testCreateAddressCity_success() {
// 准备参数
AddressCitySaveReqVO createReqVO = randomPojo(AddressCitySaveReqVO.class).setId(null);
// 调用
String addressCityId = addressCityService.createAddressCity(createReqVO);
// 断言
assertNotNull(addressCityId);
// 校验记录的属性是否正确
AddressCityDO addressCity = addressCityMapper.selectById(addressCityId);
assertPojoEquals(createReqVO, addressCity, "id");
}
@Test
public void testUpdateAddressCity_success() {
// mock 数据
AddressCityDO dbAddressCity = randomPojo(AddressCityDO.class);
addressCityMapper.insert(dbAddressCity);// @Sql: 先插入出一条存在的数据
// 准备参数
AddressCitySaveReqVO updateReqVO = randomPojo(AddressCitySaveReqVO.class, o -> {
o.setId(dbAddressCity.getId()); // 设置更新的 ID
});
// 调用
addressCityService.updateAddressCity(updateReqVO);
// 校验是否更新正确
AddressCityDO addressCity = addressCityMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, addressCity);
}
@Test
public void testUpdateAddressCity_notExists() {
// 准备参数
AddressCitySaveReqVO updateReqVO = randomPojo(AddressCitySaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> addressCityService.updateAddressCity(updateReqVO), ADDRESS_CITY_NOT_EXISTS);
}
@Test
public void testDeleteAddressCity_success() {
// mock 数据
AddressCityDO dbAddressCity = randomPojo(AddressCityDO.class);
addressCityMapper.insert(dbAddressCity);// @Sql: 先插入出一条存在的数据
// 准备参数
String id = dbAddressCity.getId();
// 调用
addressCityService.deleteAddressCity(id);
// 校验数据不存在了
assertNull(addressCityMapper.selectById(id));
}
@Test
public void testDeleteAddressCity_notExists() {
// 准备参数
String id = randomStringId();
// 调用, 并断言异常
assertServiceException(() -> addressCityService.deleteAddressCity(id), ADDRESS_CITY_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值然后删除 @Disabled 注解
public void testGetAddressCityPage() {
// mock 数据
AddressCityDO dbAddressCity = randomPojo(AddressCityDO.class, o -> { // 等会查询到
o.setName(null);
o.setProvinceCode(null);
});
addressCityMapper.insert(dbAddressCity);
// 测试 name 不匹配
addressCityMapper.insert(cloneIgnoreId(dbAddressCity, o -> o.setName(null)));
// 测试 provinceCode 不匹配
addressCityMapper.insert(cloneIgnoreId(dbAddressCity, o -> o.setProvinceCode(null)));
// 准备参数
AddressCityPageReqVO reqVO = new AddressCityPageReqVO();
reqVO.setName(null);
reqVO.setProvinceCode(null);
// 调用
PageResult<AddressCityDO> pageResult = addressCityService.getAddressCityPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAddressCity, pageResult.getList().get(0));
}
}

View File

@ -1,130 +0,0 @@
package cn.iocoder.yudao.module.haoka.service.address;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import jakarta.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.haoka.controller.admin.address.vo.*;
import cn.iocoder.yudao.module.haoka.dal.dataobject.address.AddressProvinceDO;
import cn.iocoder.yudao.module.haoka.dal.mysql.address.AddressProvinceMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AddressProvinceServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
@Import(AddressProvinceServiceImpl.class)
public class AddressProvinceServiceImplTest extends BaseDbUnitTest {
@Resource
private AddressProvinceServiceImpl addressProvinceService;
@Resource
private AddressProvinceMapper addressProvinceMapper;
@Test
public void testCreateAddressProvince_success() {
// 准备参数
AddressProvinceSaveReqVO createReqVO = randomPojo(AddressProvinceSaveReqVO.class).setId(null);
// 调用
String addressProvinceId = addressProvinceService.createAddressProvince(createReqVO);
// 断言
assertNotNull(addressProvinceId);
// 校验记录的属性是否正确
AddressProvinceDO addressProvince = addressProvinceMapper.selectById(addressProvinceId);
assertPojoEquals(createReqVO, addressProvince, "id");
}
@Test
public void testUpdateAddressProvince_success() {
// mock 数据
AddressProvinceDO dbAddressProvince = randomPojo(AddressProvinceDO.class);
addressProvinceMapper.insert(dbAddressProvince);// @Sql: 先插入出一条存在的数据
// 准备参数
AddressProvinceSaveReqVO updateReqVO = randomPojo(AddressProvinceSaveReqVO.class, o -> {
o.setId(dbAddressProvince.getId()); // 设置更新的 ID
});
// 调用
addressProvinceService.updateAddressProvince(updateReqVO);
// 校验是否更新正确
AddressProvinceDO addressProvince = addressProvinceMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, addressProvince);
}
@Test
public void testUpdateAddressProvince_notExists() {
// 准备参数
AddressProvinceSaveReqVO updateReqVO = randomPojo(AddressProvinceSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> addressProvinceService.updateAddressProvince(updateReqVO), ADDRESS_PROVINCE_NOT_EXISTS);
}
@Test
public void testDeleteAddressProvince_success() {
// mock 数据
AddressProvinceDO dbAddressProvince = randomPojo(AddressProvinceDO.class);
addressProvinceMapper.insert(dbAddressProvince);// @Sql: 先插入出一条存在的数据
// 准备参数
String id = dbAddressProvince.getId();
// 调用
addressProvinceService.deleteAddressProvince(id);
// 校验数据不存在了
assertNull(addressProvinceMapper.selectById(id));
}
@Test
public void testDeleteAddressProvince_notExists() {
// 准备参数
String id = randomStringId();
// 调用, 并断言异常
assertServiceException(() -> addressProvinceService.deleteAddressProvince(id), ADDRESS_PROVINCE_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值然后删除 @Disabled 注解
public void testGetAddressProvincePage() {
// mock 数据
AddressProvinceDO dbAddressProvince = randomPojo(AddressProvinceDO.class, o -> { // 等会查询到
o.setName(null);
});
addressProvinceMapper.insert(dbAddressProvince);
// 测试 name 不匹配
addressProvinceMapper.insert(cloneIgnoreId(dbAddressProvince, o -> o.setName(null)));
// 准备参数
AddressProvincePageReqVO reqVO = new AddressProvincePageReqVO();
reqVO.setName(null);
// 调用
PageResult<AddressProvinceDO> pageResult = addressProvinceService.getAddressProvincePage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAddressProvince, pageResult.getList().get(0));
}
}

View File

@ -1,142 +0,0 @@
package cn.iocoder.yudao.module.haoka.service.address;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import jakarta.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.haoka.controller.admin.address.vo.*;
import cn.iocoder.yudao.module.haoka.dal.dataobject.address.AddressStreetDO;
import cn.iocoder.yudao.module.haoka.dal.mysql.address.AddressStreetMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AddressStreetServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
@Import(AddressStreetServiceImpl.class)
public class AddressStreetServiceImplTest extends BaseDbUnitTest {
@Resource
private AddressStreetServiceImpl addressStreetService;
@Resource
private AddressStreetMapper addressStreetMapper;
@Test
public void testCreateAddressStreet_success() {
// 准备参数
AddressStreetSaveReqVO createReqVO = randomPojo(AddressStreetSaveReqVO.class).setId(null);
// 调用
String addressStreetId = addressStreetService.createAddressStreet(createReqVO);
// 断言
assertNotNull(addressStreetId);
// 校验记录的属性是否正确
AddressStreetDO addressStreet = addressStreetMapper.selectById(addressStreetId);
assertPojoEquals(createReqVO, addressStreet, "id");
}
@Test
public void testUpdateAddressStreet_success() {
// mock 数据
AddressStreetDO dbAddressStreet = randomPojo(AddressStreetDO.class);
addressStreetMapper.insert(dbAddressStreet);// @Sql: 先插入出一条存在的数据
// 准备参数
AddressStreetSaveReqVO updateReqVO = randomPojo(AddressStreetSaveReqVO.class, o -> {
o.setId(dbAddressStreet.getId()); // 设置更新的 ID
});
// 调用
addressStreetService.updateAddressStreet(updateReqVO);
// 校验是否更新正确
AddressStreetDO addressStreet = addressStreetMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, addressStreet);
}
@Test
public void testUpdateAddressStreet_notExists() {
// 准备参数
AddressStreetSaveReqVO updateReqVO = randomPojo(AddressStreetSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> addressStreetService.updateAddressStreet(updateReqVO), ADDRESS_STREET_NOT_EXISTS);
}
@Test
public void testDeleteAddressStreet_success() {
// mock 数据
AddressStreetDO dbAddressStreet = randomPojo(AddressStreetDO.class);
addressStreetMapper.insert(dbAddressStreet);// @Sql: 先插入出一条存在的数据
// 准备参数
String id = dbAddressStreet.getId();
// 调用
addressStreetService.deleteAddressStreet(id);
// 校验数据不存在了
assertNull(addressStreetMapper.selectById(id));
}
@Test
public void testDeleteAddressStreet_notExists() {
// 准备参数
String id = randomStringId();
// 调用, 并断言异常
assertServiceException(() -> addressStreetService.deleteAddressStreet(id), ADDRESS_STREET_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值然后删除 @Disabled 注解
public void testGetAddressStreetPage() {
// mock 数据
AddressStreetDO dbAddressStreet = randomPojo(AddressStreetDO.class, o -> { // 等会查询到
o.setName(null);
o.setAreaCode(null);
o.setProvinceCode(null);
o.setCityCode(null);
});
addressStreetMapper.insert(dbAddressStreet);
// 测试 name 不匹配
addressStreetMapper.insert(cloneIgnoreId(dbAddressStreet, o -> o.setName(null)));
// 测试 areaCode 不匹配
addressStreetMapper.insert(cloneIgnoreId(dbAddressStreet, o -> o.setAreaCode(null)));
// 测试 provinceCode 不匹配
addressStreetMapper.insert(cloneIgnoreId(dbAddressStreet, o -> o.setProvinceCode(null)));
// 测试 cityCode 不匹配
addressStreetMapper.insert(cloneIgnoreId(dbAddressStreet, o -> o.setCityCode(null)));
// 准备参数
AddressStreetPageReqVO reqVO = new AddressStreetPageReqVO();
reqVO.setName(null);
reqVO.setAreaCode(null);
reqVO.setProvinceCode(null);
reqVO.setCityCode(null);
// 调用
PageResult<AddressStreetDO> pageResult = addressStreetService.getAddressStreetPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAddressStreet, pageResult.getList().get(0));
}
}

View File

@ -1,146 +0,0 @@
package cn.iocoder.yudao.module.haoka.service.address;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import jakarta.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.haoka.controller.admin.address.vo.*;
import cn.iocoder.yudao.module.haoka.dal.dataobject.address.AddressVillageDO;
import cn.iocoder.yudao.module.haoka.dal.mysql.address.AddressVillageMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AddressVillageServiceImpl} 的单元测试类
*
* @author 芋道源码
*/
@Import(AddressVillageServiceImpl.class)
public class AddressVillageServiceImplTest extends BaseDbUnitTest {
@Resource
private AddressVillageServiceImpl addressVillageService;
@Resource
private AddressVillageMapper addressVillageMapper;
@Test
public void testCreateAddressVillage_success() {
// 准备参数
AddressVillageSaveReqVO createReqVO = randomPojo(AddressVillageSaveReqVO.class).setId(null);
// 调用
String addressVillageId = addressVillageService.createAddressVillage(createReqVO);
// 断言
assertNotNull(addressVillageId);
// 校验记录的属性是否正确
AddressVillageDO addressVillage = addressVillageMapper.selectById(addressVillageId);
assertPojoEquals(createReqVO, addressVillage, "id");
}
@Test
public void testUpdateAddressVillage_success() {
// mock 数据
AddressVillageDO dbAddressVillage = randomPojo(AddressVillageDO.class);
addressVillageMapper.insert(dbAddressVillage);// @Sql: 先插入出一条存在的数据
// 准备参数
AddressVillageSaveReqVO updateReqVO = randomPojo(AddressVillageSaveReqVO.class, o -> {
o.setId(dbAddressVillage.getId()); // 设置更新的 ID
});
// 调用
addressVillageService.updateAddressVillage(updateReqVO);
// 校验是否更新正确
AddressVillageDO addressVillage = addressVillageMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, addressVillage);
}
@Test
public void testUpdateAddressVillage_notExists() {
// 准备参数
AddressVillageSaveReqVO updateReqVO = randomPojo(AddressVillageSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> addressVillageService.updateAddressVillage(updateReqVO), ADDRESS_VILLAGE_NOT_EXISTS);
}
@Test
public void testDeleteAddressVillage_success() {
// mock 数据
AddressVillageDO dbAddressVillage = randomPojo(AddressVillageDO.class);
addressVillageMapper.insert(dbAddressVillage);// @Sql: 先插入出一条存在的数据
// 准备参数
String id = dbAddressVillage.getId();
// 调用
addressVillageService.deleteAddressVillage(id);
// 校验数据不存在了
assertNull(addressVillageMapper.selectById(id));
}
@Test
public void testDeleteAddressVillage_notExists() {
// 准备参数
String id = randomStringId();
// 调用, 并断言异常
assertServiceException(() -> addressVillageService.deleteAddressVillage(id), ADDRESS_VILLAGE_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值然后删除 @Disabled 注解
public void testGetAddressVillagePage() {
// mock 数据
AddressVillageDO dbAddressVillage = randomPojo(AddressVillageDO.class, o -> { // 等会查询到
o.setName(null);
o.setStreetCode(null);
o.setProvinceCode(null);
o.setCityCode(null);
o.setAreaCode(null);
});
addressVillageMapper.insert(dbAddressVillage);
// 测试 name 不匹配
addressVillageMapper.insert(cloneIgnoreId(dbAddressVillage, o -> o.setName(null)));
// 测试 streetCode 不匹配
addressVillageMapper.insert(cloneIgnoreId(dbAddressVillage, o -> o.setStreetCode(null)));
// 测试 provinceCode 不匹配
addressVillageMapper.insert(cloneIgnoreId(dbAddressVillage, o -> o.setProvinceCode(null)));
// 测试 cityCode 不匹配
addressVillageMapper.insert(cloneIgnoreId(dbAddressVillage, o -> o.setCityCode(null)));
// 测试 areaCode 不匹配
addressVillageMapper.insert(cloneIgnoreId(dbAddressVillage, o -> o.setAreaCode(null)));
// 准备参数
AddressVillagePageReqVO reqVO = new AddressVillagePageReqVO();
reqVO.setName(null);
reqVO.setStreetCode(null);
reqVO.setProvinceCode(null);
reqVO.setCityCode(null);
reqVO.setAreaCode(null);
// 调用
PageResult<AddressVillageDO> pageResult = addressVillageService.getAddressVillagePage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAddressVillage, pageResult.getList().get(0));
}
}