///////
Search
☀️

5일차 힌트

개요

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

없음