Skip to content

Commit

Permalink
�댓글 기능 단위 테스트 코드 수정 및 통과 완료 (#96)
Browse files Browse the repository at this point in the history
* feat: Tag, Post, PostTag 엔티티 간 연관관계 매핑 (#20)

* feat: 신고 카테고리 항목 추가

* Update PULL_REQUEST_TEMPLATE.md

* feat: filetype enum값 추가

* feat: entity에 검증 어노테이션 추가 (#11)

* feat: entity에 검증 어노테이션 추가

* feat: entity에 검증 어노테이션 추가

* style: 업로드 파일명, 서버 관리 파일명의 필드명 변경

---------

Co-authored-by: gywns0417 <[email protected]>

* chore: 패키지 구조 개선

* Revert "chore: 패키지 구조 개선"

This reverts commit f27a0d9.

* chore: 패키지 구조 개선

* feat: Tag, Post, PostTag 엔티티 간 연관관계 매핑

---------

Co-authored-by: Hanjaemo <[email protected]>
Co-authored-by: Hanjaemo <[email protected]>
Co-authored-by: gywns0417 <[email protected]>

* feat: 검증 애노테이션 추가 (#26)

* feat: 엔티티에 검증 애노테이션 추가

* style: 불필요한 import문 제거

* feat: 댓글 리포지토리 구현

* feat: 댓글 DTO 클래스 구현

* feat: 임시 Member, Post 리포지토리 구현

* feat: 댓글 리포지토리 재구현

* feat: 댓글 Service 클래스 구현

* feat: 댓글 Controller 클래스 일부 구현

* 게시글 작성 기능 구현 (#28)

* feat: 신고 카테고리 항목 추가

* Update PULL_REQUEST_TEMPLATE.md

* feat: filetype enum값 추가

* feat: entity에 검증 어노테이션 추가 (#11)

* feat: entity에 검증 어노테이션 추가

* feat: entity에 검증 어노테이션 추가

* style: 업로드 파일명, 서버 관리 파일명의 필드명 변경

---------

Co-authored-by: gywns0417 <[email protected]>

* chore: 패키지 구조 개선

* Revert "chore: 패키지 구조 개선"

This reverts commit f27a0d9.

* chore: 패키지 구조 개선

* commit test

* dto

* feat: 커밋 과정에서 변경사항 추가

* feat: getter 추가

* feat: dto 클래스 추가

* refactor: dto 구조 수정

* refactor: entity 생성자 추가

* feat: 게시글 작성 기능 추가

* test: 게시글 작성 기능 테스트

* feat: FileDto 클래스 추가

* test: fileDto 추가

* refactor: 불필요한 코드 제거

* fix: JSON 매핑 오류 해결 (#33)

* fix: tag <-> TagPost 영속성 전이 추가

* feat: 게시글 전체 조회 기능 추가 (#34)

---------

Co-authored-by: Hanjaemo <[email protected]>
Co-authored-by: Hanjaemo <[email protected]>
Co-authored-by: gywns0417 <[email protected]>

* refactor: 댓글 Service 코드 가독성 향상

* move: 불필요한 댓글 Request Dto 삭제

* refactor: 댓글 API 엔드포인트 수정

* feat: Post 엔티티 어노테이션 추가 구현

* fix: Post 엔티티 Category, viewStatus 필드 임시 @NotNull 해제

쿼리 테스트를 위해 미구현 상태인 Post 엔티티 필드 어노테이션을 일부 수정했습니다.

* feat: Member 엔티티 @Getter 임시 추가

* feat: BalanceOptionRepository 임시 구현

* feat: BalanceOption 엔티티 @Getter 임시 추가

* feat: CommentCreateRequest 클래스에 balanceOptionId 필드 추가

* fix: CommentResponse 클래스에 likeCount() 임시 비활성화

테스트를 위해 현재 미구현 상태인 CommentLike 관련 코드를 임시 비활성화 했습니다.(Null값)

* feat: CommentService 추가 구현 완료

BalanceOption 검증 코드(추후 BalanceOption 구현 완료 시 사용)를 추가 했습니다.

* refactor: 댓글 컨트롤러 createComment() 메서드 수정

댓글 API 엔드포인트를 설계에 맞게 수정함에 따라 관련 사항들을 수정했습니다.

* fix: 댓글 API 사용시 401 에러 해결

localhost:8080 접속 시 로그인이 필요 없도록 임시로 수정했습니다.

* 게시글 CRUD 기능 구현 (#39)

* feat: 신고 카테고리 항목 추가

* Update PULL_REQUEST_TEMPLATE.md

* feat: filetype enum값 추가

* feat: entity에 검증 어노테이션 추가 (#11)

* feat: entity에 검증 어노테이션 추가

* feat: entity에 검증 어노테이션 추가

* style: 업로드 파일명, 서버 관리 파일명의 필드명 변경

---------

Co-authored-by: gywns0417 <[email protected]>

* chore: 패키지 구조 개선

* Revert "chore: 패키지 구조 개선"

This reverts commit f27a0d9.

* chore: 패키지 구조 개선

* commit test

* dto

* feat: 커밋 과정에서 변경사항 추가

* feat: getter 추가

* feat: dto 클래스 추가

* refactor: dto 구조 수정

* refactor: entity 생성자 추가

* feat: 게시글 작성 기능 추가

* test: 게시글 작성 기능 테스트

* feat: FileDto 클래스 추가

* test: fileDto 추가

* refactor: 불필요한 코드 제거

* fix: JSON 매핑 오류 해결 (#33)

* fix: tag <-> TagPost 영속성 전이 추가

* feat: 게시글 전체 조회 기능 추가 (#34)

* feat: 게시글 단건 조회 기능 추가

* feat: 게시글 삭제 기능 추가

* fix: 생성자 private으로 접근 제어

* feat: MemberRepository 클래스 추가

* refactor: 리뷰받은 내용들 수정

* test: 게시글 CRUD 테스트 코드 작성

* refactor: dto에서 views, viewstatus 제거

---------

Co-authored-by: Hanjaemo <[email protected]>
Co-authored-by: Hanjaemo <[email protected]>
Co-authored-by: gywns0417 <[email protected]>

* feat: 회원 투표 기능 구현 (#32)

* chore: Spring Security 라이브러리 임시 주석 처리

* feat: 회원 투표 기능 구현

* test: 투표 생성 기능 단위 테스트

* feat: 선택지 투표 API 컨트롤러에 응답 메시지 추가

* feat: VoteController의 vote 메서드에 201 응답 코드 추가

* test: Mockito를 사용해서 테스트 코드 작성

* feat: 투표 현황 조회 기능 구현

* test: 투표 현황 조회 기능 단위 테스트

* feat: 투표 변경 기능 구현

* refactor: Post의 category 필드명 수정

* refactor: VoteRequest에 @builder 추가

* test: 회원 투표 수정 기능 단위 테스트

* refactor: 빌더 사용 및 메서드 위치 수정

* refactor: 기본값 설정 방법을 @PrePersist 사용 방식으로 변경

* refactor: 테스트 코드에서 EntityManager 주입 로직 제거

* refactor: 조회 메서드에 @transactional(readOnly = true) 추가

* style: import문 압축

* feat: 조회한 선택지가 게시글에 포함되지 않은 게시글인 경우 예외 발생

* fix: 댓글 수정 시 json으로 데이터 전송되지 않던 에러 해결

* feat: 댓글 작성 시 postId를 API 주소에서 가져오게 기능 변경

* feat: 댓글 수정 성공 시 ResponseEntity 전달하도록 구현

* style: 현재 사용하지 않는 BalanceOption 검증 기능 주석 처리

* test: 댓글 CRUD 테스트 코드 작성 및 통과 완료

* style: 불필요한 import문 제거

* feat: 댓글 CRUD 응답 시 댓글 작성 일시, 댓글 최종 수정 일시 반환 구현

* refactor: 메서드 단위로 트랜잭션 구현

* refactor: dev 브랜치에 맞게 클래스 수정

* fix: voteCount() 메서드 문법 오류 수정

* refactor: dev 브랜치에 맞게 클레스 수정

* fix: @NotNull import 미포함 수정 완료

* fix: 중복 MemberRepository 클래스 삭제 완료

* 투표 기능 예외 처리 (#49)

* feat: 투표 생성 시 존재하지 않는 데이터를 요구한 경우 예외 처리

* feat: 중복 투표를 진행하는 경우 예외 처리

* feat: 투표가 이미 종료된 게시글에 투표하려는 경우 예외 처리

* style: 로직 순서 변경

* feat: 존재하지 않는 데이터 요청 시 예외 처리

* feat: 카테고리가 'CASUAL'인 게시글에서 투표를 수정하려는 경우 예외 처리

* feat: 해당 게시글에서 투표한 기록이 없을 때 투표를 수정하려는 경우 예외 처리

* 게시글 추천 기능 구현 (#54)

* feat: 게시글 추천 기능 구현

* test: 게시글의 마감기한, 회원의 투표 정보 필드 추가

* test: 게시글 좋아요 기능 단위 테스트

* test: 게시글 추천 시 해당 게시글이 존재하지 않는 경우 예외 처리에 대한 단위 테스트

* test: 게시글 중복 추천 시 예외 처리에 대한 단위 테스트

* style: 불필요한 메서드 제거

* 댓글 추천 기능 구현 (#55)

* feat: 댓글 추천 기능 구현

* test: 댓글 추천 기능 단위 테스트

* test: 댓글 중복 추천 시 예외 처리 단위 테스트

* style: 각 코드의 구분자를 세미콜론에서 쉼표로 변경

* 댓글 기능 예외 처리 구현

* feat: 댓글 CRUD 예외 처리 구현

* style: TODO-Comment-BalanceOption 연관 필요

* refactor: 댓글 컨트롤러 가독성 개선

* feat: PR 리뷰에 따른 코드 수정

* test: 댓글 예외 처리 단위 테스트 작성 및 통과 완료

* fix: { 문법 오류 수정

* 회원 정보 조회 기능 구현 (#69)

* feat: jwt 라이브러리 추가

* fix: merge 과정에서 충돌 이슈 제거

* feat: 토큰 생성, 검증을 하는 TokenProvider 클래스 생성

* feat: SecurityConfig 클래스 추가

* feat: Jwt Filter 적용

* feat: UserDetailService 추가 및 Member에 메서드 추가

* feat: 로그인, 회원가입 시 필요한 dto 클래스 생성

* feat: 유저 회원가입 기능 구현

* feat: 유저 로그인 기능 구현

* feat: 공통 Exception 클래스들 추가

* refactor: LoginSuccessDto 추가

* feat: LoginSuccessDto 추가

* feat: 회원 정보 조회 기능 추가

* feat: 회원 정보 조회 기능 추가

* fix: securityConfig에서 posts url 허용

* feat: 회원 전체 목록 기능 구현

* feat: ErrorCode 적용

* feat: 단위 테스트 작성

* fix: postCount, postLike 값이 null이 들어가는 오류 수정

* refactor: 불필요한 코드 제거

* feat: 회원 로그인, 조회 예외 처리

* fix: signWith() deprecated 수정

* fix: errorCode 중복 네이밍 제거

* 회원 정보 수정 기능 구현  (#76)

* feat: jwt 라이브러리 추가

* fix: merge 과정에서 충돌 이슈 제거

* feat: 토큰 생성, 검증을 하는 TokenProvider 클래스 생성

* feat: SecurityConfig 클래스 추가

* feat: Jwt Filter 적용

* feat: UserDetailService 추가 및 Member에 메서드 추가

* feat: 로그인, 회원가입 시 필요한 dto 클래스 생성

* feat: 유저 회원가입 기능 구현

* feat: 유저 로그인 기능 구현

* feat: 공통 Exception 클래스들 추가

* refactor: LoginSuccessDto 추가

* feat: LoginSuccessDto 추가

* feat: 회원 정보 조회 기능 추가

* feat: 회원 정보 조회 기능 추가

* fix: securityConfig에서 posts url 허용

* feat: 회원 전체 목록 기능 구현

* feat: ErrorCode 적용

* feat: 단위 테스트 작성

* fix: postCount, postLike 값이 null이 들어가는 오류 수정

* refactor: 불필요한 코드 제거

* feat: 회원 로그인, 조회 예외 처리

* merge branch

* 댓글 추천 기능 구현 (#55)

* feat: 댓글 추천 기능 구현

* test: 댓글 추천 기능 단위 테스트

* test: 댓글 중복 추천 시 예외 처리 단위 테스트

* style: 각 코드의 구분자를 세미콜론에서 쉼표로 변경

* feat: 유저 정보를 업데이트 하는 메서드 추가

* refactor: merge 충돌 제거

* feat: 회원 정보 수정 기능 구현

* feat: 회원 정보 수정 단위 테스트 추가

* refactor: save 메서드 없이도 변경감지로 업데이트 적용

---------

Co-authored-by: Hanjaemo <[email protected]>

* refactor: PostService 에러코드 수정 (#83)

* 멤버 삭제 기능 구현 (#81)

* feat: 회원 탈퇴 기능 추가

* feat: 에러 코드 추가

* feat: 멤버 삭제 단위 테스트 추가

* 북마크 기능 구현 완료 (#80)

* feat: BookmarkRepository 구현 완료

* feat: BookmarkRequestDto 구현 완료

* feat: 북마크에 게시글 추가 기능 구현 완료

* feat: BookmarkResponseDto 구현 완료

* feat: 북마크에 추가된 게시글 전체 목록 조회 기능 구현 완료

* feat: 게시글 북마크 해제 기능 구현 완료

* fix: 북마크 조회 기능을 특정 멤버의 북마크 조회 기능으로 수정 및 API 주소 변경

* refactor: 북마크 API 주소 수정

* feat: 북마크 기능 예외처리 구현 완료

* style: 사용하지 않는 북마크 에러코드 삭제

* style: TODO 추가-게시글을 삭제하면 북마크, 댓글은 어떤 상태로 남아야 하는가?

* style: TODO 제거

* test: 북마크 기능, 예외 처리 단위 테스트 구현 및 통과 완료

* refactor: 북마크 삭제 API HTTPStatus 변경

* style: 불필요한 import 삭제

* feat: 게시글 추천 취소 기능 구현 (#78)

* feat: 댓글 추천 취소 기능 구현 (#79)

* Spring Swagger 세팅  (#89)

* feat: Swagger config 설정

* refactor: 시큐리티 url 전체 허용

* feat: swagger 작업

* 댓글 조회시 selectedOptionId 반환 기능 구현 완료 (#86)

* feat: 댓글 조회시 해당 댓글이 작성된 balanceOptionId 반환하게 구현

 해당 기능 구현을 위해 Comment<->BalanceOption 엔티티 사이에 연관 관계를 맺어줬습니다. ERD 업데이트가 필요합니다.

* feat: 댓글 조회시 투표 옵션 통해 작성된 balanceOptionId 반환하게 구현 수정

* refactor: balanceOptionId -> selectedOptionId 필드명 변경

* feat: 투표한 사람만 댓글 작성할 수 있도록 예외 처리 구현(회원 한정)

* feat: 북마크 기능 swagger에 추가 (#91)

* test: 댓글 기능 및 예외처리 테스트 재작성 및 통과 완료 (#95)

---------

Co-authored-by: Junsoo Choi <[email protected]>
Co-authored-by: gywns0417 <[email protected]>
Co-authored-by: king_0417 <[email protected]>
  • Loading branch information
4 people authored Feb 20, 2024
1 parent c44120d commit 0eec673
Showing 1 changed file with 24 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@
import balancetalk.module.comment.dto.CommentResponse;
import balancetalk.module.member.domain.Member;
import balancetalk.module.member.domain.MemberRepository;

import balancetalk.module.post.domain.Post;
import balancetalk.module.post.domain.PostRepository;
import balancetalk.module.vote.domain.Vote;
import balancetalk.module.vote.domain.VoteRepository;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -46,42 +49,57 @@ class CommentServiceTest {
@Mock
private CommentLikeRepository commentLikeRepository;

@Mock
private VoteRepository voteRepository;

@Test
@DisplayName("댓글 생성 성공")
void createComment_Success() {
// given
Long memberId = 1L;
Long postId = 1L;
Member member = Member.builder().id(memberId).build();
Post post = Post.builder().id(postId).options(new ArrayList<>()).build();
CommentCreateRequest request = new CommentCreateRequest("댓글 내용입니다.", memberId, null);
Long selectedOptionId = 1L;
Long voteId = 1L;
Vote vote = Vote.builder().id(voteId).build();
Member member = Member.builder().id(memberId).votes(List.of(vote)).build();
BalanceOption balanceOption = BalanceOption.builder().id(selectedOptionId).build();
Post post = Post.builder().id(postId).options(List.of(balanceOption)).build();
CommentCreateRequest request = new CommentCreateRequest("댓글 내용입니다.", memberId, selectedOptionId);

when(memberRepository.findById(memberId)).thenReturn(Optional.of(member));
when(postRepository.findById(postId)).thenReturn(Optional.of(post));
when(voteRepository.findByMemberIdAndBalanceOption_PostId(memberId, postId)).thenReturn(Optional.of(vote));
when(commentRepository.save(any(Comment.class))).thenAnswer(invocation -> invocation.getArgument(0));

// when
Comment response = commentService.createComment(request, postId);

// then
assertThat(response.getContent()).isEqualTo(request.getContent());
assertThat(response.getMember()).isEqualTo(member);
assertThat(response.getPost()).isEqualTo(post);
verify(commentRepository).save(any(Comment.class));
}

@Test
@DisplayName("게시글에 대한 댓글 조회 성공")
void readCommentsByPostId_Success() {
// given
Long memberId = 1L;
Long postId = 1L;
Member mockMember = Member.builder().id(1L).nickname("회원1").build();
Post mockPost = Post.builder().id(postId).build();
BalanceOption balanceOption = BalanceOption.builder().id(1L).build();
Post mockPost = Post.builder().id(postId).options(List.of(balanceOption)).build();
Vote vote = Vote.builder().id(1L).balanceOption(balanceOption).build();

List<Comment> comments = List.of(
Comment.builder().id(1L).content("댓글 1").member(mockMember).post(mockPost).build(),
Comment.builder().id(2L).content("댓글 2").member(mockMember).post(mockPost).build()
);

when(commentRepository.findByPostId(postId)).thenReturn(comments);
when(postRepository.findById(postId)).thenReturn(Optional.of(mockPost));
when(voteRepository.findByMemberIdAndBalanceOption_PostId(memberId, postId)).thenReturn(Optional.of(vote));

// when
List<CommentResponse> responses = commentService.findAll(postId);
Expand All @@ -105,22 +123,22 @@ void updateComment_Success() {
Comment existingComment = Comment.builder().id(commentId).content("기존 댓글 내용").build();

when(commentRepository.findById(commentId)).thenReturn(Optional.of(existingComment));
when(commentRepository.save(any(Comment.class))).thenAnswer(invocation -> invocation.getArgument(0));

// when
Comment updatedComment = commentService.updateComment(commentId, updatedContent);

// then
assertThat(updatedComment.getContent()).isEqualTo(updatedContent);
verify(commentRepository).save(any(Comment.class));
}

@Test
@DisplayName("댓글 삭제 성공")
void deleteComment_Success() {
// given
Long commentId = 1L;
Comment existingComment = Comment.builder().id(commentId).content("기존 댓글 내용").build();

when(commentRepository.findById(commentId)).thenReturn(Optional.of(existingComment));
doNothing().when(commentRepository).deleteById(commentId);

// when
Expand Down

0 comments on commit 0eec673

Please sign in to comment.