-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
[Test/#79] Folder 도메인 관련 Test Code 작성
- Loading branch information
Showing
4 changed files
with
255 additions
and
5 deletions.
There are no files selected for viewing
5 changes: 3 additions & 2 deletions
5
src/main/java/corecord/dev/domain/folder/dto/request/FolderRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
86 changes: 86 additions & 0 deletions
86
src/test/java/corecord/dev/folder/repository/FolderRepositoryTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
package corecord.dev.folder.repository; | ||
|
||
import corecord.dev.domain.folder.entity.Folder; | ||
import corecord.dev.domain.folder.repository.FolderRepository; | ||
import corecord.dev.domain.user.entity.Status; | ||
import corecord.dev.domain.user.entity.User; | ||
import jakarta.persistence.EntityManager; | ||
import org.junit.jupiter.api.Test; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; | ||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Optional; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
|
||
@DataJpaTest | ||
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) | ||
public class FolderRepositoryTest { | ||
@Autowired | ||
EntityManager entityManager; | ||
@Autowired | ||
FolderRepository folderRepository; | ||
|
||
@Test | ||
void findFolderByTitle() { | ||
String testTitle1 = "Test Title1"; | ||
String testTitle2 = "Test Title2"; | ||
|
||
// Given | ||
User user = createUser("Test User"); | ||
entityManager.persist(user); | ||
|
||
Folder folder1 = createFolder(testTitle1, user); | ||
entityManager.persist(folder1); | ||
|
||
Folder folder2 = createFolder(testTitle2, user); | ||
entityManager.persist(folder2); | ||
|
||
Long testId = folder2.getFolderId(); | ||
|
||
// When | ||
Optional<Folder> result = folderRepository.findFolderByTitle(testTitle2, user); | ||
|
||
// Then | ||
assertThat(result.isPresent()).isTrue(); | ||
assertThat(result.get().getUser()).isEqualTo(user); | ||
assertThat(result.get().getFolderId()).isEqualTo(testId); | ||
assertThat(result.get().getTitle()).isEqualTo(testTitle2); | ||
} | ||
|
||
@Test | ||
void existByTitle() { | ||
String testTitle = "Test Title"; | ||
|
||
// Given | ||
User user = createUser("Test User"); | ||
entityManager.persist(user); | ||
|
||
Folder folder1 = createFolder(testTitle, user); | ||
entityManager.persist(folder1); | ||
|
||
// When | ||
boolean result = folderRepository.existsByTitle(testTitle); | ||
|
||
// Then | ||
assertThat(result).isEqualTo(true); | ||
} | ||
|
||
private User createUser(String nickName) { | ||
return User.builder() | ||
.providerId("Test Provider") | ||
.nickName(nickName) | ||
.status(Status.GRADUATE_STUDENT) | ||
.folders(new ArrayList<>()) | ||
.build(); | ||
} | ||
|
||
private Folder createFolder(String title, User user) { | ||
return Folder.builder() | ||
.title(title) | ||
.user(user) | ||
.build(); | ||
} | ||
} |
160 changes: 160 additions & 0 deletions
160
src/test/java/corecord/dev/folder/service/FolderServiceTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
package corecord.dev.folder.service; | ||
|
||
import corecord.dev.domain.folder.dto.request.FolderRequest; | ||
import corecord.dev.domain.folder.dto.response.FolderResponse; | ||
import corecord.dev.domain.folder.entity.Folder; | ||
import corecord.dev.domain.folder.exception.model.FolderException; | ||
import corecord.dev.domain.folder.repository.FolderRepository; | ||
import corecord.dev.domain.folder.service.FolderService; | ||
import corecord.dev.domain.user.entity.Status; | ||
import corecord.dev.domain.user.entity.User; | ||
import corecord.dev.domain.user.repository.UserRepository; | ||
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.ArrayList; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat; | ||
import static org.junit.jupiter.api.Assertions.assertThrows; | ||
import static org.mockito.ArgumentMatchers.any; | ||
import static org.mockito.Mockito.*; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
public class FolderServiceTest { | ||
@Mock | ||
private FolderRepository folderRepository; | ||
|
||
@Mock | ||
private UserRepository userRepository; | ||
|
||
@InjectMocks | ||
private FolderService folderService; | ||
|
||
private final Long testId = 1L; | ||
private final String testTitle = "Test folder"; | ||
|
||
|
||
@Test | ||
@DisplayName("새로운 폴더 생성 기능") | ||
void createFolder() { | ||
// Given | ||
User user = createMockUser(testId, "Test User"); | ||
Folder folder = createMockFolder(testId, testTitle, user); | ||
user.getFolders().add(folder); | ||
|
||
when(userRepository.findById(testId)).thenReturn(Optional.of(user)); | ||
when(folderRepository.save(any(Folder.class))).thenReturn(folder); | ||
when(folderRepository.findFolderDtoList(user)).thenReturn(List.of( | ||
FolderResponse.FolderDto.builder() | ||
.folderId(testId) | ||
.title(testTitle) | ||
.build() | ||
)); | ||
|
||
// When | ||
FolderRequest.FolderDto request = FolderRequest.FolderDto.builder() | ||
.title(testTitle) | ||
.build(); | ||
|
||
FolderResponse.FolderDtoList response = folderService.createFolder(testId, request); | ||
|
||
// Then | ||
verify(userRepository).findById(testId); | ||
verify(folderRepository).save(any(Folder.class)); | ||
verify(folderRepository).findFolderDtoList(user); | ||
|
||
assertThat(response.getFolderDtoList()).isNotNull(); | ||
assertThat(response.getFolderDtoList().get(0).getTitle()).isEqualTo(testTitle); | ||
assertThat(response.getFolderDtoList().get(0).getFolderId()).isEqualTo(testId); | ||
} | ||
|
||
@Test | ||
@DisplayName("폴더명 수정 기능") | ||
void updateFolder() { | ||
// Given | ||
String updatedTitle = "Updated Title"; | ||
|
||
User user = createMockUser(testId, "Test User"); | ||
Folder folder = createMockFolder(testId, testTitle, user); | ||
user.getFolders().add(folder); | ||
|
||
when(userRepository.findById(testId)).thenReturn(Optional.of(user)); | ||
when(folderRepository.findById(testId)).thenReturn(Optional.ofNullable(folder)); | ||
when(folderRepository.existsByTitle(updatedTitle)).thenReturn(false); | ||
when(folderRepository.findFolderDtoList(user)).thenReturn(List.of( | ||
FolderResponse.FolderDto.builder() | ||
.folderId(testId) | ||
.title(updatedTitle) | ||
.build() | ||
)); | ||
|
||
// When | ||
FolderRequest.FolderUpdateDto request = FolderRequest.FolderUpdateDto.builder() | ||
.folderId(testId) | ||
.title(updatedTitle) | ||
.build(); | ||
|
||
FolderResponse.FolderDtoList response = folderService.updateFolder(testId, request); | ||
|
||
// Then | ||
verify(folderRepository).findById(testId); | ||
verify(folderRepository).existsByTitle(updatedTitle); | ||
verify(folderRepository).findFolderDtoList(user); | ||
|
||
assertThat(response.getFolderDtoList()).isNotNull(); | ||
assertThat(response.getFolderDtoList().get(0).getTitle()).isEqualTo(updatedTitle); | ||
assertThat(response.getFolderDtoList().get(0).getFolderId()).isEqualTo(testId); | ||
assertThat(folder.getTitle()).isEqualTo(updatedTitle); | ||
} | ||
|
||
@Test | ||
@DisplayName("중복된 폴더 생성 시 오류 반환 테스트") | ||
void createDuplicateFolder() { | ||
// Given | ||
User user = createMockUser(testId, "Test User"); | ||
Folder folder1 = createMockFolder(testId, testTitle, user); | ||
user.getFolders().add(folder1); | ||
|
||
Folder folder2 = createMockFolder(testId + 1, testTitle, user); | ||
|
||
when(userRepository.findById(testId)).thenReturn(Optional.of(user)); | ||
when(folderRepository.existsByTitle(testTitle)).thenReturn(true); | ||
|
||
// When & Then | ||
FolderRequest.FolderDto request = FolderRequest.FolderDto.builder() | ||
.title(testTitle) | ||
.build(); | ||
|
||
assertThat(user.getFolders()).isEqualTo(List.of(folder1)); | ||
assertThrows(FolderException.class, () -> folderService.createFolder(testId, request)); | ||
|
||
verify(userRepository).findById(testId); | ||
verify(folderRepository).existsByTitle(testTitle); | ||
verify(folderRepository, never()).save(folder2); | ||
} | ||
|
||
private User createMockUser(Long userId, String nickName) { | ||
return User.builder() | ||
.userId(userId) | ||
.providerId("Test Provider") | ||
.nickName(nickName) | ||
.status(Status.GRADUATE_STUDENT) | ||
.folders(new ArrayList<>()) | ||
.build(); | ||
} | ||
|
||
private Folder createMockFolder(Long folderId, String title, User user) { | ||
return Folder.builder() | ||
.folderId(folderId) | ||
.title(title) | ||
.user(user) | ||
.build(); | ||
} | ||
|
||
} |