package cn.iocoder.yudao.module.member.service.group;
|
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
|
import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO;
|
import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper;
|
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
import jakarta.annotation.Resource;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.context.annotation.Import;
|
import org.springframework.test.context.bean.override.mockito.MockitoBean;
|
|
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
|
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
|
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
|
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER;
|
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_NOT_EXISTS;
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.Mockito.when;
|
|
// TODO 芋艿:完全 review 完,在去 review 单测
|
/**
|
* {@link MemberGroupServiceImpl} 的单元测试类
|
*
|
* @author owen
|
*/
|
@Import(MemberGroupServiceImpl.class)
|
public class MemberGroupServiceImplTest extends BaseDbUnitTest {
|
|
@Resource
|
private MemberGroupServiceImpl groupService;
|
|
@Resource
|
private MemberGroupMapper groupMapper;
|
|
@MockitoBean
|
private MemberUserService memberUserService;
|
|
@Test
|
public void testCreateGroup_success() {
|
// 准备参数
|
MemberGroupCreateReqVO reqVO = randomPojo(MemberGroupCreateReqVO.class,
|
o -> o.setStatus(randomCommonStatus()));
|
|
// 调用
|
Long groupId = groupService.createGroup(reqVO);
|
// 断言
|
assertNotNull(groupId);
|
// 校验记录的属性是否正确
|
MemberGroupDO group = groupMapper.selectById(groupId);
|
assertPojoEquals(reqVO, group);
|
}
|
|
@Test
|
public void testUpdateGroup_success() {
|
// mock 数据
|
MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class);
|
groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据
|
// 准备参数
|
MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class, o -> {
|
o.setId(dbGroup.getId()); // 设置更新的 ID
|
o.setStatus(randomCommonStatus());
|
});
|
|
// 调用
|
groupService.updateGroup(reqVO);
|
// 校验是否更新正确
|
MemberGroupDO group = groupMapper.selectById(reqVO.getId()); // 获取最新的
|
assertPojoEquals(reqVO, group);
|
}
|
|
@Test
|
public void testUpdateGroup_notExists() {
|
// 准备参数
|
MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class);
|
|
// 调用, 并断言异常
|
assertServiceException(() -> groupService.updateGroup(reqVO), GROUP_NOT_EXISTS);
|
}
|
|
@Test
|
public void testDeleteGroup_success() {
|
// mock 数据
|
MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class);
|
groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据
|
// 准备参数
|
Long id = dbGroup.getId();
|
|
// 调用
|
groupService.deleteGroup(id);
|
// 校验数据不存在了
|
assertNull(groupMapper.selectById(id));
|
}
|
|
@Test
|
public void testDeleteGroup_notExists() {
|
// 准备参数
|
Long id = randomLongId();
|
|
// 调用, 并断言异常
|
assertServiceException(() -> groupService.deleteGroup(id), GROUP_NOT_EXISTS);
|
}
|
|
@Test
|
public void testDeleteGroup_hasUser() {
|
// mock 数据
|
MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class);
|
groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据
|
// 准备参数
|
Long id = dbGroup.getId();
|
|
// mock 会员数据
|
when(memberUserService.getUserCountByGroupId(eq(id))).thenReturn(1L);
|
|
// 调用, 并断言异常
|
assertServiceException(() -> groupService.deleteGroup(id), GROUP_HAS_USER);
|
}
|
|
@Test
|
public void testGetGroupPage() {
|
String name = randomString();
|
int status = CommonStatusEnum.ENABLE.getStatus();
|
|
// mock 数据
|
MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class, o -> { // 等会查询到
|
o.setName(name);
|
o.setStatus(status);
|
o.setCreateTime(buildTime(2023, 2, 18));
|
});
|
groupMapper.insert(dbGroup);
|
// 测试 name 不匹配
|
groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setName("")));
|
// 测试 status 不匹配
|
groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
|
// 测试 createTime 不匹配
|
groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setCreateTime(null)));
|
// 准备参数
|
MemberGroupPageReqVO reqVO = new MemberGroupPageReqVO();
|
reqVO.setName(name);
|
reqVO.setStatus(status);
|
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
|
|
// 调用
|
PageResult<MemberGroupDO> pageResult = groupService.getGroupPage(reqVO);
|
// 断言
|
assertEquals(1, pageResult.getTotal());
|
assertEquals(1, pageResult.getList().size());
|
assertPojoEquals(dbGroup, pageResult.getList().get(0));
|
}
|
|
}
|