개요
4일차에 구현해야 할 내용은 포스트 조회, 수정에 대한 내용입니다.
목표
•
PostController, PostService를 작성하여 특정 포스트를 조회하는 기능을 구현 합니다.
•
Test에 필요한 Mock 객체를 미리 정의해줍니다.
•
@WithMockUser(인증된 상태) , @WithAnonymousUser(인증되지 않은 상태)를 활용하여 테스트합니다.
포스트 조회 테스트 코드
Controller
성공하는 경우(1가지)
•
테스트에 사용할 PostEntity 클래스를 정의합니다.
•
postService에 조회하는 함수를 호출하면, 정의한 PostEntity를 리턴합니다.
•
/api/v1/posts/1에 GET 요청 시, 결과를 정상적으로 호출하는 200 상태값을 반환합니다.
Service
성공하는 경우(1가지)
•
테스트에 사용할 미리 정의해둔 포스트, 사용자 데이터가 포함된 test 클래스 하나와, UserEntity, PostEntity클래스를 각각 정의합니다.
•
postRepository에 포스트 아이디로 포스트를 조회하는 매서드를 호출하면, 정의한 PostEntity를 리턴합니다.
•
postService에서 test클래스의 포스트 아이디를 통해 포스트를 가져오고 해당 데이터를 PostDto에 넣어줍니다.
•
PostDto의 userName과 test 클래스의 포스트의 작성자의 이름이 동일함을 체크합니다.
포스트 수정 테스트 코드
Controller
성공하는 경우(1가지)
•
포스트 수정 성공
◦
포스트 내용 중 수정해야하는 title, body를 정의해주고, ModifyRequest Mock 객체를 정의해줍니다.
◦
포스트 수정에 사용할 Post 객체도 정의합니다.
◦
postService로 수정요청을 보낼 시, 위에서 정의했던 Post 객체가 return 됩니다.
◦
/api/v1/posts/1에 PUT 요청 시 요청한 결과로 OK, 즉 200이 반환됩니다.
실패하는 경우(4가지)
공통사항
•
포스트 내용 중 수정해야하는 title, body를 정의해주고, ModifyRequest Mock 객체를 정의해줍니다.
•
포스트 수정 실패(1) : 인증 실패
◦
postService로 수정요청을 보낼 시, INVALID_PERMISSION에러가 반환됩니다.
◦
/api/v1/posts/1에 PUT 요청 시 요청한 결과로 권한이 없는, 즉 401이 반환됩니다.
•
포스트 수정 실패(2) : 작성자 불일치
◦
postService로 수정요청을 보낼 시, INVALID_PERMISSION 에러가 반환됩니다.
◦
/api/v1/posts/1에 PUT 요청 시 요청한 결과가 error code INVALID_PERMISSION와 동일합니다.
•
포스트 수정 실패(3) : 데이터베이스 에러
◦
postService로 수정요청을 보낼 시, DATABASE_ERROR 에러가 반환됩니다.
◦
/api/v1/posts/1에 PUT 요청 시 요청한 결과가 error code DATABASE_ERROR와 동일합니다.
Service
실패하는 경우(3가지)
•
수정 실패 : 포스트 존재하지 않음
◦
정의한 mock 객체의 postId로 포스트를 조회할 때, 조회되는 포스트가 없습니다.
◦
assertThrows로 에러를 던져줍니다.
◦
exception이 발생한 에러코드는 POST_NOT_FOUND 값과 동일함을 확인합니다.
•
수정 실패 : 작성자!= 유저
◦
user 2명의 mock 객체를 만들어줍니다.
◦
포스트를 db에서 조회할 때는 User 1이 작성한 포스트를 리턴해줍니다.
◦
사용자를 db에서 조회할 때는 User 2 엔티티를 반환해줍니다.
◦
assertThrows로 에러를 던져줍니다.
◦
exception이 발생한 에러코드는 INVALID_PERMISSION 값과 동일함을 확인합니다.
•
수정 실패 : 유저 존재하지 않음
◦
정의한 mock 객체의 postId로 포스트를 조회할 때, 조회되는 포스트는 있지만, 해당 포스트를 작성한 userName으로 조회되는 사용자는 없습니다.
◦
assertThrows로 에러를 던져줍니다.
◦
exception이 발생한 에러코드는 USERNAME_NOT_FOUND 값과 동일함을 확인합니다.