Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Test] TalkRoom API 테스트 수정 #32

Merged
merged 1 commit into from
Mar 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions src/main/java/com/jisungin/api/talkroom/TalkRoomController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.jisungin.api.talkroom;

import com.jisungin.api.ApiResponse;
import com.jisungin.api.oauth.Auth;
import com.jisungin.api.oauth.AuthContext;
import com.jisungin.api.talkroom.request.TalkRoomCreateRequest;
import com.jisungin.api.talkroom.request.TalkRoomEditRequest;
import com.jisungin.api.talkroom.request.TalkRoomSearchRequest;
Expand All @@ -27,8 +29,9 @@ public class TalkRoomController {

// TODO. 회원 도메인이 개발되면 변경 예정
@PostMapping("/talk-rooms")
public ApiResponse<TalkRoomResponse> createTalkRoom(@Valid @RequestBody TalkRoomCreateRequest request) {
return ApiResponse.ok(talkRoomService.createTalkRoom(request.toServiceRequest(), "[email protected]"));
public ApiResponse<TalkRoomResponse> createTalkRoom(@Valid @RequestBody TalkRoomCreateRequest request, @Auth
AuthContext authContext) {
return ApiResponse.ok(talkRoomService.createTalkRoom(request.toServiceRequest(), authContext.getUserId()));
}

@GetMapping("/talk-rooms")
Expand All @@ -37,8 +40,9 @@ public ApiResponse<PageResponse<TalkRoomQueryResponse>> getTalkRooms(@ModelAttri
}

@PatchMapping("/talk-rooms")
public ApiResponse<TalkRoomResponse> editTalkRoom(@Valid @RequestBody TalkRoomEditRequest request) {
return ApiResponse.ok(talkRoomService.editTalkRoom(request.toServiceRequest(), "[email protected]"));
public ApiResponse<TalkRoomResponse> editTalkRoom(@Valid @RequestBody TalkRoomEditRequest request,
@Auth AuthContext authContext) {
return ApiResponse.ok(talkRoomService.editTalkRoom(request.toServiceRequest(), authContext.getUserId()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,38 +32,35 @@ public class TalkRoomService {
private final BookRepository bookRepository;
private final UserRepository userRepository;

// TODO. 토큰 정보를 가져오는 기능을 구현하면 변경할 예정
@Transactional
public TalkRoomResponse createTalkRoom(TalkRoomCreateServiceRequest request, String userEmail) {
// User user = userRepository.findById(userId)
// .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));

User user = userRepository.findByName(userEmail)
public TalkRoomResponse createTalkRoom(TalkRoomCreateServiceRequest request, Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));

Book book = bookRepository.findById(request.getBookIsbn())
.orElseThrow(() -> new BusinessException(ErrorCode.BOOK_NOT_FOUND));

TalkRoom talkRoom = TalkRoom.create(request, book, user);
TalkRoom talkRoom = TalkRoom.create(request.getTitle(), request.getContent(), book, user);
talkRoomRepository.save(talkRoom);

List<ReadingStatus> readingStatus = ReadingStatus.createReadingStatus(request.getReadingStatus());

readingStatus.stream().map(status -> TalkRoomRole.roleCreate(talkRoom, status))
.forEach(talkRoomRoleRepository::save);

return TalkRoomResponse.of(user.getName(), talkRoom, readingStatus, book.getImageUrl(), book.getTitle());
return TalkRoomResponse.of(user.getName(), talkRoom.getTitle(), talkRoom.getContent(), readingStatus,
book.getImageUrl(), book.getTitle());
}

public PageResponse<TalkRoomQueryResponse> getTalkRooms(TalkRoomSearchServiceRequest search) {
return talkRoomRepository.getTalkRooms(search);
}

@Transactional
public TalkRoomResponse editTalkRoom(TalkRoomEditServiceRequest request, String userEmail) {
User user = userRepository.findByName(userEmail)
public TalkRoomResponse editTalkRoom(TalkRoomEditServiceRequest request, Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));

TalkRoom talkRoom = talkRoomRepository.findByIdWithUserAndBook(request.getId());

if (!talkRoom.isTalkRoomOwner(user.getId())) {
Expand All @@ -79,8 +76,8 @@ public TalkRoomResponse editTalkRoom(TalkRoomEditServiceRequest request, String
readingStatus.stream().map(status -> TalkRoomRole.roleCreate(talkRoom, status))
.forEach(talkRoomRoleRepository::save);

return TalkRoomResponse.of(user.getName(), talkRoom, readingStatus, talkRoom.getBook().getImageUrl(),
talkRoom.getBook().getTitle());
return TalkRoomResponse.of(user.getName(), talkRoom.getTitle(), talkRoom.getContent(), readingStatus,
talkRoom.getBook().getImageUrl(), talkRoom.getBook().getTitle());
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.jisungin.application.talkroom.response;

import com.jisungin.domain.ReadingStatus;
import com.jisungin.domain.talkroom.TalkRoom;
import com.querydsl.core.annotations.QueryProjection;
import java.util.List;
import lombok.Builder;
Expand Down Expand Up @@ -31,12 +30,13 @@ public TalkRoomResponse(String userName, String title, String content, String bo
this.bookImage = bookImage;
}

public static TalkRoomResponse of(String userName, TalkRoom talkRoom, List<ReadingStatus> readingStatuses,
public static TalkRoomResponse of(String userName, String title, String content,
List<ReadingStatus> readingStatuses,
String bookImage, String bookName) {
return TalkRoomResponse.builder()
.userName(userName)
.title(talkRoom.getTitle())
.content(talkRoom.getContent())
.title(title)
.content(content)
.bookName(bookName)
.readingStatuses(readingStatuses)
.bookImage(bookImage)
Expand Down
7 changes: 3 additions & 4 deletions src/main/java/com/jisungin/domain/talkroom/TalkRoom.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.jisungin.domain.talkroom;

import com.jisungin.application.talkroom.request.TalkRoomCreateServiceRequest;
import com.jisungin.application.talkroom.request.TalkRoomEditServiceRequest;
import com.jisungin.domain.BaseEntity;
import com.jisungin.domain.book.Book;
Expand Down Expand Up @@ -52,12 +51,12 @@ private TalkRoom(Book book, User user, String title, String content) {
this.content = content;
}

public static TalkRoom create(TalkRoomCreateServiceRequest request, Book book, User user) {
public static TalkRoom create(String title, String content, Book book, User user) {
return TalkRoom.builder()
.book(book)
.user(user)
.title(request.getTitle())
.content(request.getContent())
.title(title)
.content(content)
.build();
}

Expand Down
34 changes: 34 additions & 0 deletions src/test/java/com/jisungin/ControllerTestSupport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.jisungin;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.jisungin.api.comment.CommentController;
import com.jisungin.api.oauth.AuthContext;
import com.jisungin.api.talkroom.TalkRoomController;
import com.jisungin.application.comment.CommentService;
import com.jisungin.application.talkroom.TalkRoomService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;

@WebMvcTest(controllers = {
TalkRoomController.class,
CommentController.class
})
Comment on lines +14 to +17
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

추가되는 컨트롤러 테스트는 해당 위치에 추가하면 되는 건가요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네네!
맞습니다!!

public abstract class ControllerTestSupport {

@Autowired
protected MockMvc mockMvc;

@Autowired
protected ObjectMapper objectMapper;

@MockBean
protected TalkRoomService talkRoomService;

@MockBean
protected CommentService commentService;

@MockBean
protected AuthContext authContext;
}
AHNYUNKI marked this conversation as resolved.
Show resolved Hide resolved
7 changes: 7 additions & 0 deletions src/test/java/com/jisungin/ServiceTestSupport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.jisungin;

import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public abstract class ServiceTestSupport {
}
21 changes: 2 additions & 19 deletions src/test/java/com/jisungin/api/comment/CommentControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,12 @@
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.jisungin.ControllerTestSupport;
import com.jisungin.api.comment.request.CommentCreateRequest;
import com.jisungin.application.comment.CommentService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;

@SpringBootTest
@AutoConfigureMockMvc
class CommentControllerTest {

@MockBean
CommentService commentService;

@Autowired
MockMvc mockMvc;

@Autowired
ObjectMapper objectMapper;
class CommentControllerTest extends ControllerTestSupport {

@Test
@DisplayName("유저가 토크방에 자신의 의견을 작성한다.")
Expand Down
Loading
Loading