package com.tourguide.modules.user.service;
|
|
import com.tourguide.common.exception.BusinessException;
|
import com.tourguide.modules.user.dto.AdminPasswordResetRequest;
|
import com.tourguide.modules.user.entity.AdminUser;
|
import com.tourguide.modules.user.mapper.AdminUserMapper;
|
import com.tourguide.modules.user.mapper.SysRoleMapper;
|
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class AdminUserServiceTest {
|
private AdminUserMapper userMapper;
|
private PasswordEncoder passwordEncoder;
|
private AdminUserService service;
|
|
@BeforeEach
|
void setUp() {
|
userMapper = mock(AdminUserMapper.class);
|
passwordEncoder = mock(PasswordEncoder.class);
|
service = new AdminUserService(userMapper, mock(SysRoleMapper.class), passwordEncoder);
|
}
|
|
@Test
|
void resetPasswordShouldRejectCurrentPassword() {
|
AdminUser user = new AdminUser();
|
user.setId(8L);
|
user.setPassword("encoded-current-password");
|
AdminPasswordResetRequest request = new AdminPasswordResetRequest();
|
request.setNewPassword("NewPassword123!");
|
request.setConfirmPassword("NewPassword123!");
|
when(userMapper.selectById(8L)).thenReturn(user);
|
when(passwordEncoder.matches(request.getNewPassword(), user.getPassword())).thenReturn(true);
|
|
assertThatThrownBy(() -> service.resetPassword(8L, request))
|
.isInstanceOf(BusinessException.class)
|
.hasMessage("新密码不能和旧密码一致")
|
.extracting(error -> ((BusinessException) error).getCode())
|
.isEqualTo(400);
|
|
verify(passwordEncoder, never()).encode(request.getNewPassword());
|
verify(userMapper, never()).updateById(user);
|
}
|
}
|