From 90dd93838e9f372f8231e728b92cd99282ccc011 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Tue, 1 Nov 2022 00:13:34 +0900 Subject: [PATCH] =?UTF-8?q?#24=20simple=20sns:=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/sns/exception/ErrorCode.java | 3 ++- .../com/example/sns/exception/GlobalControllerAdvice.java | 8 ++++++++ .../main/java/com/example/sns/service/UserService.java | 4 +++- .../java/com/example/sns/service/UserServiceTest.java | 6 ++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/simple_sns/src/main/java/com/example/sns/exception/ErrorCode.java b/simple_sns/src/main/java/com/example/sns/exception/ErrorCode.java index ddb28a4d..bbaa0a0b 100644 --- a/simple_sns/src/main/java/com/example/sns/exception/ErrorCode.java +++ b/simple_sns/src/main/java/com/example/sns/exception/ErrorCode.java @@ -8,7 +8,8 @@ import org.springframework.http.HttpStatus; @AllArgsConstructor public enum ErrorCode { - DUPLICATED_USER_NAME(HttpStatus.CONFLICT, "Username is duplicated.") + DUPLICATED_USER_NAME(HttpStatus.CONFLICT, "Username is duplicated."), + INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "Internal server error.") ; diff --git a/simple_sns/src/main/java/com/example/sns/exception/GlobalControllerAdvice.java b/simple_sns/src/main/java/com/example/sns/exception/GlobalControllerAdvice.java index 53b18148..46581b67 100644 --- a/simple_sns/src/main/java/com/example/sns/exception/GlobalControllerAdvice.java +++ b/simple_sns/src/main/java/com/example/sns/exception/GlobalControllerAdvice.java @@ -2,6 +2,7 @@ package com.example.sns.exception; import com.example.sns.controller.response.Response; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -16,4 +17,11 @@ public class GlobalControllerAdvice { return ResponseEntity.status(e.getErrorCode().getStatus()) .body(Response.error(e.getErrorCode().name())); } + + @ExceptionHandler(RuntimeException.class) + public ResponseEntity applicationHandler(RuntimeException e) { + log.info("Error occurs {}", e.toString()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Response.error(ErrorCode.INTERNAL_SERVER_ERROR.name())); + } } diff --git a/simple_sns/src/main/java/com/example/sns/service/UserService.java b/simple_sns/src/main/java/com/example/sns/service/UserService.java index 65fd14d0..a8a019cf 100644 --- a/simple_sns/src/main/java/com/example/sns/service/UserService.java +++ b/simple_sns/src/main/java/com/example/sns/service/UserService.java @@ -8,6 +8,7 @@ import com.example.sns.repository.UserEntityRepository; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -16,11 +17,12 @@ public class UserService { private final UserEntityRepository userEntityRepository; private final BCryptPasswordEncoder encoder; + @Transactional public User join(String username, String password){ // username 확인 userEntityRepository.findByUsername(username).ifPresent(it -> { - throw new SnsApplicationException(ErrorCode.DUPLICATED_USER_NAME, String.format("$s is duplicated", username)); + throw new SnsApplicationException(ErrorCode.DUPLICATED_USER_NAME, String.format("%s is duplicated", username)); }); // 회원가입 진행 diff --git a/simple_sns/src/test/java/com/example/sns/service/UserServiceTest.java b/simple_sns/src/test/java/com/example/sns/service/UserServiceTest.java index a989cac4..a271b8b8 100644 --- a/simple_sns/src/test/java/com/example/sns/service/UserServiceTest.java +++ b/simple_sns/src/test/java/com/example/sns/service/UserServiceTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import java.util.Optional; @@ -25,12 +26,16 @@ class UserServiceTest { @MockBean private UserEntityRepository userEntityRepository; + @MockBean + private BCryptPasswordEncoder encoder; + @Test void 회원가입이_정상적으로_동작하는_경우() { String username = "username"; String password = "password"; when(userEntityRepository.findByUsername(username)).thenReturn(Optional.empty()); + when(encoder.encode(password)).thenReturn("encrypt_password"); when(userEntityRepository.save(any())).thenReturn(Optional.of(UserEntityFixture.get(username, password))); assertDoesNotThrow(() -> userService.join(username, password)); @@ -44,6 +49,7 @@ class UserServiceTest { UserEntity fixture = UserEntityFixture.get(username, password); when(userEntityRepository.findByUsername(username)).thenReturn(Optional.of(fixture)); + when(encoder.encode(password)).thenReturn("encrypt_password"); when(userEntityRepository.save(any())).thenReturn(Optional.of(fixture)); assertThrows(