배 지원 closed issue #16: Comment, Like, My Feed, Alarm TestCase at 배 지원 / finalproject-baejiwon

배 지원
2023-01-12T07:13:36Z

Comment, Like, My Feed, Alarm TestCase Add

1. 목표

1. controller / 2. service로 나눠서 테스트를 진행해야 함.

1. 성공, 2. 실패 테스트 케이스를 모두 통과하는 실제 코드 작성.

Exception 처리는 enum Error코드에 작성 후 호출 해서 사용

실패의 경우 enum값의 errorCode로처리하기

when(어떤 상황일 때)를 각각 설계해보고, Test case에 따라 예상되는 결과값을 작성해주기

Controller, Service 두 클래스의 테스트 코드 작성하기

2. 댓글 작성

종류 | 성공 | 실패

Controller

댓글 작성 성공
- /api/v1/posts/1/comments에 POST요청 시, 성공 200를 리턴합니다.

1. 댓글 작성 실패(1) - 로그인 하지 않은 경우
- /api/v1/posts/1/comments에 POST요청 시, HttpStatus.UNAUTHORIZED 401을 리턴합니다.

2. 댓글 작성 실패(2) - 게시물이 존재하지 않는 경우
- /api/v1/posts/1/comments에 POST요청 시, 미리 정의한 ERROR CODE POST_NOT_FOUND 를반환합니다.

Service | 없음 | 없음

3. 댓글 수정

종류 | 성공 | 실패

Controller

댓글 수정 성공
- 테스트에 사용할 데이터들을 준비합니다. CommentModifyRequest, UserEntity, PostEntity, CommentEntity
- postService에 수정 요청을 보내면 미리 정의한 CommentEntity 를 리턴합니다.
- /api/v1/posts/1/comments/1에 PUT요청 시, 정상적으로 수행하며 202를 리턴합니다.

댓글 수정 실패(1) - 인증 실패
- 인증되지 않은 상태이며, CommentModifyRequest를 정의해줍니다.
- postService에 수정 요청을 보내면 INVALID_PERMISSION 를 리턴합니다.
- /api/v1/posts/1/comments/1에 PUT요청 시, 권한없음 401을 반환합니다.

댓글 수정 실패(2) - 작성자 불일치
- 인증된 상태이며, CommentModifyRequest를 정의해줍니다.
- postService에 수정 요청을 보내면 INVALID_PERMISSION 를 리턴합니다.
- /api/v1/posts/1/comments/1 에PUT요청 시, 결과 상태값이 미리 정의한 INVALID_PERMISSION 값과 일치함을 확인합니다.

댓글 수정 실패(3) - 데이터베이스 에러
- 인증된 상태이며, CommentModifyRequest를 정의해줍니다.
- postService에 수정 요청을 보내면 DATABASE_ERROR 를 리턴합니다.
- /api/v1/posts/1/comments/1 에PUT요청 시, 결과 상태값이 미리 정의한 DATABASE_ERROR 값과 일치함을 확인합니다.

Service

없음

댓글 수정 실패(1) - 포스트 존재하지 않음
- 정의한 mock 객체의 commentId로 댓글을 조회할 때, 조회되는 댓글이 없습니다.
- assertThrows로 에러를 던져줍니다.
- exception이 발생한 에러코드는 *POST_NOT_FOUND* 값과 동일함을 확인합니다.

댓글 수정 실패(2) - 작성자!=유저
- user 2명의 mock 객체를 만들어줍니다.
- 댓글을 db에서 조회할 때는 User 1이 작성한 댓글을 리턴해줍니다.
- 사용자를 db에서 조회할 때는 User2 엔티티를 반환해줍니다.
- assertThrows로 에러를 던져줍니다.
- exception이 발생한 에러코드는 INVALID_PERMISSION 값과 동일함을 확인합니다.

댓글 수정 실패(3) - 유저 존재하지 않음
- 정의한 mock 객체의 commentId로 댓글을 조회할 때, 조회되는 댓글은 있지만, 해당 댓글을 작성한 userName으로 조회되는 사용자는 없습니다.
- assertThrows로 에러를 던져줍니다.
- exception이 발생한 에러코드는 USERNAME_NOT_FOUND 값과 동일함을 확인합니다.

4. 댓글 삭제

종류 | 성공 | 실패

Controller

댓글 삭제 성공
- /api/v1/posts/1/comments/1에 DELETE 요청 시, 정상적으로 수행하며 202를 리턴합니다.

댓글 삭제 실패(1) - 인증 실패
- 인증되지 않은 상태이며, postService에 삭제 요청을 보내면 INVALID_PERMISSION 에러를 던집니다.
- /api/v1/posts/1/comments/1에 DELETE 요청 시, 권한없음 401을 반환합니다.

댓글 삭제 실패(2) - 작성자 불일치
- 인증된 상태이며, postService에 삭제 요청을 보내면 INVALID_PERMISSION 를 리턴합니다.
- /api/v1/posts/1/comments/1에 DELETE 요청 시, 결과 상태값이 미리 정의한 INVALID_PERMISSION 값과 일치함을 확인합니다.

댓글 삭제 실패(3) - 데이터베이스 에러
- 인증된 상태이며, postService에 삭제 요청을 보내면 DATABASE_ERROR 를 리턴합니다.
- /api/v1/posts/1/comments/1에 DELETE 요청 시, 결과 상태값이 미리 정의한 DATABASE_ERROR 값과 일치함을 확인합니다.

Service

없음

댓글 삭제 실패(1) - 유저 존재하지 않음
- 테스트에 사용하기 위해 정의한 객체를 사용합니다.
- 위의 정의한 객체의 commentId로 댓글이 있는지 조회해보면, 해당하는 댓글은 있지만 userName으로 조회된 User 정보는 없습니다.
- postService에서 삭제 요청 시, assertThrows로 에러를 던져주고, exception이 발생한 에러코드는 USERNAME_NOT_FOUND 값과 동일함을 확인합니다.

댓글 삭제 실패(2) - 댓글이 존재하지 않음
- 테스트에 사용하기 위해 정의한 객체를 사용합니다.
- 위의 정의한 객체의 commentId로 댓글이 있는지 조회해보면, 해당하는 댓글이 존재하지 않습니다.
- postService에서 삭제 요청 시, assertThrows로 에러를 던져주고, exception이 발생한 에러코드는 COMMENT_NOT_FOUND 값과 동일함을 확인합니다.

5. 좋아요

종류 | 성공 | 실패

Controller

좋아요 누르기 성공
- /api/v1/posts/1/likes로 POST 요청 시, 성공 202를 리턴합니다.

1. 좋아요 누르기 실패(1) - 로그인 하지 않은 경우
- /api/v1/posts/1/likes로 POST 요청 시, 권한없음 401를 리턴합니다.

2. 좋아요 누르기(2) - 게시물이 존재하지 않는 경우
- /api/v1/posts/1/likes로 POST 요청 시, 포스트가 존재하지 않기에 404를 리턴합니다.

Service | 없음 | 없음

6. 알림기능

종류 | 성공 | 실패

Controller

알림 목록 조회 성공
- - userService에 알림 목록을 가져오는 매서드 호출 시, Page.*empty*()를 리턴합니다.
- /api/v1/users/alarm에 GET 요청 시, 정상적으로 목록을 가져오기에 202를 리턴합니다.

알람 목록 조회 실패 - 로그인 하지 않은 경우
- userService에 알림 목록을 가져오는 매서드 호출 시, Page.*empty*()를 리턴합니다.
- /api/v1/users/alarm에 GET 요청 시, 로그인 하지 않았기 때문에 권한 없음 401 오류를 리턴합니다.

Service | 없음 | 없음

7. 마이 피드

종류 | 성공 | 실패

Controller

마이피드 조회 성공
- postService에서 마이피드 매서드 호출 시, Page.empty()를 리턴해줍니다.
- /api/v1/posts/my에 GET 요청 시, 성공 202를 리턴합니다.

마이피드 조회 실패 - 로그인 하지 않은 경우
- postService에서 마이피드 매서드 호출 시, Page.empty()를 리턴해줍니다.
- /api/v1/posts/my에 GET 요청 시, HttpStatus.UNAUTHORIZED 401을 리턴합니다.

Service | 없음 | 없음