Skip to content

Commit 3978ee5

Browse files
committed
Test : 테스트 추가
1 parent 991ece7 commit 3978ee5

File tree

2 files changed

+238
-0
lines changed

2 files changed

+238
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.back.domain.mentoring.session.service;
2+
3+
import com.back.domain.member.member.entity.Member;
4+
import com.back.domain.member.mentee.entity.Mentee;
5+
import com.back.domain.mentoring.reservation.entity.Reservation;
6+
import com.back.domain.mentoring.session.dto.ChatMessageRequest;
7+
import com.back.domain.mentoring.session.dto.ChatMessageResponse;
8+
import com.back.domain.mentoring.session.entity.ChatMessage;
9+
import com.back.domain.mentoring.session.entity.MentoringSession;
10+
import com.back.domain.mentoring.session.entity.MessageType;
11+
import com.back.domain.mentoring.session.repository.ChatMessageRepository;
12+
import com.back.fixture.MemberFixture;
13+
import com.back.fixture.MenteeFixture;
14+
import com.back.fixture.mentoring.MentoringSessionFixture;
15+
import com.back.fixture.mentoring.ReservationFixture;
16+
import org.junit.jupiter.api.BeforeEach;
17+
import org.junit.jupiter.api.DisplayName;
18+
import org.junit.jupiter.api.Test;
19+
import org.junit.jupiter.api.extension.ExtendWith;
20+
import org.mockito.InjectMocks;
21+
import org.mockito.Mock;
22+
import org.mockito.junit.jupiter.MockitoExtension;
23+
24+
import static org.assertj.core.api.Assertions.assertThat;
25+
import static org.mockito.ArgumentMatchers.any;
26+
import static org.mockito.BDDMockito.given;
27+
import static org.mockito.Mockito.verify;
28+
29+
@ExtendWith(MockitoExtension.class)
30+
class ChatMessageServiceTest {
31+
32+
@Mock
33+
private ChatMessageRepository chatMessageRepository;
34+
35+
@InjectMocks
36+
private ChatMessageService chatMessageService;
37+
38+
private Member menteeMember;
39+
private MentoringSession mentoringSession;
40+
41+
@BeforeEach
42+
void setUp() {
43+
// Reservation에 포함된 실제 멘티 멤버를 가져와서 사용
44+
Reservation reservation = ReservationFixture.createDefault();
45+
menteeMember = reservation.getMentee().getMember();
46+
mentoringSession = MentoringSessionFixture.create(reservation);
47+
}
48+
49+
@Test
50+
@DisplayName("채팅 메시지를 생성하고 저장한다.")
51+
void createAndSaveChatMessage() {
52+
// given
53+
String content = "안녕하세요!";
54+
MessageType messageType = MessageType.TEXT;
55+
ChatMessage chatMessage = ChatMessage.create(mentoringSession, menteeMember, menteeMember.getRole() == Member.Role.MENTOR ? com.back.domain.mentoring.session.entity.SenderRole.MENTOR : com.back.domain.mentoring.session.entity.SenderRole.MENTEE, content, messageType);
56+
given(chatMessageRepository.save(any(ChatMessage.class))).willReturn(chatMessage);
57+
58+
// when
59+
ChatMessage result = chatMessageService.create(mentoringSession, menteeMember, content, messageType);
60+
61+
// then
62+
assertThat(result).isNotNull();
63+
assertThat(result.getContent()).isEqualTo(content);
64+
assertThat(result.getSender()).isEqualTo(menteeMember);
65+
verify(chatMessageRepository).save(any(ChatMessage.class));
66+
}
67+
68+
@Test
69+
@DisplayName("채팅 메시지를 저장하고 처리하여 응답 DTO를 반환한다.")
70+
void saveAndProcessMessage_returnsResponseDTO() {
71+
// given
72+
ChatMessageRequest request = new ChatMessageRequest(MessageType.TEXT, "테스트 메시지");
73+
ChatMessage chatMessage = ChatMessage.create(mentoringSession, menteeMember, menteeMember.getRole() == Member.Role.MENTOR ? com.back.domain.mentoring.session.entity.SenderRole.MENTOR : com.back.domain.mentoring.session.entity.SenderRole.MENTEE, request.content(), request.type());
74+
75+
given(chatMessageRepository.save(any(ChatMessage.class))).willReturn(chatMessage);
76+
77+
// when
78+
ChatMessageResponse response = chatMessageService.saveAndProcessMessage(menteeMember, mentoringSession, request);
79+
80+
// then
81+
assertThat(response).isNotNull();
82+
assertThat(response.senderName()).isEqualTo(menteeMember.getNickname());
83+
assertThat(response.content()).isEqualTo(request.content());
84+
assertThat(response.createdAt()).isEqualTo(chatMessage.getTimestamp());
85+
}
86+
}
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package com.back.domain.mentoring.session.service;
2+
3+
import com.back.domain.member.member.entity.Member;
4+
import com.back.domain.member.member.service.MemberStorage;
5+
import com.back.domain.member.mentee.entity.Mentee;
6+
import com.back.domain.member.mentor.entity.Mentor;
7+
import com.back.domain.mentoring.mentoring.entity.Mentoring;
8+
import com.back.domain.mentoring.reservation.constant.ReservationStatus;
9+
import com.back.domain.mentoring.reservation.entity.Reservation;
10+
import com.back.domain.mentoring.session.dto.*;
11+
import com.back.domain.mentoring.session.entity.MentoringSession;
12+
import com.back.domain.mentoring.slot.constant.MentorSlotStatus;
13+
import com.back.domain.mentoring.slot.entity.MentorSlot;
14+
import com.back.fixture.MemberFixture;
15+
import com.back.fixture.MenteeFixture;
16+
import com.back.fixture.MentorFixture;
17+
import com.back.fixture.mentoring.MentoringFixture;
18+
import com.back.fixture.mentoring.MentoringSessionFixture;
19+
import com.back.fixture.mentoring.MentorSlotFixture;
20+
import com.back.fixture.mentoring.ReservationFixture;
21+
import org.junit.jupiter.api.BeforeEach;
22+
import org.junit.jupiter.api.DisplayName;
23+
import org.junit.jupiter.api.Nested;
24+
import org.junit.jupiter.api.Test;
25+
import org.junit.jupiter.api.extension.ExtendWith;
26+
import org.mockito.InjectMocks;
27+
import org.mockito.Mock;
28+
import org.mockito.junit.jupiter.MockitoExtension;
29+
30+
import static org.assertj.core.api.Assertions.assertThat;
31+
import static org.mockito.ArgumentMatchers.any;
32+
import static org.mockito.BDDMockito.given;
33+
import static org.mockito.Mockito.verify;
34+
35+
@ExtendWith(MockitoExtension.class)
36+
class MentoringSessionManagerTest {
37+
38+
@Mock
39+
private MentoringSessionService mentoringSessionService;
40+
41+
@Mock
42+
private MemberStorage memberStorage;
43+
44+
@InjectMocks
45+
private MentoringSessionManager mentoringSessionManager;
46+
47+
private Member mentorMember;
48+
private Mentor mentor;
49+
private Mentoring mentoring;
50+
private MentorSlot mentorSlot;
51+
private Reservation reservation;
52+
private MentoringSession mentoringSession;
53+
54+
@BeforeEach
55+
void setUp() {
56+
// 테스트에 사용될 객체들을 فxture를 통해 생성
57+
reservation = ReservationFixture.createDefault();
58+
mentor = reservation.getMentor();
59+
mentorMember = mentor.getMember();
60+
mentoring = reservation.getMentoring();
61+
mentorSlot = reservation.getMentorSlot();
62+
mentoringSession = MentoringSessionFixture.create(reservation);
63+
}
64+
65+
@Nested
66+
@DisplayName("세션 조회 테스트")
67+
class GetSessionTest {
68+
69+
@Test
70+
@DisplayName("세션 URL을 성공적으로 조회한다.")
71+
void getSessionUrl_success() {
72+
// given
73+
Long sessionId = 1L;
74+
given(mentoringSessionService.getMentoringSession(sessionId)).willReturn(mentoringSession);
75+
76+
// when
77+
GetSessionUrlResponse response = mentoringSessionManager.getSessionUrl(sessionId);
78+
79+
// then
80+
assertThat(response.sessionUrl()).isEqualTo(mentoringSession.getSessionUrl());
81+
}
82+
83+
@Test
84+
@DisplayName("세션 상세 정보를 성공적으로 조회한다.")
85+
void getSessionDetail_success() {
86+
// given
87+
Long sessionId = 1L;
88+
given(mentoringSessionService.getMentoringSession(sessionId)).willReturn(mentoringSession);
89+
90+
// when
91+
GetSessionInfoResponse response = mentoringSessionManager.getSessionDetail(sessionId);
92+
93+
// then
94+
assertThat(response.mentoringTitle()).isEqualTo(mentoring.getTitle());
95+
assertThat(response.mentorName()).isEqualTo(mentor.getMember().getNickname());
96+
assertThat(response.menteeName()).isEqualTo(reservation.getMentee().getMember().getNickname());
97+
assertThat(response.sessionStatus()).isEqualTo(mentoringSession.getStatus().toString());
98+
}
99+
}
100+
101+
@Nested
102+
@DisplayName("세션 관리 테스트")
103+
class ManageSessionTest {
104+
105+
@Test
106+
@DisplayName("멘토가 세션을 성공적으로 연다.")
107+
void openSession_success() {
108+
// given
109+
Long sessionId = 1L;
110+
OpenSessionRequest request = new OpenSessionRequest(sessionId);
111+
112+
given(memberStorage.findMentorByMember(mentorMember)).willReturn(mentor);
113+
given(mentoringSessionService.getMentoringSession(sessionId)).willReturn(mentoringSession);
114+
// openSession은 상태만 변경하므로, 변경된 자기 자신을 반환하도록 설정
115+
given(mentoringSessionService.save(any(MentoringSession.class))).willAnswer(invocation -> invocation.getArgument(0));
116+
117+
// when
118+
OpenSessionResponse response = mentoringSessionManager.openSession(mentorMember, request);
119+
120+
// then
121+
// openSession 후의 상태를 검증
122+
assertThat(response.status()).isEqualTo("OPEN");
123+
verify(mentoringSessionService).save(any(MentoringSession.class));
124+
}
125+
126+
@Test
127+
@DisplayName("멘토가 세션을 성공적으로 닫는다.")
128+
void closeSession_success() {
129+
// given
130+
Long sessionId = 1L;
131+
DeleteSessionRequest request = new DeleteSessionRequest(sessionId);
132+
// 세션을 미리 OPEN 상태로 만듦
133+
mentoringSession.openSession(mentor);
134+
135+
given(memberStorage.findMentorByMember(mentorMember)).willReturn(mentor);
136+
given(mentoringSessionService.getMentoringSession(sessionId)).willReturn(mentoringSession);
137+
// closeSession은 상태만 변경하므로, 변경된 자기 자신을 반환하도록 설정
138+
given(mentoringSessionService.save(any(MentoringSession.class))).willAnswer(invocation -> invocation.getArgument(0));
139+
140+
// when
141+
CloseSessionResponse response = mentoringSessionManager.closeSession(mentorMember, request);
142+
143+
// then
144+
// closeSession 후의 상태를 검증
145+
assertThat(response.status()).isEqualTo("CLOSED");
146+
// reservation과 mentorSlot의 상태가 COMPLETED로 변경되었는지 검증
147+
assertThat(reservation.getStatus()).isEqualTo(ReservationStatus.COMPLETED);
148+
assertThat(mentorSlot.getStatus()).isEqualTo(MentorSlotStatus.COMPLETED);
149+
verify(mentoringSessionService).save(any(MentoringSession.class));
150+
}
151+
}
152+
}

0 commit comments

Comments
 (0)