Skip to content

Commit

Permalink
Merge pull request #86 from KUSITMS-MOAMOA/test/#79
Browse files Browse the repository at this point in the history
[Test/#79] Folder 도메인 관련 Test Code 작성
  • Loading branch information
daeun084 authored Nov 13, 2024
2 parents 3986778 + 9606aef commit 69bf2a9
Show file tree
Hide file tree
Showing 4 changed files with 255 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package corecord.dev.domain.folder.dto.request;

import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
import lombok.Data;

public class FolderRequest {

@Data
@Data @Builder
public static class FolderDto {
@NotBlank(message = "폴더 명을 입력해주세요.")
private String title;
}

@Data
@Data @Builder
public static class FolderUpdateDto {
@NotBlank(message = "수정할 폴더 id를 입력해주세요.")
private Long folderId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public FolderResponse.FolderDtoList createFolder(Long userId, FolderRequest.Fold
Folder folder = FolderConverter.toFolderEntity(title, user);
folderRepository.save(folder);

return getFolderList(userId);
List<FolderResponse.FolderDto> folderList = folderRepository.findFolderDtoList(user);
return FolderConverter.toFolderDtoList(folderList);
}

/*
Expand All @@ -60,7 +61,8 @@ public FolderResponse.FolderDtoList deleteFolder(Long userId, Long folderId) {

folderRepository.delete(folder);

return getFolderList(userId);
List<FolderResponse.FolderDto> folderList = folderRepository.findFolderDtoList(user);
return FolderConverter.toFolderDtoList(folderList);
}

/*
Expand All @@ -82,7 +84,8 @@ public FolderResponse.FolderDtoList updateFolder(Long userId, FolderRequest.Fold

folder.updateTitle(title);

return getFolderList(userId);
List<FolderResponse.FolderDto> folderList = folderRepository.findFolderDtoList(user);
return FolderConverter.toFolderDtoList(folderList);
}

/*
Expand Down
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 src/test/java/corecord/dev/folder/service/FolderServiceTest.java
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();
}

}

0 comments on commit 69bf2a9

Please sign in to comment.