Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[test] : 채팅 관련 알림 생성 단위 테스트 추가
Browse files Browse the repository at this point in the history
dudxo committed Sep 30, 2024
1 parent 309f2ca commit ac3765b
Showing 1 changed file with 86 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -13,6 +13,7 @@
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.SliceImpl;
import org.springframework.test.util.ReflectionTestUtils;
@@ -36,6 +37,7 @@
import com.dnd.gongmuin.member.domain.Member;
import com.dnd.gongmuin.member.exception.MemberErrorCode;
import com.dnd.gongmuin.member.repository.MemberRepository;
import com.dnd.gongmuin.notification.dto.NotificationEvent;
import com.dnd.gongmuin.question_post.domain.QuestionPost;
import com.dnd.gongmuin.question_post.repository.QuestionPostRepository;

@@ -57,6 +59,9 @@ class ChatRoomServiceTest {
@Mock
private QuestionPostRepository questionPostRepository;

@Mock
private ApplicationEventPublisher eventPublisher;

@InjectMocks
private ChatRoomService chatRoomService;

@@ -107,6 +112,37 @@ void createChatRoom() {
);
}

@DisplayName("[요청자가 채팅방을 생성 시 생성 알림이 발행된다.]")
@Test
void createChatRoomWithEventPublish() {
//given
Member inquirer = MemberFixture.member(1L);
Member answerer = MemberFixture.member(2L);
QuestionPost questionPost = QuestionPostFixture.questionPost(inquirer);
CreateChatRoomRequest request = new CreateChatRoomRequest(
questionPost.getId(),
answerer.getId()
);
ChatRoom chatRoom = ChatRoomFixture.chatRoom(questionPost, inquirer, answerer);

given(questionPostRepository.findById(questionPost.getId()))
.willReturn(Optional.of(questionPost));
given(memberRepository.findById(answerer.getId()))
.willReturn(Optional.of(answerer));
given(chatRoomRepository.save(any(ChatRoom.class)))
.willReturn(chatRoom);

//when
ChatRoomDetailResponse response = chatRoomService.createChatRoom(request, inquirer);

//then
assertAll(
() -> assertThat(response.questionPostId()).isEqualTo(request.questionPostId()),
() -> assertThat(response.receiverInfo().memberId()).isEqualTo(request.answererId()),
() -> verify(eventPublisher, times(1)).publishEvent(any(NotificationEvent.class))
);
}

@DisplayName("[요청자의 크레딧이 2000미만이면 채팅방을 생성할 수 없다.]")
@Test
void createChatRoom_fail() {
@@ -229,6 +265,33 @@ void acceptChat() {
);
}

@DisplayName("[답변자가 채팅 요청을 수락할 때 채팅 수락 알림이 발행된다.]")
@Test
void acceptChatWithEventPublish() {
//given
Long chatRoomId = 1L;
Member inquirer = MemberFixture.member(1L);
Member answerer = MemberFixture.member(2L);
int previousCredit = answerer.getCredit();
QuestionPost questionPost = QuestionPostFixture.questionPost(inquirer);
ChatRoom chatRoom = ChatRoomFixture.chatRoom(questionPost, inquirer, answerer);

given(chatRoomRepository.findById(chatRoomId))
.willReturn(Optional.of(chatRoom));

//when
AcceptChatResponse response = chatRoomService.acceptChat(chatRoomId, answerer);

//then
assertAll(
() -> assertThat(response.chatStatus())
.isEqualTo(ChatStatus.ACCEPTED.getLabel()),
() -> assertThat(response.credit())
.isEqualTo(previousCredit + CHAT_REWARD),
() -> verify(eventPublisher, times(1)).publishEvent(any(NotificationEvent.class))
);
}

@DisplayName("[답변자가 채팅 요청을 거절할 수 있다.]")
@Test
void rejectChat() {
@@ -249,4 +312,27 @@ void rejectChat() {
assertThat(response.chatStatus())
.isEqualTo(ChatStatus.REJECTED.getLabel());
}

@DisplayName("[답변자가 채팅 요청을 거절할 때 채팅 거절 알림이 발행된다.]")
@Test
void rejectChatWithEventPublish() {
//given
Long chatRoomId = 1L;
Member inquirer = MemberFixture.member(1L);
Member answerer = MemberFixture.member(2L);
QuestionPost questionPost = QuestionPostFixture.questionPost(inquirer);
ChatRoom chatRoom = ChatRoomFixture.chatRoom(questionPost, inquirer, answerer);

given(chatRoomRepository.findById(chatRoomId))
.willReturn(Optional.of(chatRoom));

//when
RejectChatResponse response = chatRoomService.rejectChat(chatRoomId, answerer);

//then
assertAll(
() -> assertThat(response.chatStatus()).isEqualTo(ChatStatus.REJECTED.getLabel()),
() -> verify(eventPublisher, times(1)).publishEvent(any(NotificationEvent.class))
);
}
}

0 comments on commit ac3765b

Please sign in to comment.