///////
Search
☀️

4일차 힌트

개요

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의 userNametest 클래스의 포스트의 작성자의 이름이 동일함을 체크합니다.

포스트 수정 테스트 코드

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 값과 동일함을 확인합니다.