Skip to content

Commit

Permalink
[TEST] integration test for user related repository layer
Browse files Browse the repository at this point in the history
  • Loading branch information
nogamsung committed Nov 11, 2023
1 parent b7375cd commit a6c6327
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 94 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.gabojait.gabojaitspring.repository.team;

import com.gabojait.gabojaitspring.api.dto.common.response.PageData;
import com.gabojait.gabojaitspring.domain.team.Team;
import com.gabojait.gabojaitspring.domain.user.Position;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -38,10 +38,10 @@ void givenNonePosition_whenFindPage_thenReturn() {
Position position = Position.NONE;

// when
Page<Team> teams = teamRepository.findPage(position, pageFrom, pageSize);
PageData<List<Team>> teams = teamRepository.findPage(position, pageFrom, pageSize);

// then
assertThat(teams.getContent())
assertThat(teams.getData())
.extracting("id", "projectName", "projectDescription", "expectation", "openChatUrl", "projectUrl",
"designerCurrentCnt", "backendCurrentCnt", "frontendCurrentCnt", "managerCurrentCnt",
"designerMaxCnt", "backendMaxCnt", "frontendMaxCnt", "managerMaxCnt", "visitedCnt",
Expand All @@ -61,8 +61,8 @@ void givenNonePosition_whenFindPage_thenReturn() {
team3.getVisitedCnt(), team3.getIsRecruiting(), team3.getIsDeleted())
);

assertEquals(pageSize, teams.getSize());
assertEquals(4, teams.getTotalElements());
assertEquals(pageSize, teams.getData().size());
assertEquals(4, teams.getTotal());

}

Expand All @@ -81,10 +81,10 @@ void givenPosition_whenFindPage_thenReturn() {
Position position = Position.BACKEND;

// when
Page<Team> teams = teamRepository.findPage(position, pageFrom, pageSize);
PageData<List<Team>> teams = teamRepository.findPage(position, pageFrom, pageSize);

// then
assertThat(teams.getContent())
assertThat(teams.getData())
.extracting("id", "projectName", "projectDescription", "expectation", "openChatUrl", "projectUrl",
"designerCurrentCnt", "backendCurrentCnt", "frontendCurrentCnt", "managerCurrentCnt",
"designerMaxCnt", "backendMaxCnt", "frontendMaxCnt", "managerMaxCnt", "visitedCnt",
Expand All @@ -104,8 +104,8 @@ void givenPosition_whenFindPage_thenReturn() {
team2.getVisitedCnt(), team2.getIsRecruiting(), team2.getIsDeleted())
);

assertEquals(pageSize, teams.getSize());
assertEquals(3, teams.getTotalElements());
assertEquals(pageSize, teams.getData().size());
assertEquals(3, teams.getTotal());
}

private Team createTeam(String projectName, byte maxCnt) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,54 +26,84 @@ class ContactRepositoryTest {
void givenValid_whenFindByEmail_thenReturn() {
// given
Contact contact = createContact("tester@gabojait.com");
contactRepository.save(contact);

// when
Contact foundContact = contactRepository.findByEmail(contact.getEmail()).get();

// then
assertThat(foundContact).isEqualTo(contact);
}

@Test
@DisplayName("존재하는 연락처 이메일로 연락처 존재 여부를 확인 한다.")
void givenExisting_whenExistsByEmail_thenReturn() {
// given
Contact contact = createContact("tester@gabojait.com");
contactRepository.save(contact);

// when
Optional<Contact> foundContact = contactRepository.findByEmail(contact.getEmail());
boolean result = contactRepository.existsByEmail(contact.getEmail());

// then
assertThat(result).isTrue();
}

@Test
@DisplayName("존재하지 않은 연락처 이메일로 연락처 존재 여부를 확인 한다.")
void givenNonExisting_whenExistsByEmail_thenReturn() {
// given
String email = "tester@gabojait.com";

// when
boolean result = contactRepository.existsByEmail(email);

// then
assertThat(foundContact.get())
.extracting("id", "email", "verificationCode", "isVerified", "createdAt", "updatedAt")
.containsExactly(contact.getId(), contact.getEmail(), contact.getVerificationCode(),
contact.getIsVerified(), contact.getCreatedAt(), contact.getUpdatedAt());
assertThat(result).isFalse();
}

@Test
@DisplayName("이메일로 인증된 연락처 단건 조회를 한다.")
void givenVerifiedContact_whenFindByEmailAndIsVerified_thenReturn() {
void givenVerified_whenFindByEmailAndIsVerified_thenReturn() {
// given
Contact contact = createContact("tester@gabojait.com");
contact.verified();

contactRepository.save(contact);

// when
Optional<Contact> foundContact = contactRepository.findByEmailAndIsVerified(contact.getEmail(), true);
Contact foundContact = contactRepository.findByEmailAndIsVerified(contact.getEmail(), true).get();

// then
assertThat(foundContact.get())
.extracting("id", "email", "verificationCode", "isVerified", "createdAt", "updatedAt")
.containsExactly(contact.getId(), contact.getEmail(), contact.getVerificationCode(),
contact.getIsVerified(), contact.getCreatedAt(), contact.getUpdatedAt());
assertThat(foundContact).isEqualTo(contact);
}

@Test
@DisplayName("이메일로 인증 안된 연락처 단건 조회를 한다.")
void givenUnverifiedContact_whenFindByEmailAndIsVerifiedIsFalse_thenReturn() {
@DisplayName("이메일로 인증되지 않은 연락처 단건 조회를 한다.")
void givenUnverified_whenFindByEmailAndIsVerified_thenReturn() {
// given
Contact contact = createContact("tester@gabojait.com");
contactRepository.save(contact);

// when
Contact foundContact = contactRepository.findByEmailAndIsVerified(contact.getEmail(), false).get();

// then
assertThat(foundContact).isEqualTo(contact);
}

@Test
@DisplayName("이메일로 연락처를 삭제한다.")
void givenValid_whenDeleteByEmail_thenReturn() {
// given
Contact contact = createContact("tester@gabojait.com");
contactRepository.save(contact);

// when
Optional<Contact> foundContact = contactRepository.findByEmailAndIsVerified(contact.getEmail(), false);
contactRepository.deleteByEmail(contact.getEmail());

// then
assertThat(foundContact.get())
.extracting("id", "email", "verificationCode", "isVerified", "createdAt", "updatedAt")
.containsExactly(contact.getId(), contact.getEmail(), contact.getVerificationCode(),
contact.getIsVerified(), contact.getCreatedAt(), contact.getUpdatedAt());
assertThat(contactRepository.existsByEmail(contact.getEmail())).isFalse();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.gabojait.gabojaitspring.repository.user;

import com.gabojait.gabojaitspring.api.dto.common.response.PageData;
import com.gabojait.gabojaitspring.domain.user.Contact;
import com.gabojait.gabojaitspring.domain.user.Gender;
import com.gabojait.gabojaitspring.domain.user.Position;
Expand All @@ -9,17 +10,15 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertAll;

@ActiveProfiles("test")
@SpringBootTest
Expand All @@ -41,18 +40,10 @@ void givenValid_whenFindByContact_thenReturn() {
userRepository.save(user);

// when
Optional<User> foundUser = userRepository.findByContact(contact);
User foundUser = userRepository.findByContact(contact).get();

// then
assertThat(foundUser.get())
.extracting("id", "username", "password", "nickname", "gender", "birthdate", "profileDescription",
"imageUrl", "lastRequestAt", "position", "rating", "visitedCnt", "reviewCnt", "isSeekingTeam",
"isTemporaryPassword", "isNotified", "createdAt", "updatedAt")
.containsExactly(user.getId(), user.getUsername(), user.getPassword(), user.getNickname(),
user.getGender(), user.getBirthdate(), user.getProfileDescription(), user.getImageUrl(),
user.getLastRequestAt(), user.getPosition(), user.getRating(), user.getVisitedCnt(),
user.getReviewCnt(), user.getIsSeekingTeam(), user.getIsTemporaryPassword(),
user.getIsNotified(), user.getCreatedAt(), user.getUpdatedAt());
assertThat(foundUser).isEqualTo(user);
}

@Test
Expand All @@ -67,18 +58,10 @@ void givenValid_whenFindByUsername_thenReturn() {
userRepository.save(user);

// when
Optional<User> foundUser = userRepository.findByUsername(user.getUsername());
User foundUser = userRepository.findByUsername(user.getUsername()).get();

// then
assertThat(foundUser.get())
.extracting("id", "username", "password", "nickname", "gender", "birthdate", "profileDescription",
"imageUrl", "lastRequestAt", "position", "rating", "visitedCnt", "reviewCnt", "isSeekingTeam",
"isTemporaryPassword", "isNotified", "createdAt", "updatedAt")
.containsExactly(user.getId(), user.getUsername(), user.getPassword(), user.getNickname(),
user.getGender(), user.getBirthdate(), user.getProfileDescription(), user.getImageUrl(),
user.getLastRequestAt(), user.getPosition(), user.getRating(), user.getVisitedCnt(),
user.getReviewCnt(), user.getIsSeekingTeam(), user.getIsTemporaryPassword(),
user.getIsNotified(), user.getCreatedAt(), user.getUpdatedAt());
assertThat(foundUser).isEqualTo(user);
}

@Test
Expand All @@ -93,18 +76,10 @@ void givenValid_whenFindByNickname_thenReturn() {
userRepository.save(user);

// when
Optional<User> foundUser = userRepository.findByNickname(user.getNickname());
User foundUser = userRepository.findByNickname(user.getNickname()).get();

// then
assertThat(foundUser.get())
.extracting("id", "username", "password", "nickname", "gender", "birthdate", "profileDescription",
"imageUrl", "lastRequestAt", "position", "rating", "visitedCnt", "reviewCnt", "isSeekingTeam",
"isTemporaryPassword", "isNotified", "createdAt", "updatedAt")
.containsExactly(user.getId(), user.getUsername(), user.getPassword(), user.getNickname(),
user.getGender(), user.getBirthdate(), user.getProfileDescription(), user.getImageUrl(),
user.getLastRequestAt(), user.getPosition(), user.getRating(), user.getVisitedCnt(),
user.getReviewCnt(), user.getIsSeekingTeam(), user.getIsTemporaryPassword(),
user.getIsNotified(), user.getCreatedAt(), user.getUpdatedAt());
assertThat(foundUser).isEqualTo(user);
}

@Test
Expand Down Expand Up @@ -178,18 +153,13 @@ void givenNonePosition_whenFindPage_thenReturn() {
Position position = Position.NONE;

// when
Page<User> users = userRepository.findPage(position, pageFrom, pageSize);
PageData<List<User>> users = userRepository.findPage(position, pageFrom, pageSize);

// then
assertThat(users.getContent())
.extracting("id", "username", "nickname", "position")
.containsExactly(
tuple(user3.getId(), user3.getUsername(), user3.getNickname(), user3.getPosition()),
tuple(user2.getId(), user2.getUsername(), user2.getNickname(), user2.getPosition())
);

assertEquals(pageSize, users.getSize());
assertEquals(3, users.getTotalElements());
assertAll(
() -> assertThat(users.getData()).containsExactly(user3, user2),
() -> assertThat(users.getTotal()).isEqualTo(3L)
);
}

@Test
Expand Down Expand Up @@ -218,18 +188,31 @@ void givenPosition_whenFindPage_thenReturn() {
Position position = Position.BACKEND;

// when
Page<User> users = userRepository.findPage(position, pageFrom, pageSize);
PageData<List<User>> users = userRepository.findPage(position, pageFrom, pageSize);

// then
assertThat(users.getContent())
.extracting("id", "username", "nickname", "position")
.containsExactly(
tuple(user2.getId(), user2.getUsername(), user2.getNickname(), user2.getPosition()),
tuple(user1.getId(), user1.getUsername(), user1.getNickname(), user1.getPosition())
);

assertEquals(pageSize, users.getSize());
assertEquals(2, users.getTotalElements());
assertAll(
() -> assertThat(users.getData()).containsExactly(user2, user1),
() -> assertThat(users.getTotal()).isEqualTo(2L)
);
}

@Test
@DisplayName("결과가 없는 회원 페이징 조회를 한다.")
void givenNoResult_whenFindPage_thenReturn() {
// given
long pageFrom = Long.MAX_VALUE;
int pageSize = 1;
Position position = Position.NONE;

// when
PageData<List<User>> users = userRepository.findPage(position, pageFrom, pageSize);

// then
assertAll(
() -> assertThat(users.getData()).isEmpty(),
() -> assertThat(users.getTotal()).isEqualTo(0L)
);
}

@Test
Expand All @@ -242,12 +225,26 @@ void givenValid_whenFindSeekingTeam_thenReturn() {
userRepository.save(user);

// when
Optional<User> foundUser = userRepository.findSeekingTeam(user.getId());
User foundUser = userRepository.findSeekingTeam(user.getId()).get();

// then
assertThat(foundUser).isEqualTo(user);
}

@Test
@DisplayName("이메일로 회원 단건 조회를 한다.")
void givenValid_whenFind_thenReturn() {
// given
Contact contact = createContact("tester@gabojait.com");
contactRepository.save(contact);
User user = createUser("tester", "테스터", contact);
userRepository.save(user);

// when
User foundUser = userRepository.find(contact.getEmail()).get();

// then
assertThat(foundUser.get())
.extracting("id", "username", "nickname", "position", "isSeekingTeam")
.contains(user.getId(), user.getUsername(), user.getNickname(), user.getPosition(), true);
assertThat(foundUser).isEqualTo(user);
}

private User createUser(String username, String nickname, Contact contact) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ class UserRoleRepositoryTest {
@Autowired private ContactRepository contactRepository;

@Test
@DisplayName("회원 아이디로 전체 권한 조회를 한다.")
void givenValid_whenFindAll_thenReturn() {
@DisplayName("존재하는 회원 아이디로 전체 권한 조회를 한다.")
void givenExisting_whenFindAll_thenReturn() {
// given
User user = createSavedDefaultUser("tester@gabojait.com", "tester", "테스터");
Role role = Role.USER;
Expand All @@ -38,19 +38,14 @@ void givenValid_whenFindAll_thenReturn() {

// then
assertAll(
() -> assertThat(userRoles)
.extracting("role")
.containsExactly(Role.USER),
() -> assertThat(userRoles.size()).isEqualTo(1),
() -> assertThat(userRoles)
.extracting("id", "createdAt", "updatedAt")
.isNotNull()
() -> assertThat(userRoles).containsExactly(userRole),
() -> assertThat(userRoles.size()).isEqualTo(1)
);
}

@Test
@DisplayName("존재하지 않은 회원 아이디로 전체 권한 조회를 한다.")
void givenNonExistingUsername_whenFindAll_thenReturn() {
void givenNonExisting_whenFindAll_thenReturn() {
// given
String username = "tester";

Expand Down

0 comments on commit a6c6327

Please sign in to comment.