Skip to content

Commit

Permalink
Merge pull request #93 from KUSITMS-MOAMOA/test/#80
Browse files Browse the repository at this point in the history
[Test/#80] Record domain Test Code 작성
  • Loading branch information
oosedus authored Nov 18, 2024
2 parents 8ec1512 + 7a1b47d commit 63af1db
Show file tree
Hide file tree
Showing 11 changed files with 462 additions and 11 deletions.
3 changes: 2 additions & 1 deletion src/main/java/corecord/dev/common/base/BaseEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
Expand All @@ -12,7 +13,7 @@
import java.time.format.DateTimeFormatter;

@EntityListeners(AuditingEntityListener.class)
@Getter
@Getter @Setter
@MappedSuperclass
public class BaseEntity {
@CreatedDate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class Folder extends BaseEntity {
@OneToMany(mappedBy = "folder", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Record> records;

@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
public class RecordConverter {
public static Record toMemoRecordEntity(String title, String content, User user, Folder folder) {
return Record.builder()
.type(RecordType.MEMO)
.title(title)
.user(user)
.content(content)
Expand All @@ -25,7 +24,6 @@ public static Record toMemoRecordEntity(String title, String content, User user,

public static Record toChatRecordEntity(String title, String content, User user, Folder folder, ChatRoom chatRoom) {
return Record.builder()
.type(RecordType.CHAT)
.title(title)
.user(user)
.content(content)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

import corecord.dev.domain.record.constant.RecordType;
import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

public class RecordRequest {
@Data
@Data @Builder
public static class RecordDto {
@NotBlank(message = "제목을 입력해주세요.")
private String title;
Expand All @@ -19,7 +20,7 @@ public static class RecordDto {
private Long chatRoomId;
}

@Data
@Data @Builder
public static class TmpMemoRecordDto {
@NotBlank(message = "임시 저장할 기록의 제목을 입력해주세요.")
private String title;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/corecord/dev/domain/record/entity/Record.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ public class Record extends BaseEntity {
@Column(nullable = false, length = 500)
private String content;

@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;

@OneToOne
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "chat_room_id", nullable = true)
private ChatRoom chatRoom;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
public enum RecordErrorStatus implements BaseErrorStatus {
OVERFLOW_MEMO_RECORD_TITLE(HttpStatus.BAD_REQUEST, "E0400_OVERFLOW_TITLE", "메모 제목은 50자 이내여야 합니다."),
OVERFLOW_MEMO_RECORD_CONTENT(HttpStatus.BAD_REQUEST, "E0400_OVERFLOW_CONTENT", "메모 내용은 500자 이내여야 합니다."),
NOT_ENOUGH_MEMO_RECORD_CONTENT(HttpStatus.BAD_REQUEST, "E0400_NOT_ENOUGH_CONTENT", "메모 내용은 30자 이상이어야 합니다."),
USER_RECORD_UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "E401_RECORD_UNAUTHORIZED", "유저가 경험 기록에 대한 권한이 없습니다."),
RECORD_NOT_FOUND(HttpStatus.NOT_FOUND, "E0404_RECORD", "존재하지 않는 경험 기록입니다."),
ALREADY_TMP_MEMO(HttpStatus.BAD_REQUEST, "E0400_TMP_MEMO", "유저가 이미 임시 저장된 메모를 가지고 있습니다.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ public interface RecordRepository extends JpaRepository<Record, Long> {
"JOIN FETCH a.abilityList al " +
"WHERE r.user = :user " +
"AND (:last_record_id = 0 OR r.recordId < :last_record_id) " + // 제일 마지막에 읽은 데이터 이후부터 가져옴
"AND r.folder is not null AND r.folder = :folder "+ // 임시 저장 기록 제외
"ORDER BY r.createdAt desc ") // 최근 생성 순 정렬
"AND r.folder is not null AND r.folder = :folder") // 임시 저장 기록 제외
List<Record> findRecordsByFolder(
@Param(value = "folder") Folder folder,
@Param(value = "user") User user,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,9 @@ private void validTextLength(String title, String content) {
if (title != null && title.length() > 50)
throw new RecordException(RecordErrorStatus.OVERFLOW_MEMO_RECORD_TITLE);

if (content != null && content.length() < 30)
throw new RecordException(RecordErrorStatus.NOT_ENOUGH_MEMO_RECORD_CONTENT);

if (content != null && content.length() > 500) {
throw new RecordException(RecordErrorStatus.OVERFLOW_MEMO_RECORD_CONTENT);
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ spring:

logging:
level:
org.springframework.web: DEBUG
org.springframework.web: DEBUG
org.springframework.web.client.DefaultRestClient: OFF
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
package corecord.dev.record.memo.repository;

import corecord.dev.domain.ability.entity.Ability;
import corecord.dev.domain.ability.entity.Keyword;
import corecord.dev.domain.ability.repository.AbilityRepository;
import corecord.dev.domain.analysis.entity.Analysis;
import corecord.dev.domain.analysis.repository.AnalysisRepository;
import corecord.dev.domain.folder.entity.Folder;
import corecord.dev.domain.folder.repository.FolderRepository;
import corecord.dev.domain.record.constant.RecordType;
import corecord.dev.domain.record.entity.Record;
import corecord.dev.domain.record.repository.RecordRepository;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;

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.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

@DataJpaTest
@Transactional
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class MemoRecordRepositoryTest {

@Autowired
private RecordRepository recordRepository;

@Autowired
private UserRepository userRepository;

@Autowired
private FolderRepository folderRepository;

@Autowired
private AnalysisRepository analysisRepository;

@Autowired
private AbilityRepository abilityRepository;

private final Long lastRecordId = 0L;
private final Pageable pageable = PageRequest.of(0, 5);
private final String testContent = "Test Content";


@Test
@DisplayName("폴더별 경험 기록 리스트 조회 테스트")
void findRecordByFolder() {
// Given
User user = createUser("Test User");
Folder folder = createFolder("Test Folder", user);

Record record1 = createRecord("Test Record1", user, folder);
Record record2 = createRecord("Test Record2", user, folder);

// When
List<Record> result = recordRepository.findRecordsByFolder(folder, user, lastRecordId, pageable);

// Then
assertThat(result.size()).isEqualTo(2);
assertThat(result.get(0).getRecordId()).isEqualTo(record1.getRecordId());
assertThat(result.get(0).getFolder().getFolderId()).isEqualTo(folder.getFolderId());
assertThat(result.get(1).getRecordId()).isEqualTo(record2.getRecordId());
assertThat(result.get(1).getFolder().getFolderId()).isEqualTo(folder.getFolderId());
}

@Test
@DisplayName("경험 기록이 존재하지 않는 폴더에 대한 리스트 조회 테스트")
void findRecordByFolderWhenNoRecordsExist() {
// Given
User user = createUser("Test User");
Folder folder = createFolder("Test Folder", user);

// When
List<Record> result = recordRepository.findRecordsByFolder(folder, user, lastRecordId, pageable);

// Then
assertEquals(result.size(), 0);
}

@Test
@DisplayName("메모 경험 기록 조회 테스트")
void findMemoRecordDetail() {
// Given
User user = createUser("Test User");
Folder folder = createFolder("Test folder", user);
Record record = createRecord("Test Record", user, folder);

// When
Optional<Record> result = recordRepository.findRecordById(record.getRecordId());

// Then
assertTrue(result.isPresent());
assertThat(result.get().getTitle()).isEqualTo("Test Record");
assertThat(result.get().getRecordId()).isEqualTo(record.getRecordId());
}

@Test
@DisplayName("키워드별 경험 기록 조회 테스트")
void findMemoRecordListByKeywordTest() {
// Given
User user = createUser("Test User");
Folder folder = createFolder("Test folder", user);

Record record1 = createRecord("Test Record1", user, folder);
Record record2 = createRecord("Test Record2", user, folder);

// When
List<Record> result = recordRepository.findRecordsByKeyword(Keyword.COLLABORATION, user, lastRecordId, pageable);

// Then
assertEquals(result.size(), 2);
assertEquals(result.get(0).getTitle(), record1.getTitle());
assertEquals(result.get(1).getTitle(), record2.getTitle());
}

private User createUser(String nickName) {
User user = User.builder()
.providerId("Test Provider")
.nickName(nickName)
.status(Status.GRADUATE_STUDENT)
.folders(new ArrayList<>())
.build();
userRepository.save(user);
return user;
}

private Record createRecord(String title, User user, Folder folder) {
Record record = Record.builder()
.title(title)
.content(testContent)
.user(user)
.type(RecordType.MEMO)
.folder(folder)
.build();
recordRepository.save(record);
createAnalysis(record, user);
return record;
}

private Folder createFolder(String title, User user) {
Folder folder = Folder.builder()
.title(title)
.user(user)
.build();
folderRepository.save(folder);
return folder;
}

private Analysis createAnalysis(Record record, User user) {
Analysis analysis = Analysis.builder()
.content(testContent)
.comment(testContent)
.record(record)
.build();
analysisRepository.save(analysis);
createAbility(user, analysis, Keyword.COLLABORATION);
return analysis;
}

private Ability createAbility(User user, Analysis analysis, Keyword keyword) {
Ability ability = Ability.builder()
.keyword(keyword)
.content(testContent)
.user(user)
.analysis(analysis)
.build();
abilityRepository.save(ability);
return ability;
}

}
Loading

0 comments on commit 63af1db

Please sign in to comment.