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