From f9b140b03052278803f43f059ecad917fd704c70 Mon Sep 17 00:00:00 2001 From: JCH Date: Sat, 6 Jul 2024 15:43:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor=20:=20PostLike=20=EC=97=94?= =?UTF-8?q?=ED=84=B0=ED=8B=B0=20=EA=B5=AC=ED=98=84,=20Member=EC=97=94?= =?UTF-8?q?=ED=84=B0=ED=8B=B0=20=EB=B0=8F=20Post=EC=97=94=ED=84=B0?= =?UTF-8?q?=ED=8B=B0=EC=99=80=20=EB=8B=A8=EB=B0=A9=ED=96=A5=20=EC=97=B0?= =?UTF-8?q?=EA=B4=80=EA=B4=80=EA=B3=84=20=EC=84=A4=EC=A0=95,=20N:1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thisisus/school/post/domain/PostLike.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 BE/school/src/main/java/thisisus/school/post/domain/PostLike.java diff --git a/BE/school/src/main/java/thisisus/school/post/domain/PostLike.java b/BE/school/src/main/java/thisisus/school/post/domain/PostLike.java new file mode 100644 index 0000000..96141d2 --- /dev/null +++ b/BE/school/src/main/java/thisisus/school/post/domain/PostLike.java @@ -0,0 +1,26 @@ +package thisisus.school.post.domain; + +import lombok.*; +import thisisus.school.member.domain.Member; + +import javax.persistence.*; + +@Entity +@Builder +@Getter +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PostLike { + @Id + @GeneratedValue + @Column(name = "post_like_id") + private long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id") + private Post post; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; +} From db859279c60525326e48facaf0c3d5ee60bea73a Mon Sep 17 00:00:00 2001 From: JCH Date: Sun, 14 Jul 2024 16:56:40 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix=20:=20PostLike=20=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=ED=82=A4=20=EC=83=9D=EC=84=B1=20=EC=A0=84=EB=9E=B5=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20wrapper=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/service/PostServiceImplTest.java | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 BE/school/src/test/java/thisisus/school/post/service/PostServiceImplTest.java diff --git a/BE/school/src/test/java/thisisus/school/post/service/PostServiceImplTest.java b/BE/school/src/test/java/thisisus/school/post/service/PostServiceImplTest.java new file mode 100644 index 0000000..b1e18f9 --- /dev/null +++ b/BE/school/src/test/java/thisisus/school/post/service/PostServiceImplTest.java @@ -0,0 +1,191 @@ +package thisisus.school.post.service; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +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 thisisus.school.member.domain.Member; +import thisisus.school.member.domain.MemberStatus; +import thisisus.school.member.domain.Role; +import thisisus.school.post.domain.Post; +import thisisus.school.post.domain.PostCategory; +import thisisus.school.post.dto.PostResponse; +import thisisus.school.post.dto.PostUpdateRequest; +import thisisus.school.post.exception.NotCorrectUserException; +import thisisus.school.post.exception.NotFoundPostException; +import thisisus.school.post.repository.PostRepository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.mockito.BDDMockito.given; + +@ExtendWith(MockitoExtension.class) +class PostServiceImplTest { + private Member member; + private Member member2; + @Mock + private PostRepository postRepository; + @InjectMocks + private PostServiceImpl postService; + + @BeforeEach + void setUp() { + member = new Member(1L, "장창현", + "abcdef@naver.com", "장첸", Role.STUDENT, MemberStatus.ACTIVE, + "tempRefresh"); + member2 = new Member(2L, "테스트용유저", + "ghijk@naver.com", "테스트용", Role.STUDENT, MemberStatus.ACTIVE, + "tempRefresh2"); + } + + @Test + @DisplayName("post 조회 성공") + void findPost() { + //given + Long fakePostId = 1L; + Post post = Post.builder() + .id(fakePostId) + .title("테스트 제목") + .content("테스트 내용") + .likeCount(0) + .viewCount(0) + .member(member) + .build(); + given(postRepository.findById(fakePostId)).willReturn(Optional.ofNullable(post)); + + //when + PostResponse findPost = postService.findPost(fakePostId); + + //then + Assertions.assertEquals(fakePostId, findPost.getPostId()); + Assertions.assertEquals(member.getNickname(), findPost.getWriter()); + } + + @Test + @DisplayName("MemberId를 통한 Post조회") + void findPostByMemberId() { + //given + Long fakePostId = 1L; + Post post = Post.builder() + .id(fakePostId) + .title("테스트 제목") + .content("테스트 내용") + .likeCount(0) + .viewCount(0) + .member(member) + .build(); + + List arr = new ArrayList<>(); + PostResponse postResponse = new PostResponse(post); + arr.add(postResponse); + + List givenArr = new ArrayList<>(); + givenArr.add(post); + + given(postRepository.findAllByMemberId(member.getId())).willReturn(givenArr); + + //when + List postByMemberId = postService.findPostByMemberId(member.getId()); + + //then + Assertions.assertEquals(1, postByMemberId.size()); + Assertions.assertEquals(arr.get(0).getPostId(), postByMemberId.get(0).getPostId()); + } + + @Test + @DisplayName("post 수정 성공") + void update() { + //given + Long fakePostId = 1L; + Post post = Post.builder() + .id(fakePostId) + .title("테스트 제목") + .content("테스트 내용") + .likeCount(0) + .viewCount(0) + .member(member) + .build(); + given(postRepository.findById(fakePostId)).willReturn(Optional.ofNullable(post)); + + PostUpdateRequest postUpdateRequest = new PostUpdateRequest("수정 테스트 제목", "수정 테스트 내용" + , PostCategory.소통해요); + //when + PostResponse update = postService.update(post.getId(), postUpdateRequest, member.getId()); + //then + Assertions.assertEquals("수정 테스트 제목", update.getTitle()); + } + + @Test + @DisplayName("post 수정 실패 - 작성자 불일치") + void failedUpdateByUnCorrectUser() { + //given + Long fakePostId = 1L; + Post post = Post.builder() + .id(fakePostId) + .title("테스트 제목") + .content("테스트 내용") + .likeCount(0) + .viewCount(0) + .member(member) + .build(); + given(postRepository.findById(fakePostId)).willReturn(Optional.ofNullable(post)); + + PostUpdateRequest postUpdateRequest = new PostUpdateRequest("수정 테스트 제목", "수정 테스트 내용" + , PostCategory.소통해요); + //when + Assertions.assertThrows( + NotCorrectUserException.class, () -> postService.update(post.getId(), postUpdateRequest, member2.getId())); + + //then + + } + + @Test + @DisplayName("post 삭제 성공") + void delete() { + //given + Long fakePostId = 1L; + Post post = Post.builder() + .id(fakePostId) + .title("테스트 제목") + .content("테스트 내용") + .likeCount(0) + .viewCount(0) + .member(member) + .build(); + given(postRepository.findById(fakePostId)).willReturn(Optional.ofNullable(post)); + //when + postService.delete(fakePostId, member.getId()); + Post findPost = postRepository.findById(fakePostId).orElseThrow(NotFoundPostException::new); + //then + Assertions.assertEquals(true, findPost.isDelete()); + } + + @Test + @DisplayName("post 삭제 실패 - 작성자 불일치") + void failedDeleteByUnCorrectUser() { + //given + Long fakePostId = 1L; + Post post = Post.builder() + .id(fakePostId) + .title("테스트 제목") + .content("테스트 내용") + .likeCount(0) + .viewCount(0) + .member(member) + .build(); + given(postRepository.findById(fakePostId)).willReturn(Optional.ofNullable(post)); + //when + Assertions.assertThrows( + NotCorrectUserException.class, () -> postService.delete(fakePostId, member2.getId())); + + //then + } +} \ No newline at end of file