From 2b1ef2752765f60bbee97d1dc29c873a6fee81d2 Mon Sep 17 00:00:00 2001 From: reza ganji Date: Fri, 5 Apr 2024 13:06:23 +0330 Subject: [PATCH] BAEL-7540 --- .../exceptionhandeling/model/User.java | 4 +-- .../repository/UserRepository.java | 8 ++--- .../service/UserService.java | 23 ++++++------ .../UserControllerUnitTest.java | 36 ++++++++++++++++++- 4 files changed, 50 insertions(+), 21 deletions(-) diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/model/User.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/model/User.java index 42e1293ee8..6bc39da062 100644 --- a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/model/User.java +++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/model/User.java @@ -21,8 +21,8 @@ public class User { } public User(String userId, String userName) { - this.id=userId; - this.username=userName; + this.id = userId; + this.username = userName; } } diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/repository/UserRepository.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/repository/UserRepository.java index 7d4ac0af86..8c153aa2e6 100644 --- a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/repository/UserRepository.java +++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/repository/UserRepository.java @@ -5,9 +5,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.springframework.stereotype.Repository; -import com.baeldung.webflux.zipwhen.model.User; - -import reactor.core.publisher.Mono; +import com.baeldung.webflux.exceptionhandeling.model.User; @Repository public class UserRepository { @@ -18,7 +16,7 @@ public class UserRepository { userDatabase.put("2", new User("2", "Jane Smith")); } - public Mono findById(String id) { - return Mono.justOrEmpty(userDatabase.get(id)); + public User findById(String id) { + return userDatabase.get(id); } } diff --git a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/service/UserService.java b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/service/UserService.java index 98d503bb23..eafaf421b9 100644 --- a/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/service/UserService.java +++ b/spring-5-webflux-2/src/main/java/com/baeldung/webflux/exceptionhandeling/service/UserService.java @@ -1,9 +1,8 @@ -package com.baeldung.webflux.exceptionhandeling.controller; +package com.baeldung.webflux.exceptionhandeling.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; import com.baeldung.webflux.exceptionhandeling.ex.NotFoundException; import com.baeldung.webflux.exceptionhandeling.model.User; @@ -11,29 +10,27 @@ import com.baeldung.webflux.exceptionhandeling.repository.UserRepository; import reactor.core.publisher.Mono; -@RestController -public class UserController { +public class UserService { private final UserRepository userRepository; @Autowired - public UserController(MyRepository userRepository) { + public UserService(UserRepository userRepository) { this.userRepository = userRepository; } @GetMapping("/user/{id}") public Mono getUserByIdThrowingException(@PathVariable String id) { - User user= userRepository.findById(id); - if(user==null) - throw new NotFoundException("User Not Found"); - return Mono.justOrEmpty(user); + User user = userRepository.findById(id); + if (user == null) + throw new NotFoundException("User Not Found"); + return Mono.justOrEmpty(user); } @GetMapping("/user/{id}") public Mono getUserByIdUsingMonoError(@PathVariable String id) { - User user= userRepository.findById(id); - if(user==null) - return Mono.error(new NotFoundException("User Not Found")); - return Mono.justOrEmpty(user); + User user = userRepository.findById(id); + return (user != null) ? Mono.justOrEmpty(user) : Mono.error(new NotFoundException("User Not Found")); + } } diff --git a/spring-5-webflux-2/src/test/java/com/baeldung/webflux/exceptionhandeling/UserControllerUnitTest.java b/spring-5-webflux-2/src/test/java/com/baeldung/webflux/exceptionhandeling/UserControllerUnitTest.java index d81c553d41..e968cfeea3 100644 --- a/spring-5-webflux-2/src/test/java/com/baeldung/webflux/exceptionhandeling/UserControllerUnitTest.java +++ b/spring-5-webflux-2/src/test/java/com/baeldung/webflux/exceptionhandeling/UserControllerUnitTest.java @@ -1,2 +1,36 @@ -package com.baeldung.webflux.exceptionhandeling;public class UserControllerUnitTest { +package com.baeldung.webflux.exceptionhandeling; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.junit.jupiter.api.Test; + +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + +import com.baeldung.webflux.exceptionhandeling.ex.NotFoundException; +import com.baeldung.webflux.exceptionhandeling.model.User; +import com.baeldung.webflux.exceptionhandeling.service.UserService; +import com.baeldung.webflux.exceptionhandeling.repository.UserRepository; + +public class UserControllerUnitTest { + UserRepository repositoryMock = mock(UserRepository.class); + private final UserService userService = new UserService(repositoryMock); + + @Test + public void givenNonExistUser_whenFailureCall_then_Throws_exception() { + assertThrows(NotFoundException.class, () -> userService.getUserByIdThrowingException("3")); + + } + + @Test + public void givenNonExistUser_whenFailureCall_then_returnMonoError() { + Mono result = userService.getUserByIdUsingMonoError("3"); + StepVerifier.create(result) + .expectError(NotFoundException.class) + .verify(); + + } + }