test(iam,community): add unit tests for AuthService, AdminIamService, EnergyCommunityService
- AuthServiceTest: register, login, verifyEmail (7 tests) - AdminIamServiceTest: approve, reject, getPendingUsers (7 tests) - EnergyCommunityServiceTest: CRUD, member counts, delete guards (9 tests)
This commit is contained in:
parent
a9329b309f
commit
8546dcc508
@ -0,0 +1,169 @@
|
|||||||
|
package at.mueller.eeg.backend.community.service;
|
||||||
|
|
||||||
|
import at.mueller.eeg.backend.community.api.dto.EnergyCommunityDto;
|
||||||
|
import at.mueller.eeg.backend.community.domain.CommunityType;
|
||||||
|
import at.mueller.eeg.backend.community.domain.EnergyCommunity;
|
||||||
|
import at.mueller.eeg.backend.community.mapper.EnergyCommunityMapper;
|
||||||
|
import at.mueller.eeg.backend.community.repository.EnergyCommunityRepository;
|
||||||
|
import at.mueller.eeg.backend.community.repository.MembershipRepository;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class EnergyCommunityServiceTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private EnergyCommunityRepository energyCommunityRepository;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private MembershipRepository membershipRepository;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private EnergyCommunityMapper energyCommunityMapper;
|
||||||
|
|
||||||
|
@InjectMocks
|
||||||
|
private EnergyCommunityService energyCommunityService;
|
||||||
|
|
||||||
|
private EnergyCommunity testCommunity;
|
||||||
|
private UUID testCommunityId;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
testCommunityId = UUID.randomUUID();
|
||||||
|
|
||||||
|
testCommunity = new EnergyCommunity();
|
||||||
|
testCommunity.setId(testCommunityId);
|
||||||
|
testCommunity.setEdaEcId("EEG-001");
|
||||||
|
testCommunity.setType(CommunityType.EEG_LOKAL);
|
||||||
|
testCommunity.setName("Test-Energiegemeinschaft");
|
||||||
|
testCommunity.setGridOperatorId("GridOp-01");
|
||||||
|
testCommunity.setSubstationId("UW-01");
|
||||||
|
testCommunity.setTransformerId("Trafo-01");
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Object[]> memberCountRow(UUID communityId, long count) {
|
||||||
|
List<Object[]> rows = new ArrayList<>();
|
||||||
|
rows.add(new Object[]{communityId, count});
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getAllCommunitiesForAdmin() {
|
||||||
|
when(energyCommunityRepository.findAll()).thenReturn(List.of(testCommunity));
|
||||||
|
doReturn(memberCountRow(testCommunityId, 5L))
|
||||||
|
.when(membershipRepository).countActiveMembersForCommunities(List.of(testCommunityId));
|
||||||
|
|
||||||
|
List<EnergyCommunityDto> result = energyCommunityService.getAllCommunitiesForAdmin();
|
||||||
|
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
assertEquals("Test-Energiegemeinschaft", result.get(0).name());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getCommunityById_success() {
|
||||||
|
when(energyCommunityRepository.findById(testCommunityId)).thenReturn(Optional.of(testCommunity));
|
||||||
|
doReturn(memberCountRow(testCommunityId, 3L))
|
||||||
|
.when(membershipRepository).countActiveMembersForCommunities(List.of(testCommunityId));
|
||||||
|
|
||||||
|
EnergyCommunityDto result = energyCommunityService.getCommunityById(testCommunityId);
|
||||||
|
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals("Test-Energiegemeinschaft", result.name());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getCommunityById_notFound_throws() {
|
||||||
|
UUID unknownId = UUID.randomUUID();
|
||||||
|
when(energyCommunityRepository.findById(unknownId)).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> energyCommunityService.getCommunityById(unknownId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void create_success() {
|
||||||
|
EnergyCommunityDto dto = new EnergyCommunityDto(null, "EEG-002", CommunityType.EEG_REGIONAL,
|
||||||
|
"Neue EG", "GridOp-02", "UW-02", "Trafo-02", 0);
|
||||||
|
|
||||||
|
when(energyCommunityMapper.toEntity(any(), any())).thenReturn(testCommunity);
|
||||||
|
when(energyCommunityRepository.save(any())).thenReturn(testCommunity);
|
||||||
|
when(energyCommunityMapper.toDto(any(), eq(0)))
|
||||||
|
.thenReturn(new EnergyCommunityDto(testCommunityId, "EEG-001", CommunityType.EEG_LOKAL,
|
||||||
|
"Test-Energiegemeinschaft", "GridOp-01", "UW-01", "Trafo-01", 0));
|
||||||
|
|
||||||
|
EnergyCommunityDto result = energyCommunityService.create(dto);
|
||||||
|
|
||||||
|
assertNotNull(result);
|
||||||
|
verify(energyCommunityRepository).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void update_success() {
|
||||||
|
EnergyCommunityDto dto = new EnergyCommunityDto(null, "EEG-001-UPDATED", CommunityType.EEG_LOKAL,
|
||||||
|
"Update EG", "GridOp-01", "UW-01", "Trafo-01", 0);
|
||||||
|
|
||||||
|
when(energyCommunityRepository.findById(testCommunityId)).thenReturn(Optional.of(testCommunity));
|
||||||
|
when(energyCommunityRepository.save(any())).thenReturn(testCommunity);
|
||||||
|
doReturn(memberCountRow(testCommunityId, 2L))
|
||||||
|
.when(membershipRepository).countActiveMembersForCommunities(List.of(testCommunityId));
|
||||||
|
when(energyCommunityMapper.toDto(any(), anyInt()))
|
||||||
|
.thenReturn(new EnergyCommunityDto(testCommunityId, "EEG-001-UPDATED", CommunityType.EEG_LOKAL,
|
||||||
|
"Update EG", "GridOp-01", "UW-01", "Trafo-01", 2));
|
||||||
|
|
||||||
|
EnergyCommunityDto result = energyCommunityService.update(testCommunityId, dto);
|
||||||
|
|
||||||
|
assertNotNull(result);
|
||||||
|
verify(energyCommunityRepository).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void update_notFound_throws() {
|
||||||
|
UUID unknownId = UUID.randomUUID();
|
||||||
|
EnergyCommunityDto dto = new EnergyCommunityDto(null, "EEG-002", CommunityType.EEG_REGIONAL,
|
||||||
|
"Neue EG", "GridOp-02", "UW-02", "Trafo-02", 0);
|
||||||
|
|
||||||
|
when(energyCommunityRepository.findById(unknownId)).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
assertThrows(ResponseStatusException.class, () -> energyCommunityService.update(unknownId, dto));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void delete_success() {
|
||||||
|
when(energyCommunityRepository.existsById(testCommunityId)).thenReturn(true);
|
||||||
|
when(membershipRepository.existsByEnergyCommunityId(testCommunityId)).thenReturn(false);
|
||||||
|
|
||||||
|
energyCommunityService.delete(testCommunityId);
|
||||||
|
|
||||||
|
verify(energyCommunityRepository).deleteById(testCommunityId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void delete_withMemberships_throws() {
|
||||||
|
when(energyCommunityRepository.existsById(testCommunityId)).thenReturn(true);
|
||||||
|
when(membershipRepository.existsByEnergyCommunityId(testCommunityId)).thenReturn(true);
|
||||||
|
|
||||||
|
assertThrows(ResponseStatusException.class, () -> energyCommunityService.delete(testCommunityId));
|
||||||
|
verify(energyCommunityRepository, never()).deleteById(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void delete_notFound_throws() {
|
||||||
|
UUID unknownId = UUID.randomUUID();
|
||||||
|
when(energyCommunityRepository.existsById(unknownId)).thenReturn(false);
|
||||||
|
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> energyCommunityService.delete(unknownId));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,127 @@
|
|||||||
|
package at.mueller.eeg.backend.iam.service;
|
||||||
|
|
||||||
|
import at.mueller.eeg.backend.common.event.UserApprovedEvent;
|
||||||
|
import at.mueller.eeg.backend.common.event.UserRejectedEvent;
|
||||||
|
import at.mueller.eeg.backend.iam.domain.RegistrationStatus;
|
||||||
|
import at.mueller.eeg.backend.iam.domain.User;
|
||||||
|
import at.mueller.eeg.backend.iam.repository.UserRepository;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class AdminIamServiceTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private UserRepository userRepository;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private ApplicationEventPublisher eventPublisher;
|
||||||
|
|
||||||
|
@InjectMocks
|
||||||
|
private AdminIamService adminIamService;
|
||||||
|
|
||||||
|
private User testUser;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
testUser = new User();
|
||||||
|
testUser.setId(UUID.randomUUID());
|
||||||
|
testUser.setEmail("test@example.com");
|
||||||
|
testUser.setFirstName("Test");
|
||||||
|
testUser.setLastName("Benutzer");
|
||||||
|
testUser.setStatus(RegistrationStatus.PENDING);
|
||||||
|
testUser.setEnabled(false);
|
||||||
|
testUser.setEmailVerified(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getPendingUsers() {
|
||||||
|
when(userRepository.findAllByStatusAndEmailVerified(RegistrationStatus.PENDING, true))
|
||||||
|
.thenReturn(List.of(testUser));
|
||||||
|
|
||||||
|
List<User> result = adminIamService.getPendingUsers();
|
||||||
|
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
assertEquals("test@example.com", result.get(0).getEmail());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void approveUser_success() {
|
||||||
|
when(userRepository.findById(testUser.getId())).thenReturn(Optional.of(testUser));
|
||||||
|
when(userRepository.save(any())).thenReturn(testUser);
|
||||||
|
|
||||||
|
adminIamService.approveUser(testUser.getId());
|
||||||
|
|
||||||
|
assertEquals(RegistrationStatus.APPROVED, testUser.getStatus());
|
||||||
|
assertTrue(testUser.isEnabled());
|
||||||
|
verify(eventPublisher).publishEvent(any(UserApprovedEvent.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void approveUser_notPending_throws() {
|
||||||
|
testUser.setStatus(RegistrationStatus.APPROVED);
|
||||||
|
when(userRepository.findById(testUser.getId())).thenReturn(Optional.of(testUser));
|
||||||
|
|
||||||
|
assertThrows(IllegalStateException.class, () -> adminIamService.approveUser(testUser.getId()));
|
||||||
|
verify(userRepository, never()).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void approveUser_alreadyEnabled_throws() {
|
||||||
|
testUser.setEnabled(true);
|
||||||
|
when(userRepository.findById(testUser.getId())).thenReturn(Optional.of(testUser));
|
||||||
|
|
||||||
|
assertThrows(IllegalStateException.class, () -> adminIamService.approveUser(testUser.getId()));
|
||||||
|
verify(userRepository, never()).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void approveUser_notFound_throws() {
|
||||||
|
UUID unknownId = UUID.randomUUID();
|
||||||
|
when(userRepository.findById(unknownId)).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> adminIamService.approveUser(unknownId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void rejectUser_success() {
|
||||||
|
when(userRepository.findById(testUser.getId())).thenReturn(Optional.of(testUser));
|
||||||
|
when(userRepository.save(any())).thenReturn(testUser);
|
||||||
|
|
||||||
|
adminIamService.rejectUser(testUser.getId());
|
||||||
|
|
||||||
|
assertEquals(RegistrationStatus.REJECTED, testUser.getStatus());
|
||||||
|
verify(eventPublisher).publishEvent(any(UserRejectedEvent.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void rejectUser_notPending_throws() {
|
||||||
|
testUser.setStatus(RegistrationStatus.APPROVED);
|
||||||
|
when(userRepository.findById(testUser.getId())).thenReturn(Optional.of(testUser));
|
||||||
|
|
||||||
|
assertThrows(ResponseStatusException.class, () -> adminIamService.rejectUser(testUser.getId()));
|
||||||
|
verify(userRepository, never()).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void rejectUser_notFound_throws() {
|
||||||
|
UUID unknownId = UUID.randomUUID();
|
||||||
|
when(userRepository.findById(unknownId)).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
assertThrows(ResponseStatusException.class, () -> adminIamService.rejectUser(unknownId));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,160 @@
|
|||||||
|
package at.mueller.eeg.backend.iam.service;
|
||||||
|
|
||||||
|
import at.mueller.eeg.backend.iam.api.dto.IamDtos;
|
||||||
|
import at.mueller.eeg.backend.iam.domain.ParticipantType;
|
||||||
|
import at.mueller.eeg.backend.iam.domain.User;
|
||||||
|
import at.mueller.eeg.backend.iam.mapper.UserMapper;
|
||||||
|
import at.mueller.eeg.backend.iam.repository.UserRepository;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
|
import org.springframework.security.authentication.AuthenticationManager;
|
||||||
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
|
import org.springframework.security.oauth2.jwt.JwtEncoder;
|
||||||
|
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class AuthServiceTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private AuthenticationManager authenticationManager;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private JwtEncoder jwtEncoder;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private UserRepository userRepository;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private UserMapper userMapper;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private ApplicationEventPublisher eventPublisher;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private MailService mailService;
|
||||||
|
|
||||||
|
@InjectMocks
|
||||||
|
private AuthService authService;
|
||||||
|
|
||||||
|
private User testUser;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
testUser = new User();
|
||||||
|
testUser.setId(UUID.randomUUID());
|
||||||
|
testUser.setEmail("test@example.com");
|
||||||
|
testUser.setPasswordHash("$2a$10$encodedPassword");
|
||||||
|
testUser.setFirstName("Test");
|
||||||
|
testUser.setLastName("Benutzer");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void register_success() {
|
||||||
|
IamDtos.RegistrationRequest request = new IamDtos.RegistrationRequest(
|
||||||
|
ParticipantType.PRIVATE, "Test", "Benutzer", null, "test@example.com", "password123"
|
||||||
|
);
|
||||||
|
|
||||||
|
when(userRepository.findByEmail("test@example.com")).thenReturn(Optional.empty());
|
||||||
|
when(userMapper.mapToEntity(any(), any())).thenReturn(testUser);
|
||||||
|
when(userRepository.save(any())).thenReturn(testUser);
|
||||||
|
|
||||||
|
authService.register(request);
|
||||||
|
|
||||||
|
verify(userRepository).save(any());
|
||||||
|
verify(mailService).sendVerificationEmail(eq("test@example.com"), anyString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void register_duplicateEmail_throws() {
|
||||||
|
IamDtos.RegistrationRequest request = new IamDtos.RegistrationRequest(
|
||||||
|
ParticipantType.PRIVATE, "Test", "Benutzer", null, "test@example.com", "password123"
|
||||||
|
);
|
||||||
|
|
||||||
|
when(userRepository.findByEmail("test@example.com")).thenReturn(Optional.of(testUser));
|
||||||
|
|
||||||
|
assertThrows(RuntimeException.class, () -> authService.register(request));
|
||||||
|
verify(userRepository, never()).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void register_companyWithoutName_throws() {
|
||||||
|
IamDtos.RegistrationRequest request = new IamDtos.RegistrationRequest(
|
||||||
|
ParticipantType.COMPANY, "Test", "Benutzer", null, "test@example.com", "password123"
|
||||||
|
);
|
||||||
|
|
||||||
|
when(userRepository.findByEmail("test@example.com")).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> authService.register(request));
|
||||||
|
verify(userRepository, never()).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void login_success() {
|
||||||
|
IamDtos.LoginRequest request = new IamDtos.LoginRequest("test@example.com", "password123");
|
||||||
|
|
||||||
|
Authentication auth = mock(Authentication.class);
|
||||||
|
when(auth.getName()).thenReturn("test@example.com");
|
||||||
|
doReturn(List.of(new SimpleGrantedAuthority("ROLE_MEMBER"))).when(auth).getAuthorities();
|
||||||
|
when(authenticationManager.authenticate(any(UsernamePasswordAuthenticationToken.class))).thenReturn(auth);
|
||||||
|
when(userRepository.findByEmail("test@example.com")).thenReturn(Optional.of(testUser));
|
||||||
|
when(jwtEncoder.encode(any(JwtEncoderParameters.class))).thenReturn(
|
||||||
|
org.springframework.security.oauth2.jwt.Jwt.withTokenValue("fake-token")
|
||||||
|
.header("alg", "HS256")
|
||||||
|
.claim("sub", "test@example.com")
|
||||||
|
.claim("role", "MEMBER")
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
|
IamDtos.AuthResponse response = authService.login(request);
|
||||||
|
|
||||||
|
assertNotNull(response);
|
||||||
|
assertEquals("fake-token", response.token());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void login_userNotFound_throws() {
|
||||||
|
IamDtos.LoginRequest request = new IamDtos.LoginRequest("unknown@example.com", "password123");
|
||||||
|
|
||||||
|
Authentication auth = mock(Authentication.class);
|
||||||
|
when(authenticationManager.authenticate(any(UsernamePasswordAuthenticationToken.class))).thenReturn(auth);
|
||||||
|
when(userRepository.findByEmail("unknown@example.com")).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
assertThrows(IllegalStateException.class, () -> authService.login(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void verifyEmail_success() {
|
||||||
|
String token = "valid-token";
|
||||||
|
testUser.setVerificationToken(token);
|
||||||
|
when(userRepository.findByVerificationToken(token)).thenReturn(Optional.of(testUser));
|
||||||
|
|
||||||
|
authService.verifyEmail(token);
|
||||||
|
|
||||||
|
assertTrue(testUser.isEmailVerified());
|
||||||
|
assertNull(testUser.getVerificationToken());
|
||||||
|
verify(userRepository).save(testUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void verifyEmail_invalidToken_throws() {
|
||||||
|
when(userRepository.findByVerificationToken("invalid-token")).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
assertThrows(IllegalArgumentException.class, () -> authService.verifyEmail("invalid-token"));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user