From 20b84b73a29dbd638b394bf7d583f2de2374183f Mon Sep 17 00:00:00 2001 From: rayankonecny Date: Sat, 13 Dec 2025 02:36:31 +0000 Subject: [PATCH] add test to save user servie --- user-service-api/build.gradle | 32 ------------------- .../wrapper/plugins/dependencies.gradle | 8 +++++ .../userserviceapi/creator/CreatorUtils.java | 15 +++++++++ .../service/UserServiceTest.java | 32 +++++++++++++++---- 4 files changed, 49 insertions(+), 38 deletions(-) create mode 100644 user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/creator/CreatorUtils.java diff --git a/user-service-api/build.gradle b/user-service-api/build.gradle index 0b675f3..6f30c1b 100644 --- a/user-service-api/build.gradle +++ b/user-service-api/build.gradle @@ -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') { useJUnitPlatform() } diff --git a/user-service-api/gradle/wrapper/plugins/dependencies.gradle b/user-service-api/gradle/wrapper/plugins/dependencies.gradle index 52b15fc..3844cbc 100644 --- a/user-service-api/gradle/wrapper/plugins/dependencies.gradle +++ b/user-service-api/gradle/wrapper/plugins/dependencies.gradle @@ -27,6 +27,10 @@ dependencies { compileOnly '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) implementation 'org.mapstruct:mapstruct:1.5.3.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final' @@ -40,6 +44,10 @@ dependencies { // Mockito for mocking in tests 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 { diff --git a/user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/creator/CreatorUtils.java b/user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/creator/CreatorUtils.java new file mode 100644 index 0000000..039e261 --- /dev/null +++ b/user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/creator/CreatorUtils.java @@ -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 generateMock(final Class classe) { + return factory.manufacturePojo(classe); + } +} diff --git a/user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/service/UserServiceTest.java b/user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/service/UserServiceTest.java index d15998b..a8ad260 100644 --- a/user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/service/UserServiceTest.java +++ b/user-service-api/src/test/java/br/com/rayankonecny/userserviceapi/service/UserServiceTest.java @@ -16,12 +16,13 @@ import br.com.rayankonecny.userserviceapi.entity.User; import br.com.rayankonecny.userserviceapi.mapper.UserMapper; import br.com.rayankonecny.userserviceapi.repository.UserRepository; import models.exceptions.ResourceNotFoundException; +import models.requests.CreateUserRequest; import models.responses.UserResponse; +import static br.com.rayankonecny.userserviceapi.creator.CreatorUtils.generateMock; import static org.mockito.Mockito.when; import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.times; @@ -43,15 +44,15 @@ public class UserServiceTest { @Test public void whenCallFindByIdWithValidIdTheReturnUserResponse() { 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"); Assertions.assertNotNull(response); assertEquals(UserResponse.class, response.getClass()); - verify(repository, times(1)).findById(anyString()); - verify(mapper, times(1)).fromEntity(any(User.class)); + verify(repository).findById(anyString()); + verify(mapper).fromEntity(any(User.class)); } @Test @@ -73,7 +74,7 @@ public class UserServiceTest { public void whenCallFindAllThenReturnListOfUserResponses() { // Implement test for findAll method 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(); @@ -85,4 +86,23 @@ public class UserServiceTest { 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()); + + } }