package com.cloudroam.service.impl; import com.cloudroam.mapper.*; import com.cloudroam.model.*; import com.cloudroam.mapper.*; import com.cloudroam.model.*; import io.github.talelin.autoconfigure.exception.ForbiddenException; import com.cloudroam.common.LocalUser; import com.cloudroam.dto.user.ChangePasswordDTO; import com.cloudroam.dto.user.RegisterDTO; import com.cloudroam.dto.user.UpdateInfoDTO; import com.cloudroam.mapper.*; import com.cloudroam.model.*; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @Transactional @Rollback @Slf4j @ActiveProfiles("test") @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class UserServiceImplTest { @Autowired private UserServiceImpl userService; @Autowired private AdminServiceImpl adminService; @Autowired private UserIdentityServiceImpl userIdentityService; @Autowired private GroupMapper groupMapper; @Autowired private UserGroupMapper userGroupMapper; @Autowired private PermissionMapper permissionMapper; @Autowired private GroupPermissionMapper groupPermissionMapper; @Autowired private UserMapper userMapper; public Integer mockData() { UserDO user = UserDO.builder().username("pedro大大咧咧").nickname("pedro大大咧咧").build(); GroupDO group = GroupDO.builder().name("测试分组1").info("just for test").build(); PermissionDO permission1 = PermissionDO.builder().name("权限1").module("炉石传说").build(); PermissionDO permission2 = PermissionDO.builder().name("权限2").module("炉石传说").build(); userMapper.insert(user); groupMapper.insert(group); permissionMapper.insert(permission1); permissionMapper.insert(permission2); List relations = new ArrayList<>(); GroupPermissionDO relation1 = new GroupPermissionDO(group.getId(), permission1.getId()); GroupPermissionDO relation2 = new GroupPermissionDO(group.getId(), permission2.getId()); relations.add(relation1); relations.add(relation2); groupPermissionMapper.insertBatch(relations); UserGroupDO userGroup = new UserGroupDO(user.getId(), group.getId()); userGroupMapper.insert(userGroup); return user.getId(); } @BeforeAll public void setUp() { RegisterDTO dto = new RegisterDTO(); dto.setUsername("pedro"); dto.setPassword("123456"); dto.setConfirmPassword("123456"); log.info("dto: {}", dto); UserDO user = userService.createUser(dto); log.info("user: {}", user); // Mock logined user LocalUser.setLocalUser(user); } @Test public void createUser() { RegisterDTO dto = new RegisterDTO(); dto.setUsername("pedro111"); dto.setPassword("123456"); dto.setConfirmPassword("123456"); log.info("dto: {}", dto); UserDO user = userService.createUser(dto); log.info("user: {}", user); assertEquals(user.getUsername(), "pedro111"); assertNull(user.getEmail()); } @Test public void updateUserInfo() { UpdateInfoDTO dto = new UpdateInfoDTO(); dto.setNickname("pedro-gao"); dto.setUsername("pedro-gao"); dto.setEmail("1312342604@qq.com"); userService.updateUserInfo(dto); UserDO userDO = userService.getUserByUsername("pedro-gao"); assertEquals(userDO.getEmail(), "1312342604@qq.com"); boolean b = userIdentityService.verifyUsernamePassword(userDO.getId(), "pedro-gao", "123456"); assertTrue(b); } @Test public void updateUserInfoNoUsername() { UpdateInfoDTO dto = new UpdateInfoDTO(); dto.setNickname("pedro-gao"); dto.setEmail("1312342604@qq.com"); userService.updateUserInfo(dto); UserDO userDO = userService.getUserByUsername("pedro"); assertEquals(userDO.getEmail(), "1312342604@qq.com"); assertEquals(userDO.getNickname(), "pedro-gao"); boolean b = userIdentityService.verifyUsernamePassword(userDO.getId(), "pedro", "123456"); assertTrue(b); } @Test public void changeUserPassword() { ChangePasswordDTO dto = new ChangePasswordDTO(); dto.setNewPassword("147258"); dto.setConfirmPassword("147258"); dto.setOldPassword("123456"); UserDO user = userService.changeUserPassword(dto); boolean b = userIdentityService.verifyUsernamePassword(user.getId(), "pedro", "147258"); assertTrue(b); } @Test public void getUserPermissions() { Integer id = mockData(); List>>> structuringPermissions = userService.getStructuralUserPermissions(id); assertTrue(structuringPermissions.size() > 0); log.info("structuringPermissions: {}", structuringPermissions); boolean anyMatch = structuringPermissions.stream().anyMatch(it -> it.containsKey("炉石传说")); assertTrue(anyMatch); } @Test public void findByUsername() { UserDO user = userService.getUserByUsername("pedro"); log.info("user:{}", user); assertEquals(user.getUsername(), "pedro"); } @Test public void checkUserExistByUsername() { boolean b = userService.checkUserExistByUsername("pedro"); assertTrue(b); } @Test public void checkUserExistById() { boolean b = userService.checkUserExistById(100); assertFalse(b); } @Test public void checkUserExistById1() { UserDO user = LocalUser.getLocalUser(); boolean b = userService.checkUserExistById(user.getId()); assertTrue(b); } @Test public void checkCreateAndDeleteUser() { // 新建某个用户 RegisterDTO dto = new RegisterDTO(); dto.setUsername("pedro111"); dto.setPassword("123456"); dto.setConfirmPassword("123456"); log.info("dto: {}", dto); UserDO user = userService.createUser(dto); log.info("user: {}", user); assertEquals(user.getUsername(), "pedro111"); assertNull(user.getEmail()); boolean b = true; try { b = adminService.deleteUser(user.getId()); } catch (ForbiddenException ignored) {} assertTrue(b); UserDO newUser = userService.createUser(dto); assertEquals(newUser.getUsername(), "pedro111"); } }