Skip to content

Commit

Permalink
[#44] test: add update, update-exception in UserServiceTest
Browse files Browse the repository at this point in the history
update
update_validateExistUser_exception

some refactoring
  • Loading branch information
hoony-lab committed Sep 5, 2021
1 parent ab73728 commit 02f7f73
Showing 1 changed file with 72 additions and 33 deletions.
105 changes: 72 additions & 33 deletions src/test/java/com/study/realworld/user/service/UserServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.study.realworld.user.domain.UserRepository;
import com.study.realworld.user.dto.UserJoinRequest;
import com.study.realworld.user.dto.UserLoginRequest;
import org.junit.jupiter.api.Disabled;
import com.study.realworld.user.dto.UserUpdateRequest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
Expand Down Expand Up @@ -52,13 +52,13 @@ void findAll() {
.image(IMAGE)
.build();

// when
when(userRepository.findAll())
.thenReturn(List.of(user));

// when
// then
User result = userService.findAll().get(0);

// then
verify(userRepository).findAll();
assertAll(
() -> assertEquals(user.getEmail(), result.getEmail()),
Expand All @@ -80,13 +80,13 @@ void findById() {
.image(IMAGE)
.build();

// when
when(userRepository.findById(anyLong()))
.thenReturn(Optional.ofNullable(user));

// when
// then
User result = userService.findById(ID);

// then
verify(userRepository).findById(ID);
assertAll(
() -> assertEquals(user.getEmail(), result.getEmail()),
Expand All @@ -108,13 +108,13 @@ void findByEmail() {
.image(IMAGE)
.build();

// when
when(userRepository.findByEmail(anyString()))
.thenReturn(Optional.ofNullable(user));

// when
// then
User result = userService.findByEmail(user.getEmail());

// then
verify(userRepository).findByEmail(user.getEmail());
assertAll(
() -> assertEquals(user.getId(), result.getId()),
Expand Down Expand Up @@ -143,20 +143,45 @@ void save() {
.image(IMAGE)
.build();

// when
when(userRepository.save(any()))
.thenReturn(user);

// when
// then
User result = userService.save(request);

// then
verify(userRepository).save(user);
assertAll(
() -> assertEquals(request.getEmail(), result.getEmail()),
() -> assertEquals(request.getUsername(), result.getUsername())
);
}

@Test
void save_validateDuplicateUser_exception() {
// given
final UserJoinRequest request = UserJoinRequest.builder()
.email(EMAIL)
.username(USERNAME)
.password(PASSWORD)
.build();

final User user = User.builder()
.email(EMAIL)
.username(USERNAME)
.password(PASSWORD)
.bio(BIO)
.image(IMAGE)
.build();

// when
when(userRepository.findByEmail(anyString()))
.thenReturn(Optional.ofNullable(user));

// then
assertThrows(DuplicateKeyException.class, () -> userService.save(request));
}

@Test
void login() {
// given
Expand All @@ -173,39 +198,26 @@ void login() {
.image(IMAGE)
.build();

// when
when(userRepository.findByEmail(anyString()))
.thenReturn(Optional.ofNullable(user));

/**
* This exception may occur if matchers are combined with raw values:
* //incorrect:
* someMethod(anyObject(), "raw String");
* When using matchers, all arguments have to be provided by matchers.
* For example:
* //correct:
* someMethod(anyObject(), eq("String by matcher"));
*
* For more info see javadoc for Matchers class.
*/
when(passwordEncoder.matches(any(), any()))
.thenReturn(true);

// when
// then
User result = userService.login(request);

// then
assertAll(
() -> assertEquals(request.getEmail(), result.getEmail()),
() -> assertTrue(result.matchesPassword(request.getPassword(), passwordEncoder))
);
}

@Test
void save_validateDuplicateUser_exception() {
void login_validateMatchesPassword_exception() {
// given
final UserJoinRequest request = UserJoinRequest.builder()
final UserLoginRequest request = UserLoginRequest.builder()
.email(EMAIL)
.username(USERNAME)
.password(PASSWORD)
.build();

Expand All @@ -220,33 +232,60 @@ void save_validateDuplicateUser_exception() {
// when
when(userRepository.findByEmail(anyString()))
.thenReturn(Optional.ofNullable(user));

// then
assertThrows(DuplicateKeyException.class, () -> userService.save(request));
assertThrows(NoSuchElementException.class, () -> userService.login(request));
}

@Test
void login_validateMatchesPassword_exception() {
void update() {
// given
final UserLoginRequest request = UserLoginRequest.builder()
.email(EMAIL)
.password(PASSWORD)
UserUpdateRequest request = UserUpdateRequest.builder()
.email(EMAIL+EMAIL)
.password(PASSWORD+PASSWORD)
.bio(BIO+BIO)
.build();

final User user = User.builder()
User user = User.builder()
.email(EMAIL)
.username(USERNAME)
.password(PASSWORD)
.bio(BIO)
.image(IMAGE)
.build();

// when
when(userRepository.existsByEmail(anyString()))
.thenReturn(false);
when(userRepository.findByEmail(anyString()))
.thenReturn(Optional.ofNullable(user));

// then
User result = userService.update(request, EMAIL);

assertAll(
() -> assertEquals(request.getEmail(), result.getEmail()),
() -> assertEquals(user.getUsername(), result.getUsername()),
() -> assertEquals(request.getBio(), result.getBio()),
() -> assertEquals(user.getImage(), result.getImage())
);
}

@Test
void update_validateExistUser_exception() {
// given
UserUpdateRequest request = UserUpdateRequest.builder()
.email(EMAIL+EMAIL)
.password(PASSWORD+PASSWORD)
.bio(BIO+BIO)
.build();

// when
when(userRepository.existsByEmail(anyString()))
.thenReturn(true);

// then
assertThrows(NoSuchElementException.class, () -> userService.login(request));
assertThrows(DuplicateKeyException.class, () -> userService.update(request, EMAIL));
}

}

0 comments on commit 02f7f73

Please sign in to comment.