add test to save user servie

This commit is contained in:
rayankonecny 2025-12-13 02:36:31 +00:00
parent 6fbc769195
commit 20b84b73a2
4 changed files with 49 additions and 38 deletions

View file

@ -15,38 +15,6 @@ java {
} }
} }
// ext {
// springCloudVersion = "2023.0.3"
// }
// dependencies {
// implementation 'br.com.rayan:hd-commons-lib:1.0.0'
// implementation 'org.springframework.boot:spring-boot-starter'
// implementation 'org.springframework.boot:spring-boot-starter-web'
// implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
// implementation 'org.springframework.boot:spring-boot-starter-validation'
// // Swagger / OpenAPI (compatível com Spring Boot 3.3.x)
// implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
// compileOnly 'org.projectlombok:lombok'
// annotationProcessor 'org.projectlombok:lombok'
// implementation 'org.mapstruct:mapstruct:1.5.3.Final'
// annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
// testImplementation 'org.springframework.boot:spring-boot-starter-test'
// }
// dependencyManagement {
// imports {
// mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
// }
// }
tasks.named('test') { tasks.named('test') {
useJUnitPlatform() useJUnitPlatform()
} }

View file

@ -27,6 +27,10 @@ dependencies {
compileOnly 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
// Lombok para TESTES (ESSENCIAL)
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
// MapStruct for object mapping (at compile time) // MapStruct for object mapping (at compile time)
implementation 'org.mapstruct:mapstruct:1.5.3.Final' implementation 'org.mapstruct:mapstruct:1.5.3.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
@ -40,6 +44,10 @@ dependencies {
// Mockito for mocking in tests // Mockito for mocking in tests
testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'org.mockito:mockito-core:5.12.0'
// Podam for data mocking in tests
testImplementation 'uk.co.jemos.podam:podam:8.0.2.RELEASE'
} }
dependencyManagement { dependencyManagement {

View file

@ -0,0 +1,15 @@
package br.com.rayankonecny.userserviceapi.creator;
import lombok.experimental.UtilityClass;
import uk.co.jemos.podam.api.PodamFactory;
import uk.co.jemos.podam.api.PodamFactoryImpl;
@UtilityClass
public class CreatorUtils {
private static final PodamFactory factory = new PodamFactoryImpl();
public static <T> T generateMock(final Class<T> classe) {
return factory.manufacturePojo(classe);
}
}

View file

@ -16,12 +16,13 @@ import br.com.rayankonecny.userserviceapi.entity.User;
import br.com.rayankonecny.userserviceapi.mapper.UserMapper; import br.com.rayankonecny.userserviceapi.mapper.UserMapper;
import br.com.rayankonecny.userserviceapi.repository.UserRepository; import br.com.rayankonecny.userserviceapi.repository.UserRepository;
import models.exceptions.ResourceNotFoundException; import models.exceptions.ResourceNotFoundException;
import models.requests.CreateUserRequest;
import models.responses.UserResponse; import models.responses.UserResponse;
import static br.com.rayankonecny.userserviceapi.creator.CreatorUtils.generateMock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.mock; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
@ -43,15 +44,15 @@ public class UserServiceTest {
@Test @Test
public void whenCallFindByIdWithValidIdTheReturnUserResponse() { public void whenCallFindByIdWithValidIdTheReturnUserResponse() {
when(repository.findById(anyString())).thenReturn(Optional.of(new User())); when(repository.findById(anyString())).thenReturn(Optional.of(new User()));
when(mapper.fromEntity(any(User.class))).thenReturn(mock(UserResponse.class)); when(mapper.fromEntity(any(User.class))).thenReturn(generateMock(UserResponse.class));
final var response = service.findById("1"); final var response = service.findById("1");
Assertions.assertNotNull(response); Assertions.assertNotNull(response);
assertEquals(UserResponse.class, response.getClass()); assertEquals(UserResponse.class, response.getClass());
verify(repository, times(1)).findById(anyString()); verify(repository).findById(anyString());
verify(mapper, times(1)).fromEntity(any(User.class)); verify(mapper).fromEntity(any(User.class));
} }
@Test @Test
@ -73,7 +74,7 @@ public class UserServiceTest {
public void whenCallFindAllThenReturnListOfUserResponses() { public void whenCallFindAllThenReturnListOfUserResponses() {
// Implement test for findAll method // Implement test for findAll method
when(repository.findAll()).thenReturn(List.of(new User(), new User())); when(repository.findAll()).thenReturn(List.of(new User(), new User()));
when(mapper.fromEntity(any(User.class))).thenReturn(mock(UserResponse.class)); when(mapper.fromEntity(any(User.class))).thenReturn(generateMock(UserResponse.class));
final var responses = service.findAll(); final var responses = service.findAll();
@ -85,4 +86,23 @@ public class UserServiceTest {
verify(mapper, times(2)).fromEntity(any(User.class)); verify(mapper, times(2)).fromEntity(any(User.class));
} }
@Test
void whenCallSaveThenSucess() {
final var request = generateMock(CreateUserRequest.class);
when(mapper.fromRequest(any())).thenReturn(new User());
when(encoder.encode(anyString())).thenReturn("encoded");
when(repository.save(any(User.class))).thenReturn(new User());
when(repository.findByEmail(anyString())).thenReturn(Optional.empty());
service.save(request);
verify(mapper).fromRequest(request);
verify(encoder).encode(request.password());
verify(repository).save(any(User.class));
verify(repository).findByEmail(request.email());
}
} }