개요
5일차에 구현해야 할 내용은 포스트 삭제, 포스트 목록 조회에 대한 내용입니다.
목표
•
PostController, PostService를 작성하여 포스트를 삭제하고 저장된 포스트 내용을 목록으로 조회하는 api를 작성했습니다.
•
@WithMockUser(인증된 상태) , @WithAnonymousUser(인증되지 않은 상태)를 활용하여 테스트합니다.
포스트 삭제 테스트 코드
Controller
성공하는 경우(1가지)
•
포스트 삭제 성공
◦
인증된 상태로 /api/v1/posts/1 로 DELETE 요청 시 성공됨을 반환합니다.
실패하는 경우(4가지)
•
포스트 삭제 실패(1) : 인증 실패
◦
인증되지 않은 상태에서 postService의 삭제 매서드 호출 시, INVALID_PERMISSION 에러를 반환합니다.
◦
/api/v1/posts/1 로 DELETE 요청 시 401 권한 없음을 반환합니다.
•
포스트 삭제 실패(2) : 작성자 불일치
◦
인증된 상태에서 postService의 삭제 매서드 호출 시, INVALID_PERMISSION 에러를 반환합니다.
◦
/api/v1/posts/1 로 DELETE 요청 시 결과INVALID_PERMISSION에러코드와 동일함을 확인합니다.
•
포스트 삭제 실패(3) : 데이터베이스 에러
◦
인증된 상태에서 postService의 삭제 매서드 호출 시, DATABASE_ERROR 에러를 반환합니다.
◦
/api/v1/posts/1 로 DELETE 요청 시 결과DATABASE_ERROR에러코드와 동일함을 확인합니다.
Service
실패하는 경우(3가지)
•
포스트 삭제 실패 : 유저 존재하지 않음
◦
테스트에 사용하기 위해 정의한 객체를 사용합니다.
◦
위의 정의한 객체의 postId로 포스트가 있는지 조회해보면, 해당하는 포스트가 있지만 userName으로 조회된 User 정보는 없습니다.
◦
postService에서 삭제 요청 시, assertThrows로 에러를 던져주고, exception이 발생한 에러코드는 USERNAME_NOT_FOUND 값과 동일함을 확인합니다.
•
포스트 삭제 실패 : 포스트 존재하지 않음
◦
테스트에 사용하기 위해 정의한 객체를 사용합니다.
◦
위의 정의한 객체의 postId로 포스트가 있는지 조회해보면, 해당하는 포스트가 존재하지 않습니다.
◦
postService에서 삭제 요청 시, assertThrows로 에러를 던져주고, exception이 발생한 에러코드는 POST_NOT_FOUND 값과 동일함을 확인합니다.
•
포스트 삭제 실패 : 작성자와 유저 존재하지 않음
◦
테스트에 사용하기 위해 정의한 객체와 PostEntity, UserEntity Mock객체를 정의합니다.
◦
위의 테스트를 위해 정의한 객체의 postId로 포스트가 있는지 조회해보면 PostEntity mock객체가 리턴되고, 미리 정의된 테스트 객체의 userName으로 사용자를 조회하면 UserEntity mock 객체가 리턴됩니다.
◦
PostEntity mock객체의 user를 조회하면 UserEntity mock 객체가 리턴됩니다.
◦
postService에서 삭제 요청 시, assertThrows로 에러를 던져주고, exception이 발생한 에러코드는 INVALID_PERMISSION 값과 동일함을 확인합니다.
포스트 목록 조회 테스트 코드
Controller
성공하는 경우(1가지)
•
포스트 목록 조회 성공
◦
/api/v1/posts요청 시 page, size, sort 파라미터 값도 같이 넘겨준 뒤, 202 성공의 결과를 반환합니다.
◦
ArgumentCaptor, verify를 활용하여 파라미터로 넘어온 값들을 검증할 수 있도록 선언합니다.
◦
assertEquals를 활용하여 요청 시 보냈던 페이지 갯수와 사이즈를 검증하고, sort 기준도 검증합니다.
Service
•
없음