From 3ff18e937e47ba904b8863da1bf74dffcec85d30 Mon Sep 17 00:00:00 2001 From: jsy3831 Date: Sun, 29 Aug 2021 01:21:29 +0900 Subject: [PATCH] =?UTF-8?q?#2=20=EC=BD=94=EB=93=9C=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=EB=B0=98=EC=98=81=20/=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20aspect=20=EC=B6=94=EA=B0=80=20/=20controllerAdvice?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 12 ++-- settings.gradle | 2 +- .../PhotobookApplication.java} | 6 +- .../com/photobook/annotation/LoginCheck.java | 9 +++ .../com/photobook/aop/AuthCheckAspect.java | 37 ++++++++++ .../config/MyBatisConfig.java | 4 +- .../config/RedisConfig.java | 20 +++--- .../photobook/exception/ExceptionAdvice.java | 31 ++++++++ .../exception/UnauthorizedException.java | 8 +++ .../user/controller/UserController.java | 46 ++++++++++++ .../user/dto/UserDto.java | 6 +- .../com/photobook/user/mapper/UserMapper.java | 14 ++++ .../photobook/user/service/LoginService.java | 15 ++++ .../photobook/user/service/UserService.java | 11 +++ .../user/service/impl/LoginServiceImpl.java | 28 ++++++++ .../user/service/impl/UserServiceImpl.java | 34 +++++++++ .../user/controller/UserController.java | 40 ----------- .../sns/untitled/user/mapper/UserMapper.java | 14 ---- .../untitled/user/service/UserService.java | 11 --- .../user/service/impl/UserServiceImpl.java | 26 ------- src/main/resources/application.properties | 6 +- src/main/resources/mapper/UserMapper.xml | 12 ++-- .../PhotobookApplicationTests.java} | 4 +- .../service/impl/UserServiceImplTest.java | 72 +++++++++++++++++++ .../service/impl/UserServiceImplTest.java | 50 ------------- 25 files changed, 342 insertions(+), 176 deletions(-) rename src/main/java/com/{sns/untitled/UntitledApplication.java => photobook/PhotobookApplication.java} (61%) create mode 100644 src/main/java/com/photobook/annotation/LoginCheck.java create mode 100644 src/main/java/com/photobook/aop/AuthCheckAspect.java rename src/main/java/com/{sns/untitled => photobook}/config/MyBatisConfig.java (92%) rename src/main/java/com/{sns/untitled => photobook}/config/RedisConfig.java (70%) create mode 100644 src/main/java/com/photobook/exception/ExceptionAdvice.java create mode 100644 src/main/java/com/photobook/exception/UnauthorizedException.java create mode 100644 src/main/java/com/photobook/user/controller/UserController.java rename src/main/java/com/{sns/untitled => photobook}/user/dto/UserDto.java (76%) create mode 100644 src/main/java/com/photobook/user/mapper/UserMapper.java create mode 100644 src/main/java/com/photobook/user/service/LoginService.java create mode 100644 src/main/java/com/photobook/user/service/UserService.java create mode 100644 src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java create mode 100644 src/main/java/com/photobook/user/service/impl/UserServiceImpl.java delete mode 100644 src/main/java/com/sns/untitled/user/controller/UserController.java delete mode 100644 src/main/java/com/sns/untitled/user/mapper/UserMapper.java delete mode 100644 src/main/java/com/sns/untitled/user/service/UserService.java delete mode 100644 src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java rename src/test/java/com/{sns/untitled/UntitledApplicationTests.java => photobook/PhotobookApplicationTests.java} (73%) create mode 100644 src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java delete mode 100644 src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java diff --git a/build.gradle b/build.gradle index ccb22b5..ef5258b 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'java' } -group = 'com.sns' +group = 'com' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' @@ -20,13 +20,15 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' - implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' - implementation 'junit:junit:4.13.1' - implementation 'org.springframework.boot:spring-boot-starter-data-redis' - implementation 'org.springframework.session:spring-session-data-redis' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-aop' +// implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' +// implementation 'junit:junit:4.13.1' +// implementation 'org.springframework.boot:spring-boot-starter-data-redis' +// implementation 'org.springframework.session:spring-session-data-redis' compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' diff --git a/settings.gradle b/settings.gradle index 2572cb1..9533abb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -rootProject.name = 'untitled' +rootProject.name = 'photobook' diff --git a/src/main/java/com/sns/untitled/UntitledApplication.java b/src/main/java/com/photobook/PhotobookApplication.java similarity index 61% rename from src/main/java/com/sns/untitled/UntitledApplication.java rename to src/main/java/com/photobook/PhotobookApplication.java index 6e138d7..012ee43 100644 --- a/src/main/java/com/sns/untitled/UntitledApplication.java +++ b/src/main/java/com/photobook/PhotobookApplication.java @@ -1,13 +1,13 @@ -package com.sns.untitled; +package com.photobook; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class UntitledApplication { +public class PhotobookApplication { public static void main(String[] args) { - SpringApplication.run(UntitledApplication.class, args); + SpringApplication.run(PhotobookApplication.class, args); } } diff --git a/src/main/java/com/photobook/annotation/LoginCheck.java b/src/main/java/com/photobook/annotation/LoginCheck.java new file mode 100644 index 0000000..f82e296 --- /dev/null +++ b/src/main/java/com/photobook/annotation/LoginCheck.java @@ -0,0 +1,9 @@ +package com.photobook.annotation; + +import java.lang.annotation.*; + +@Documented +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.CLASS) +public @interface LoginCheck { +} diff --git a/src/main/java/com/photobook/aop/AuthCheckAspect.java b/src/main/java/com/photobook/aop/AuthCheckAspect.java new file mode 100644 index 0000000..48b44f8 --- /dev/null +++ b/src/main/java/com/photobook/aop/AuthCheckAspect.java @@ -0,0 +1,37 @@ +package com.photobook.aop; + +import com.photobook.user.service.LoginService; +import com.photobook.exception.UnauthorizedException; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpSession; + +@Component +@Aspect +public class AuthCheckAspect { + + LoginService loginService; + + public AuthCheckAspect(LoginService loginService) { + this.loginService = loginService; + } + + @Before("@annotation(com.photobook.annotation.LoginCheck)") + public void loginCheck() { + + HttpSession httpSession = ((ServletRequestAttributes) RequestContextHolder + .currentRequestAttributes()) // RequestAttributes가 없으면 예외 발생 + .getRequest() + .getSession(); + + if (loginService.getLoginUserInfo(httpSession) == null) { + throw new UnauthorizedException("로그인된 사용자 정보가 존재하지 않습니다."); + } + + } + +} diff --git a/src/main/java/com/sns/untitled/config/MyBatisConfig.java b/src/main/java/com/photobook/config/MyBatisConfig.java similarity index 92% rename from src/main/java/com/sns/untitled/config/MyBatisConfig.java rename to src/main/java/com/photobook/config/MyBatisConfig.java index c816147..b08ddc9 100644 --- a/src/main/java/com/sns/untitled/config/MyBatisConfig.java +++ b/src/main/java/com/photobook/config/MyBatisConfig.java @@ -1,4 +1,4 @@ -package com.sns.untitled.config; +package com.photobook.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; @@ -11,7 +11,7 @@ import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.sns.untitled.*.mapper") +@MapperScan(basePackages = "com.photobook.*.mapper") public class MyBatisConfig { @Bean diff --git a/src/main/java/com/sns/untitled/config/RedisConfig.java b/src/main/java/com/photobook/config/RedisConfig.java similarity index 70% rename from src/main/java/com/sns/untitled/config/RedisConfig.java rename to src/main/java/com/photobook/config/RedisConfig.java index c88bef1..8915ee2 100644 --- a/src/main/java/com/sns/untitled/config/RedisConfig.java +++ b/src/main/java/com/photobook/config/RedisConfig.java @@ -1,12 +1,12 @@ -package com.sns.untitled.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; -import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; - +//package com.photobook.config; +// +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.data.redis.connection.RedisConnectionFactory; +//import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +//import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +//import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; +// //@Configuration //@EnableRedisHttpSession //public class RedisConfig extends AbstractHttpSessionApplicationInitializer { @@ -35,4 +35,4 @@ // return stringRedisTemplate; // } // -//} +//} \ No newline at end of file diff --git a/src/main/java/com/photobook/exception/ExceptionAdvice.java b/src/main/java/com/photobook/exception/ExceptionAdvice.java new file mode 100644 index 0000000..1262f54 --- /dev/null +++ b/src/main/java/com/photobook/exception/ExceptionAdvice.java @@ -0,0 +1,31 @@ +package com.photobook.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.validation.ConstraintViolationException; + +@RestControllerAdvice +public class ExceptionAdvice { + + @ExceptionHandler(IllegalArgumentException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public String illegalArgumentException(IllegalArgumentException e) { + return e.getMessage(); + } + + @ExceptionHandler(ConstraintViolationException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public String constraintViolationException(ConstraintViolationException e) { + return e.getMessage(); + } + + @ExceptionHandler(UnauthorizedException.class) + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public String unauthorizedException(UnauthorizedException e) { + return e.getMessage(); + } + +} diff --git a/src/main/java/com/photobook/exception/UnauthorizedException.java b/src/main/java/com/photobook/exception/UnauthorizedException.java new file mode 100644 index 0000000..5ffc24a --- /dev/null +++ b/src/main/java/com/photobook/exception/UnauthorizedException.java @@ -0,0 +1,8 @@ +package com.photobook.exception; + +public class UnauthorizedException extends RuntimeException { + + public UnauthorizedException(String message) { + super(message); + } +} diff --git a/src/main/java/com/photobook/user/controller/UserController.java b/src/main/java/com/photobook/user/controller/UserController.java new file mode 100644 index 0000000..61d569e --- /dev/null +++ b/src/main/java/com/photobook/user/controller/UserController.java @@ -0,0 +1,46 @@ +package com.photobook.user.controller; + +import com.photobook.annotation.LoginCheck; +import com.photobook.user.dto.UserDto; +import com.photobook.user.service.LoginService; +import com.photobook.user.service.UserService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpSession; +import javax.validation.constraints.NotBlank; + +@RestController +@RequestMapping("/users") +@Validated +public class UserController { + + private final UserService userService; + + private final LoginService loginService; + + public UserController(UserService userService, LoginService loginService) { + this.userService = userService; + this.loginService = loginService; + } + + @PostMapping("/login") + public void login(@RequestParam @NotBlank String id, @RequestParam @NotBlank String password, HttpSession httpSession) { + UserDto userInfo = userService.getUserInfoByIdAndPassword(id, password); + + loginService.setLoginUserInfo(httpSession, userInfo); + } + + @PostMapping("/logout") + @LoginCheck + public void logout(HttpSession httpSession) { + loginService.removeLoginUserInfo(httpSession); + } + + @GetMapping("/{id}") + @LoginCheck + public UserDto getUserInfoById(@PathVariable @NotBlank String id) { + UserDto userInfo = userService.getUserInfoById(id); + return userInfo; + } +} \ No newline at end of file diff --git a/src/main/java/com/sns/untitled/user/dto/UserDto.java b/src/main/java/com/photobook/user/dto/UserDto.java similarity index 76% rename from src/main/java/com/sns/untitled/user/dto/UserDto.java rename to src/main/java/com/photobook/user/dto/UserDto.java index 74bba37..80b99df 100644 --- a/src/main/java/com/sns/untitled/user/dto/UserDto.java +++ b/src/main/java/com/photobook/user/dto/UserDto.java @@ -1,9 +1,9 @@ -package com.sns.untitled.user.dto; +package com.photobook.user.dto; import lombok.Getter; import lombok.Setter; -import java.time.LocalDateTime; +import java.time.LocalDate; @Getter @Setter @@ -19,7 +19,7 @@ public class UserDto { private String email; - private LocalDateTime birth; + private LocalDate birth; private String profileImageName; diff --git a/src/main/java/com/photobook/user/mapper/UserMapper.java b/src/main/java/com/photobook/user/mapper/UserMapper.java new file mode 100644 index 0000000..4007e8c --- /dev/null +++ b/src/main/java/com/photobook/user/mapper/UserMapper.java @@ -0,0 +1,14 @@ +package com.photobook.user.mapper; + +import com.photobook.user.dto.UserDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface UserMapper { + + UserDto getUserInfoByIdAndPassword(@Param("id") String id, @Param("password") String password); + + UserDto getUserInfoById(@Param("id") String id); + +} diff --git a/src/main/java/com/photobook/user/service/LoginService.java b/src/main/java/com/photobook/user/service/LoginService.java new file mode 100644 index 0000000..d91e788 --- /dev/null +++ b/src/main/java/com/photobook/user/service/LoginService.java @@ -0,0 +1,15 @@ +package com.photobook.user.service; + +import com.photobook.user.dto.UserDto; + +import javax.servlet.http.HttpSession; + +public interface LoginService { + + void setLoginUserInfo(HttpSession httpSession, UserDto userDto); + + void removeLoginUserInfo(HttpSession httpSession); + + Object getLoginUserInfo(HttpSession httpSession); + +} diff --git a/src/main/java/com/photobook/user/service/UserService.java b/src/main/java/com/photobook/user/service/UserService.java new file mode 100644 index 0000000..d25c111 --- /dev/null +++ b/src/main/java/com/photobook/user/service/UserService.java @@ -0,0 +1,11 @@ +package com.photobook.user.service; + +import com.photobook.user.dto.UserDto; + +public interface UserService { + + UserDto getUserInfoByIdAndPassword(String id, String password); + + UserDto getUserInfoById(String id); + +} diff --git a/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java b/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..0b008e3 --- /dev/null +++ b/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java @@ -0,0 +1,28 @@ +package com.photobook.user.service.impl; + +import com.photobook.user.dto.UserDto; +import com.photobook.user.service.LoginService; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; + +@Service +public class LoginServiceImpl implements LoginService { + + private static final String LOGIN_USER_INFO = "LOGIN_USER_INFO"; + + @Override + public void setLoginUserInfo(HttpSession httpSession, UserDto userDto) { + httpSession.setAttribute(LOGIN_USER_INFO, userDto); + } + + @Override + public void removeLoginUserInfo(HttpSession httpSession) { + httpSession.invalidate(); + } + + @Override + public Object getLoginUserInfo(HttpSession httpSession) { + return httpSession.getAttribute(LOGIN_USER_INFO); + } +} diff --git a/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java b/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..8d19b1f --- /dev/null +++ b/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java @@ -0,0 +1,34 @@ +package com.photobook.user.service.impl; + +import com.photobook.user.mapper.UserMapper; +import com.photobook.user.dto.UserDto; +import com.photobook.user.service.UserService; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + + private final UserMapper userMapper; + + public UserServiceImpl(UserMapper userMapper) { + this.userMapper = userMapper; + } + + @Override + public UserDto getUserInfoByIdAndPassword(String id, String password) { + + UserDto userInfo = userMapper.getUserInfoByIdAndPassword(id, password); + + if(userInfo == null) { + throw new IllegalArgumentException("아이디 또는 비밀번호가 잘못 입력 되었습니다."); + } + + return userInfo; + } + + @Override + public UserDto getUserInfoById(String id) { + UserDto userInfo = userMapper.getUserInfoById(id); + return userInfo; + } +} diff --git a/src/main/java/com/sns/untitled/user/controller/UserController.java b/src/main/java/com/sns/untitled/user/controller/UserController.java deleted file mode 100644 index c84627d..0000000 --- a/src/main/java/com/sns/untitled/user/controller/UserController.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.sns.untitled.user.controller; - -import com.sns.untitled.user.dto.UserDto; -import com.sns.untitled.user.service.UserService; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpSession; - -@RestController -@RequestMapping("/user") -@RequiredArgsConstructor -public class UserController { - - private final UserService userService; - - @PostMapping("/login") - public String login(@RequestParam String id, @RequestParam String password, HttpSession httpSession) { - UserDto userInfo = userService.login(id, password); - - if(userInfo != null) { -// httpSession.setAttribute("userInfo", userInfo); - httpSession.setAttribute("name", "seyoung"); - } else { - - } - return httpSession.getId(); - } - - @PostMapping("/logout") - public void logout(HttpSession httpSession) { - httpSession.invalidate(); - } - - @GetMapping("/{id}") - public UserDto getUserInfo(@PathVariable String id) { - UserDto userInfo = userService.getUserInfo(id); - return userInfo; - } -} \ No newline at end of file diff --git a/src/main/java/com/sns/untitled/user/mapper/UserMapper.java b/src/main/java/com/sns/untitled/user/mapper/UserMapper.java deleted file mode 100644 index e17f63a..0000000 --- a/src/main/java/com/sns/untitled/user/mapper/UserMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.sns.untitled.user.mapper; - -import com.sns.untitled.user.dto.UserDto; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -@Mapper -public interface UserMapper { - - UserDto findUserByIdAndPassword(@Param("id") String id, @Param("password") String password); - - UserDto findUserById(@Param("id") String id); - -} diff --git a/src/main/java/com/sns/untitled/user/service/UserService.java b/src/main/java/com/sns/untitled/user/service/UserService.java deleted file mode 100644 index 0d6f8e5..0000000 --- a/src/main/java/com/sns/untitled/user/service/UserService.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.sns.untitled.user.service; - -import com.sns.untitled.user.dto.UserDto; - -public interface UserService { - - UserDto login(String id, String password); - - UserDto getUserInfo(String id); - -} diff --git a/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java b/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java deleted file mode 100644 index 6b0cbe6..0000000 --- a/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.sns.untitled.user.service.impl; - -import com.sns.untitled.user.mapper.UserMapper; -import com.sns.untitled.user.dto.UserDto; -import com.sns.untitled.user.service.UserService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class UserServiceImpl implements UserService { - - private final UserMapper userMapper; - - @Override - public UserDto login(String id, String password) { - UserDto userInfo = userMapper.findUserByIdAndPassword(id, password); - return userInfo; - } - - @Override - public UserDto getUserInfo(String id) { - UserDto userInfo = userMapper.findUserById(id); - return userInfo; - } -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 68e79c4..ed3e529 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,7 +3,7 @@ spring.datasource.username=root spring.datasource.password=nzpen030# spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy -spring.session.store-type=redis -spring.redis.host=localhost -spring.redis.port=6379 +#spring.session.store-type=redis +#spring.redis.host=localhost +#spring.redis.port=6379 diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 92db849..7fe874b 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -1,9 +1,9 @@ - + - + @@ -15,15 +15,15 @@ - + SELECT user_id, id, password, name, email, birth, profile_image_name, profile_image_path, profile_message FROM user WHERE id = #{id} AND password = #{password} - + SELECT user_id, id, password, name, email, birth, profile_image_name, profile_image_path, profile_message FROM user WHERE id = #{id} diff --git a/src/test/java/com/sns/untitled/UntitledApplicationTests.java b/src/test/java/com/photobook/PhotobookApplicationTests.java similarity index 73% rename from src/test/java/com/sns/untitled/UntitledApplicationTests.java rename to src/test/java/com/photobook/PhotobookApplicationTests.java index ec039a5..710a826 100644 --- a/src/test/java/com/sns/untitled/UntitledApplicationTests.java +++ b/src/test/java/com/photobook/PhotobookApplicationTests.java @@ -1,10 +1,10 @@ -package com.sns.untitled; +package com.photobook; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class UntitledApplicationTests { +class PhotobookApplicationTests { @Test void contextLoads() { diff --git a/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java b/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java new file mode 100644 index 0000000..3a16538 --- /dev/null +++ b/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java @@ -0,0 +1,72 @@ +package com.photobook.user.service.impl; + +import com.photobook.user.mapper.UserMapper; +import com.photobook.user.dto.UserDto; +import org.junit.jupiter.api.DisplayName; +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 java.time.LocalDate; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class UserServiceImplTest { + + @InjectMocks + UserServiceImpl userServiceImpl; + + @Mock + UserMapper userMapper; + + public UserDto userInfo() { + UserDto userInfo = new UserDto(); + userInfo.setUserId(1); + userInfo.setId("admin"); + userInfo.setPassword("1234"); + userInfo.setName("관리자"); + userInfo.setEmail("admin@gmail.com"); + userInfo.setBirth(LocalDate.of(1993, 10, 28)); + userInfo.setProfileImageName("프로필사진1"); + userInfo.setProfileImagePath("이미지경로"); + userInfo.setProfileMessage("상태메세지"); + + return userInfo; + } + + @Test + @DisplayName("사용자 정보가 존재하면 성공") + public void successGetUserInfoByIdAndPassword() { + //given + UserDto userInfo = userInfo(); + when(userMapper.getUserInfoByIdAndPassword("admin", "1234")).thenReturn(userInfo); + + //when + UserDto result = userServiceImpl.getUserInfoByIdAndPassword("admin", "1234"); + + //then + assertEquals(result, userInfo); + } + + @Test + @DisplayName("사용자 정보가 존재하지 않으면 성공") + public void failureGetUserInfoByIdAndPassword() { + //given + when(userMapper.getUserInfoByIdAndPassword("notExistId", "notExistPassword")).thenReturn(null); + + //when + IllegalArgumentException exception = + assertThrows(IllegalArgumentException.class, () -> { + userServiceImpl.getUserInfoByIdAndPassword("notExistId", "notExistPassword"); + }); + + //then + assertEquals("아이디 또는 비밀번호가 잘못 입력 되었습니다.", exception.getMessage()); + + } +} \ No newline at end of file diff --git a/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java b/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java deleted file mode 100644 index a37e3e9..0000000 --- a/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.sns.untitled.user.service.impl; - -import com.sns.untitled.user.mapper.UserMapper; -import com.sns.untitled.user.dto.UserDto; -import org.junit.jupiter.api.DisplayName; -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 static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class UserServiceImplTest { - - @InjectMocks - UserServiceImpl userServiceImpl; - - @Mock - UserMapper userMapper; - - public UserDto userDto() { - UserDto user = new UserDto(); - user.setUserId(1); - user.setId("admin"); - user.setPassword("1234"); - user.setName("관리자"); - user.setEmail("admin@gmail.com"); - user.setProfileImageName("프로필사진1"); - user.setProfileImagePath("이미지경로"); - user.setProfileMessage("상태메세지"); - return user; - } - - @Test - @DisplayName("로그인 성공") - public void successLogin() throws Exception { - //given - UserDto userDto = userDto(); - when(userMapper.findUserByIdAndPassword("admin", "1234")).thenReturn(userDto); - - //when - UserDto result = userServiceImpl.login("admin", "1234"); - - //then - assertEquals(result, userDto); - } -} \ No newline at end of file