Skip to content

Commit 3d5820c

Browse files
authored
refactor: 커뮤니티 관련 통합 테스트 데이터 fixture 메서드로 변경 (#335)
* feat: BoardFixture에 Board 생성 메서드 추가 - 지연로딩 문제를 방지하기 위해 Board 조회 시 fetch join 사용 * feat: PostFixture에 Post 생성 메서드 추가 * feat: PostImageFixture에 PostImage 생성 메서드 추가 * feat: CommentFixture에 Comment 생성 메서드 추가 * refactor: Community 관련 데이터 fixture 메서드로 변경 * refactor: BaseIntegrationTest 제거 * refactor: BoardFixture에서 BoardCode enum 상수 일관되게 사용
1 parent ac0f60e commit 3d5820c

14 files changed

Lines changed: 565 additions & 863 deletions
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.example.solidconnection.community.board.fixture;
2+
3+
import com.example.solidconnection.community.board.domain.Board;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.boot.test.context.TestComponent;
6+
7+
import static com.example.solidconnection.community.board.domain.BoardCode.AMERICAS;
8+
import static com.example.solidconnection.community.board.domain.BoardCode.ASIA;
9+
import static com.example.solidconnection.community.board.domain.BoardCode.EUROPE;
10+
import static com.example.solidconnection.community.board.domain.BoardCode.FREE;
11+
12+
@TestComponent
13+
@RequiredArgsConstructor
14+
public class BoardFixture {
15+
16+
private final BoardFixtureBuilder boardFixtureBuilder;
17+
18+
public Board 미주권() {
19+
return boardFixtureBuilder.code(AMERICAS.name())
20+
.koreanName("미주권")
21+
.findOrCreate();
22+
}
23+
24+
public Board 아시아권() {
25+
return boardFixtureBuilder.code(ASIA.name())
26+
.koreanName("아시아권")
27+
.findOrCreate();
28+
}
29+
30+
public Board 유럽권() {
31+
return boardFixtureBuilder.code(EUROPE.name())
32+
.koreanName("유럽권")
33+
.findOrCreate();
34+
}
35+
36+
public Board 자유게시판() {
37+
return boardFixtureBuilder.code(FREE.name())
38+
.koreanName("자유게시판")
39+
.findOrCreate();
40+
}
41+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.example.solidconnection.community.board.fixture;
2+
3+
import com.example.solidconnection.community.board.domain.Board;
4+
import com.example.solidconnection.community.board.repository.BoardRepositoryForTest;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.boot.test.context.TestComponent;
7+
8+
@TestComponent
9+
@RequiredArgsConstructor
10+
public class BoardFixtureBuilder {
11+
12+
private final BoardRepositoryForTest boardRepositoryForTest;
13+
14+
private String code;
15+
private String koreanName;
16+
17+
public BoardFixtureBuilder code(String code) {
18+
this.code = code;
19+
return this;
20+
}
21+
22+
public BoardFixtureBuilder koreanName(String koreanName) {
23+
this.koreanName = koreanName;
24+
return this;
25+
}
26+
27+
public Board findOrCreate() {
28+
return boardRepositoryForTest.findByCodeWithPosts(code)
29+
.orElseGet(() -> boardRepositoryForTest.save(new Board(code, koreanName)));
30+
}
31+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.example.solidconnection.community.board.repository;
2+
3+
import com.example.solidconnection.community.board.domain.Board;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.jpa.repository.Query;
6+
import org.springframework.data.repository.query.Param;
7+
8+
import java.util.Optional;
9+
10+
public interface BoardRepositoryForTest extends JpaRepository<Board, Long> {
11+
12+
@Query("SELECT b FROM Board b LEFT JOIN FETCH b.postList WHERE b.code = :code")
13+
Optional<Board> findByCodeWithPosts(@Param("code") String code);
14+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.example.solidconnection.community.comment.fixture;
2+
3+
import com.example.solidconnection.community.comment.domain.Comment;
4+
import com.example.solidconnection.community.post.domain.Post;
5+
import com.example.solidconnection.siteuser.domain.SiteUser;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.boot.test.context.TestComponent;
8+
9+
@TestComponent
10+
@RequiredArgsConstructor
11+
public class CommentFixture {
12+
13+
private final CommentFixtureBuilder commentFixtureBuilder;
14+
15+
public Comment 부모_댓글(String content, Post post, SiteUser siteUser) {
16+
return commentFixtureBuilder
17+
.content(content)
18+
.post(post)
19+
.siteUser(siteUser)
20+
.createParent();
21+
}
22+
23+
public Comment 자식_댓글(
24+
String content,
25+
Post post,
26+
SiteUser siteUser,
27+
Comment parentComment) {
28+
return commentFixtureBuilder
29+
.content(content)
30+
.post(post)
31+
.siteUser(siteUser)
32+
.parentComment(parentComment)
33+
.createChild();
34+
}
35+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.example.solidconnection.community.comment.fixture;
2+
3+
import com.example.solidconnection.community.comment.domain.Comment;
4+
import com.example.solidconnection.community.comment.repository.CommentRepository;
5+
import com.example.solidconnection.community.post.domain.Post;
6+
import com.example.solidconnection.siteuser.domain.SiteUser;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.boot.test.context.TestComponent;
9+
10+
@TestComponent
11+
@RequiredArgsConstructor
12+
public class CommentFixtureBuilder {
13+
14+
private final CommentRepository commentRepository;
15+
16+
private String content;
17+
private Post post;
18+
private SiteUser siteUser;
19+
private Comment parentComment;
20+
21+
public CommentFixtureBuilder content(String content) {
22+
this.content = content;
23+
return this;
24+
}
25+
26+
public CommentFixtureBuilder post(Post post) {
27+
this.post = post;
28+
return this;
29+
}
30+
31+
public CommentFixtureBuilder siteUser(SiteUser siteUser) {
32+
this.siteUser = siteUser;
33+
return this;
34+
}
35+
36+
public CommentFixtureBuilder parentComment(Comment parentComment) {
37+
this.parentComment = parentComment;
38+
return this;
39+
}
40+
41+
public Comment createParent() {
42+
Comment comment = new Comment(content);
43+
comment.setPostAndSiteUser(post, siteUser);
44+
return commentRepository.save(comment);
45+
}
46+
47+
public Comment createChild() {
48+
Comment comment = new Comment(content);
49+
comment.setPostAndSiteUser(post, siteUser);
50+
comment.setParentCommentAndPostAndSiteUser(parentComment, post, siteUser);
51+
return commentRepository.save(comment);
52+
}
53+
}

0 commit comments

Comments
 (0)