Skip to content

Commit

Permalink
[#54] refactor: UserQueryService 단위 테스트 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
kwj1270 committed Nov 19, 2021
1 parent db677e4 commit 201ffec
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.study.realworld.domain.user.api;

import com.study.realworld.domain.user.domain.vo.UserEmail;
import com.study.realworld.global.common.TokenProviderDto;
import com.study.realworld.global.common.AccessToken;
import com.study.realworld.domain.user.application.UserCommandService;
import com.study.realworld.domain.user.domain.persist.User;
import com.study.realworld.domain.user.dto.UserUpdate;
import com.study.realworld.domain.user.dto.UserJoin;
import com.study.realworld.domain.user.dto.UserUpdate;
import com.study.realworld.global.common.AccessToken;
import com.study.realworld.global.common.TokenProvider;
import com.study.realworld.global.common.TokenProviderDto;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.study.realworld.domain.user.api;

import static org.junit.jupiter.api.Assertions.*;

class UserCommandApiTest {

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.study.realworld.domain.user.error.exception.DuplicatedEmailException;
import com.study.realworld.domain.user.error.exception.IdentityNotFoundException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
Expand All @@ -23,6 +24,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.willReturn;

@DisplayName("유저 커멘드 서비스(UserCommandService)")
@ExtendWith(MockitoExtension.class)
class UserCommandServiceTest {

Expand Down Expand Up @@ -76,8 +78,6 @@ void setUp() {

@Test
void 식별자가_올바르지_않다면_엔티티의_값을_변경할_수_없다() {
final User user = testUser(USER_EMAIL, USER_NAME, USER_PASSWORD, USER_BIO, USER_IMAGE);
ReflectionTestUtils.setField(user, "userId", 1L);
willReturn(Optional.empty()).given(userRepository).findById(any());

final UserUpdate.Request request = UserUpdate.Request.of(CHANGED_USER_EMAIL, CHANGED_USER_BIO, CHANGED_USER_IMAGE);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.study.realworld.domain.user.application;

import com.study.realworld.domain.user.domain.persist.User;
import com.study.realworld.domain.user.domain.persist.UserRepository;
import com.study.realworld.domain.user.error.exception.EmailNotFoundException;
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.util.Optional;

import static com.study.realworld.domain.user.domain.persist.UserTest.testUser;
import static com.study.realworld.domain.user.domain.vo.util.UserVOFixture.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.willReturn;

@DisplayName("유저 쿼리 서비스(UserQueryService)")
@ExtendWith({MockitoExtension.class})
class UserQueryServiceTest {

@Mock
private UserRepository userRepository;

@InjectMocks
private UserQueryService userQueryService;

@Test
void 이메일로_유저를_찾는다() {
final User entity = testUser(USER_EMAIL, USER_NAME, USER_PASSWORD, USER_BIO, USER_IMAGE);
willReturn(Optional.of(entity)).given(userRepository).findByUserEmail(any());

final User user = userQueryService.findByMemberEmail(entity.userEmail());
assertThat(user).isEqualTo(entity);
}

@Test
void 부적절한_이메일로는_유저를_찾을_수_없다() {
willReturn(Optional.empty()).given(userRepository).findByUserEmail(any());

assertThatThrownBy(() -> userQueryService.findByMemberEmail(INVALID_USER_EMAIL))
.isExactlyInstanceOf(EmailNotFoundException.class)
.hasMessage(String.format("이메일 : [ %s ] 를 찾을 수 없습니다.", INVALID_USER_EMAIL.value()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
import com.study.realworld.domain.user.domain.vo.*;

public class UserVOFixture {

public static final UserEmail USER_EMAIL = UserEmail.from("userEmail@email.com");
public static final UserName USER_NAME = UserName.from("userName");
public static final UserPassword USER_PASSWORD = UserPassword.encode("userPassword", TestPasswordEncoder.initialize());
public static final UserBio USER_BIO = UserBio.from("userBio");
public static final UserImage USER_IMAGE = UserImage.from("userImage");

public static final UserEmail CHANGED_USER_EMAIL = UserEmail.from("changeEmail@email.com");
public static final UserName CHANGED_USER_NAME = UserName.from("changeUserName");
public static final UserPassword CHANGED_USER_PASSWORD = UserPassword.encode("changedUserPassword", TestPasswordEncoder.initialize());
public static final UserBio CHANGED_USER_BIO = UserBio.from("changedUserBio");
public static final UserImage CHANGED_USER_IMAGE = UserImage.from("changedUserImage");

public static final UserEmail INVALID_USER_EMAIL = UserEmail.from("invalidEmail@email.com");
}

0 comments on commit 201ffec

Please sign in to comment.