From fe59c881cd75d69fd1d25f24e135770c2d9c6b91 Mon Sep 17 00:00:00 2001 From: jinho jeong Date: Sun, 10 Jul 2022 14:32:35 +0900 Subject: [PATCH] signup test code --- .../oneul/domain/user/domain/UserEntity.java | 10 +++ .../domain/user/service/UserServiceImpl.java | 15 ++-- .../oneul/service/UserServiceTest.java | 80 +++++++++++++------ 3 files changed, 73 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/example/oneul/domain/user/domain/UserEntity.java b/src/main/java/com/example/oneul/domain/user/domain/UserEntity.java index 7ed98f1..e913670 100644 --- a/src/main/java/com/example/oneul/domain/user/domain/UserEntity.java +++ b/src/main/java/com/example/oneul/domain/user/domain/UserEntity.java @@ -11,6 +11,9 @@ import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.CreationTimestamp; +import org.springframework.security.crypto.password.PasswordEncoder; + +import com.example.oneul.domain.user.exception.WrongUsernameAndPasswordException; @Entity @Table(name = "user") @@ -26,6 +29,13 @@ public class UserEntity implements Serializable { @Column(name = "createAt", nullable = false, updatable = false) private LocalDateTime createdAt; + public boolean matchPassword(String password, PasswordEncoder passwordEncoder){ + if(!passwordEncoder.matches(password, getPassword())){ + throw new WrongUsernameAndPasswordException("wrong password"); + } + return true; + } + public Long getId(){ return this.id; } diff --git a/src/main/java/com/example/oneul/domain/user/service/UserServiceImpl.java b/src/main/java/com/example/oneul/domain/user/service/UserServiceImpl.java index 525a485..0f44fac 100644 --- a/src/main/java/com/example/oneul/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/example/oneul/domain/user/service/UserServiceImpl.java @@ -31,11 +31,12 @@ public class UserServiceImpl implements UserService { throw new UserAlreadyExistException(userEntity.getUsername() + " is already exists"); } - UserEntity user = UserEntity.builder().username(userEntity.getUsername()) - .password( - passwordEncoder.encode(userEntity.getPassword())) - .build(); - userRepository.save(user); + UserEntity user = userRepository.save( + UserEntity.builder().username(userEntity.getUsername()) + .password( + passwordEncoder.encode(userEntity.getPassword())) + .build()); + log.info(user.getPassword()); log.info("user is created: " + user.toString()); return user; } @@ -45,9 +46,7 @@ public class UserServiceImpl implements UserService { UserEntity user = userRepository.findByUsername(userEntity.getUsername()) .orElseThrow(() -> new WrongUsernameAndPasswordException("wrong username")); - if(!passwordEncoder.matches(userEntity.getPassword(), user.getPassword())){ - throw new WrongUsernameAndPasswordException("wrong passowrd"); - } + user.matchPassword(userEntity.getPassword(), passwordEncoder); log.info("login user: " + userEntity.toString()); httpSession.setAttribute("user",user); diff --git a/src/test/java/com/example/oneul/service/UserServiceTest.java b/src/test/java/com/example/oneul/service/UserServiceTest.java index 4c5d4bb..00e653f 100644 --- a/src/test/java/com/example/oneul/service/UserServiceTest.java +++ b/src/test/java/com/example/oneul/service/UserServiceTest.java @@ -1,45 +1,77 @@ package com.example.oneul.service; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; -import com.example.oneul.domain.user.domain.UserEntity; -import com.example.oneul.domain.user.dto.LoginDTO; -import com.example.oneul.domain.user.service.UserService; +import java.util.Optional; +import org.junit.Before; import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.mock.web.MockHttpSession; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.test.context.ActiveProfiles; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.junit.jupiter.Testcontainers; +import org.springframework.test.util.ReflectionTestUtils; +import com.example.oneul.domain.user.dao.UserRepository; +import com.example.oneul.domain.user.domain.UserEntity; +import com.example.oneul.domain.user.dto.LoginDTO; +import com.example.oneul.domain.user.service.UserServiceImpl; -@Testcontainers -@SpringBootTest @ActiveProfiles("test") +@ExtendWith(MockitoExtension.class) public class UserServiceTest { - @Autowired - private UserService userCommandService; - @Autowired + // private UserService userService; + @InjectMocks + private UserServiceImpl userService; + @Mock + private UserRepository userRepository; + @Mock private PasswordEncoder passwordEncoder; + protected MockHttpSession httpSession; - static { - GenericContainer redis = new GenericContainer("redis:3-alpine") - .withExposedPorts(6379); - redis.start(); + // static { + // GenericContainer redis = new GenericContainer("redis:3-alpine") + // .withExposedPorts(6379); + // redis.start(); - System.setProperty("spring.redis.host", redis.getContainerIpAddress()); - System.setProperty("spring.redis.port", redis.getFirstMappedPort() + ""); - } + // System.setProperty("spring.redis.host", redis.getContainerIpAddress()); + // System.setProperty("spring.redis.port", redis.getFirstMappedPort() + ""); + // } + @Before + public void setUp() { + userService = new UserServiceImpl(userRepository, passwordEncoder); + } + @Test - public void signUpTest(){ - LoginDTO loginDTO = new LoginDTO("zzzinho", "password"); - UserEntity user = userCommandService.signUp(loginDTO.toEntity()); - assertEquals(loginDTO.getUsername(), user.getUsername()); - assertEquals(true, passwordEncoder.matches(loginDTO.getPassword(), user.getPassword())); + public void signUpTest() throws Exception { + // given + LoginDTO loginDTO = createLoginDTO(); + UserEntity userEntity = loginDTO.toEntity(); + + Long mockUserId = 1L; + ReflectionTestUtils.setField(userEntity, "id", mockUserId); + + // mocking + given(userRepository.findByUsername(userEntity.getUsername())).willReturn(Optional.empty()); + given(userRepository.save(any())).willReturn(userEntity); + given(userRepository.findById(mockUserId)).willReturn(Optional.ofNullable(userEntity)); + + // when + UserEntity user = userService.signUp(userEntity); + + // then + UserEntity userFoundById = userRepository.findById(1L).get(); + assertEquals(user.getUsername(),userFoundById.getUsername()); + } + + private LoginDTO createLoginDTO() { + return new LoginDTO("zzzinho", "password"); } }