mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	inf_config Service 的单元测试
This commit is contained in:
		| @@ -11,11 +11,13 @@ import cn.iocoder.dashboard.modules.infra.service.config.impl.InfConfigServiceIm | ||||
| import cn.iocoder.dashboard.util.AssertUtils; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.test.context.jdbc.Sql; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
|  | ||||
| import static cn.hutool.core.util.RandomUtil.randomEle; | ||||
| import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.CONFIG_KEY_DUPLICATE; | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.randomInfConfigCreateReqVO; | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.randomInfConfigDO; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| import static org.mockito.Mockito.times; | ||||
| import static org.mockito.Mockito.verify; | ||||
| @@ -34,13 +36,7 @@ public class InfConfigServiceImplTest extends BaseSpringBootUnitTest { | ||||
|     @Test | ||||
|     public void testCreateConfig_success() { | ||||
|         // 入参 | ||||
|         InfConfigCreateReqVO reqVO = new InfConfigCreateReqVO(); | ||||
|         reqVO.setGroup("test_group"); | ||||
|         reqVO.setName("test_name"); | ||||
|         reqVO.setValue("test_value"); | ||||
|         reqVO.setSensitive(true); | ||||
|         reqVO.setRemark("test_remark"); | ||||
|         reqVO.setKey("test_key"); | ||||
|         InfConfigCreateReqVO reqVO = randomInfConfigCreateReqVO(); | ||||
|         // mock | ||||
|  | ||||
|         // 调用 | ||||
| @@ -56,17 +52,14 @@ public class InfConfigServiceImplTest extends BaseSpringBootUnitTest { | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     @Sql(statements = "INSERT INTO `inf_config`(`group`, `type`, `name`, `key`, `value`, `sensitive`)  VALUES ('test_group', 1, 'test_name', 'test_key', 'test_value', 1);") | ||||
|     public void testCreateConfig_keyDuplicate() { | ||||
|         // 入参 | ||||
|         InfConfigCreateReqVO reqVO = new InfConfigCreateReqVO(); | ||||
|         reqVO.setGroup("test_group"); | ||||
|         reqVO.setName("test_name"); | ||||
|         reqVO.setValue("test_value"); | ||||
|         reqVO.setSensitive(true); | ||||
|         reqVO.setRemark("test_remark"); | ||||
|         reqVO.setKey("test_key"); | ||||
|         // mock | ||||
|         InfConfigCreateReqVO reqVO = randomInfConfigCreateReqVO(); | ||||
|         // mock 数据 | ||||
|         configMapper.insert(randomInfConfigDO(o -> { | ||||
|             o.setKey(reqVO.getKey()); // @Sql:插入一条重复的 key | ||||
|             o.setType(randomEle(InfConfigTypeEnum.values()).getType()); | ||||
|         })); | ||||
|  | ||||
|         // 调用 | ||||
|         ServiceException serviceException = assertThrows(ServiceException.class, () -> configService.createConfig(reqVO)); | ||||
|   | ||||
| @@ -1,19 +1,23 @@ | ||||
| package cn.iocoder.dashboard.modules.system.service.auth; | ||||
|  | ||||
| import cn.iocoder.dashboard.BaseSpringBootUnitTest; | ||||
| import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.dashboard.framework.security.core.LoginUser; | ||||
| import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | ||||
| import cn.iocoder.dashboard.modules.system.service.auth.impl.SysAuthServiceImpl; | ||||
| import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; | ||||
| import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | ||||
| import cn.iocoder.dashboard.util.AssertUtils; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.security.core.userdetails.UsernameNotFoundException; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Set; | ||||
|  | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.randomString; | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.randomUserDO; | ||||
| import static org.junit.jupiter.api.Assertions.assertNull; | ||||
| import static cn.iocoder.dashboard.util.RandomUtils.*; | ||||
| import static java.util.Collections.singleton; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
| import static org.mockito.ArgumentMatchers.eq; | ||||
| import static org.mockito.Mockito.when; | ||||
|  | ||||
| @@ -24,13 +28,15 @@ public class SysAuthServiceImplTest extends BaseSpringBootUnitTest { | ||||
|  | ||||
|     @MockBean | ||||
|     private SysUserService userService; | ||||
|     @MockBean | ||||
|     private SysPermissionService permissionService; | ||||
|  | ||||
|     @Test | ||||
|     public void testLoadUserByUsername_success() { | ||||
|         // 准备参数 | ||||
|         String username = randomString(); | ||||
|         // mock 方法 | ||||
|         SysUserDO user = randomUserDO(); | ||||
|         SysUserDO user = randomUserDO(o -> o.setUsername(username)); | ||||
|         when(userService.getUserByUserName(eq(username))).thenReturn(user); | ||||
|  | ||||
|         // 调用 | ||||
| @@ -40,4 +46,47 @@ public class SysAuthServiceImplTest extends BaseSpringBootUnitTest { | ||||
|         assertNull(loginUser.getRoleIds()); // 此时不会加载角色,所以是空的 | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testLoadUserByUsername_userNotFound() { | ||||
|         // 准备参数 | ||||
|         String username = randomString(); | ||||
|         // mock 方法 | ||||
|  | ||||
|         // 调用, 并断言异常 | ||||
|         assertThrows(UsernameNotFoundException.class, // 抛出 UsernameNotFoundException 异常 | ||||
|                 () -> authService.loadUserByUsername(username), | ||||
|                 username); // 异常提示为 username | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testMockLogin_success() { | ||||
|         // 准备参数 | ||||
|         Long userId = randomLong(); | ||||
|         // mock 方法 01 | ||||
|         SysUserDO user = randomUserDO(o -> o.setId(userId)); | ||||
|         when(userService.getUser(eq(userId))).thenReturn(user); | ||||
|         // mock 方法 02 | ||||
|         Set<Long> roleIds = randomSet(Long.class); | ||||
|         when(permissionService.getUserRoleIds(eq(userId), eq(singleton(CommonStatusEnum.ENABLE.getStatus())))) | ||||
|                 .thenReturn(roleIds); | ||||
|  | ||||
|         // 调用 | ||||
|         LoginUser loginUser = authService.mockLogin(userId); | ||||
|         // 断言 | ||||
|         AssertUtils.assertEquals(user, loginUser, "updateTime"); | ||||
|         assertEquals(roleIds, loginUser.getRoleIds()); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testMockLogin_userNotFound() { | ||||
|         // 准备参数 | ||||
|         Long userId = randomLong(); | ||||
|         // mock 方法 | ||||
|  | ||||
|         // 调用, 并断言异常 | ||||
|         assertThrows(UsernameNotFoundException.class, // 抛出 UsernameNotFoundException 异常 | ||||
|                 () -> authService.mockLogin(userId), | ||||
|                 String.valueOf(userId)); // 异常提示为 userId | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -2,13 +2,18 @@ package cn.iocoder.dashboard.util; | ||||
|  | ||||
| import cn.hutool.core.util.ArrayUtil; | ||||
| import cn.hutool.core.util.RandomUtil; | ||||
| import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO; | ||||
| import cn.iocoder.dashboard.modules.infra.dal.dataobject.config.InfConfigDO; | ||||
| import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | ||||
| import uk.co.jemos.podam.api.PodamFactory; | ||||
| import uk.co.jemos.podam.api.PodamFactoryImpl; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.Date; | ||||
| import java.util.Set; | ||||
| import java.util.function.Consumer; | ||||
| import java.util.stream.Collectors; | ||||
| import java.util.stream.Stream; | ||||
|  | ||||
| /** | ||||
|  * 随机工具类 | ||||
| @@ -21,8 +26,24 @@ public class RandomUtils { | ||||
|  | ||||
|     private static final int RANDOM_DATE_MAX = 30; | ||||
|  | ||||
|     private static final int RANDOM_COLLECTION_LENGTH = 5; | ||||
|  | ||||
|     private static final PodamFactory PODAM_FACTORY = new PodamFactoryImpl(); | ||||
|  | ||||
|     static { | ||||
|         // 字符串 | ||||
|         PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(String.class, | ||||
|                 (dataProviderStrategy, attributeMetadata, map) -> randomString()); | ||||
|         // Boolean | ||||
|         PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(Boolean.class, (dataProviderStrategy, attributeMetadata, map) -> { | ||||
|             // 如果是 deleted 的字段,返回非删除 | ||||
|             if (attributeMetadata.getAttributeName().equals("deleted")) { | ||||
|                 return false; | ||||
|             } | ||||
|             return RandomUtil.randomBoolean(); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public static String randomString() { | ||||
|         return RandomUtil.randomString(RANDOM_STRING_LENGTH); | ||||
|     } | ||||
| @@ -43,11 +64,26 @@ public class RandomUtils { | ||||
|         return (short) RandomUtil.randomInt(0, Short.MAX_VALUE); | ||||
|     } | ||||
|  | ||||
|     public static <T> Set<T> randomSet(Class<T> clazz) { | ||||
|         return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(0, RANDOM_DATE_MAX)) | ||||
|                 .map(i -> randomPojo(clazz)).collect(Collectors.toSet()); | ||||
|     } | ||||
|  | ||||
|     @SafeVarargs | ||||
|     public static SysUserDO randomUserDO(Consumer<SysUserDO>... consumers) { | ||||
|         return randomPojo(SysUserDO.class, consumers); | ||||
|     } | ||||
|  | ||||
|     @SafeVarargs | ||||
|     public static InfConfigCreateReqVO randomInfConfigCreateReqVO(Consumer<InfConfigCreateReqVO>... consumers) { | ||||
|         return randomPojo(InfConfigCreateReqVO.class, consumers); | ||||
|     } | ||||
|  | ||||
|     @SafeVarargs | ||||
|     public static InfConfigDO randomInfConfigDO(Consumer<InfConfigDO>... consumers) { | ||||
|         return randomPojo(InfConfigDO.class, consumers); | ||||
|     } | ||||
|  | ||||
|     @SafeVarargs | ||||
|     private static <T> T randomPojo(Class<T> clazz, Consumer<T>... consumers) { | ||||
|         T pojo = PODAM_FACTORY.manufacturePojo(clazz); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV