1+ package com .back .domain .mentoring .session .entity ;
2+
3+
4+ import com .back .domain .member .member .entity .Member ;
5+ import com .back .fixture .MemberFixture ;
6+ import com .back .fixture .mentoring .MentoringSessionFixture ;
7+ import org .junit .jupiter .api .DisplayName ;
8+ import org .junit .jupiter .api .Test ;
9+
10+ import java .time .LocalDateTime ;
11+
12+ import static org .assertj .core .api .Assertions .assertThat ;
13+
14+ import org .junit .jupiter .api .Nested ;
15+
16+ import static org .junit .jupiter .api .Assertions .assertThrows ;
17+
18+ class ChatMessageTest {
19+ @ Test
20+ @ DisplayName ("ChatMessage 생성 테스트" )
21+ void createChatMessageTest (){
22+ // given
23+ MentoringSession session = MentoringSessionFixture .createDefault ();
24+ Member sender = MemberFixture .createDefault ();
25+ String content = "Hello world" ;
26+ SenderRole senderRole = SenderRole .MENTOR ;
27+ MessageType type = MessageType .TEXT ;
28+
29+ // when
30+ ChatMessage message = ChatMessage .create (session , sender , senderRole , content , type );
31+
32+ // then
33+ assertThat (message .getMentoringSession ()).isEqualTo (session );
34+ assertThat (message .getSender ()).isEqualTo (sender );
35+ assertThat (message .getSenderRole ()).isEqualTo (senderRole );
36+ assertThat (message .getContent ()).isEqualTo (content );
37+ assertThat (message .getType ()).isEqualTo (type );
38+ assertThat (message .getTimestamp ()).isNotNull ();
39+ assertThat (message .getTimestamp ()).isBeforeOrEqualTo (LocalDateTime .now ());
40+ }
41+
42+ @ Test
43+ @ DisplayName ("시스템 메시지 생성 테스트" )
44+ void createSystemMessageTest () {
45+ // given
46+ MentoringSession session = MentoringSessionFixture .createDefault ();
47+ String content = "멘토링 세션이 시작되었습니다." ;
48+ MessageType type = MessageType .SYSTEM ;
49+ SenderRole senderRole = SenderRole .SYSTEM ;
50+ Member sender = null ; // 시스템 메시지는 발신자가 없을 수 있습니다.
51+
52+ // when
53+ ChatMessage message = ChatMessage .create (session , sender , senderRole , content , type );
54+
55+ // then
56+ assertThat (message .getMentoringSession ()).isEqualTo (session );
57+ assertThat (message .getSender ()).isNull ();
58+ assertThat (message .getSenderRole ()).isEqualTo (senderRole );
59+ assertThat (message .getContent ()).isEqualTo (content );
60+ assertThat (message .getType ()).isEqualTo (type );
61+ assertThat (message .getTimestamp ()).isNotNull ();
62+ assertThat (message .getTimestamp ()).isBeforeOrEqualTo (LocalDateTime .now ());
63+ }
64+
65+ @ Nested
66+ @ DisplayName ("ChatMessage 생성 유효성 검증" )
67+ class ValidationTests {
68+
69+ @ Test
70+ @ DisplayName ("MentoringSession이 null이면 예외가 발생한다" )
71+ void createWithNullSession_shouldThrowException () {
72+ assertThrows (IllegalArgumentException .class , () ->
73+ ChatMessage .create (null , MemberFixture .createDefault (), SenderRole .MENTOR , "message" , MessageType .TEXT ));
74+ }
75+
76+ @ Test
77+ @ DisplayName ("Content가 null이면 예외가 발생한다" )
78+ void createWithNullContent_shouldThrowException () {
79+ assertThrows (IllegalArgumentException .class , () ->
80+ ChatMessage .create (MentoringSessionFixture .createDefault (), MemberFixture .createDefault (), SenderRole .MENTOR , null , MessageType .TEXT ));
81+ }
82+
83+ @ Test
84+ @ DisplayName ("Content가 비어있으면 예외가 발생한다" )
85+ void createWithBlankContent_shouldThrowException () {
86+ assertThrows (IllegalArgumentException .class , () ->
87+ ChatMessage .create (MentoringSessionFixture .createDefault (), MemberFixture .createDefault (), SenderRole .MENTOR , " " , MessageType .TEXT ));
88+ }
89+
90+ @ Test
91+ @ DisplayName ("MessageType이 null이면 예외가 발생한다" )
92+ void createWithNullType_shouldThrowException () {
93+ assertThrows (IllegalArgumentException .class , () ->
94+ ChatMessage .create (MentoringSessionFixture .createDefault (), MemberFixture .createDefault (), SenderRole .MENTOR , "message" , null ));
95+ }
96+
97+ @ Test
98+ @ DisplayName ("시스템 메시지에 sender가 있으면 예외가 발생한다" )
99+ void createSystemMessageWithSender_shouldThrowException () {
100+ assertThrows (IllegalArgumentException .class , () ->
101+ ChatMessage .create (MentoringSessionFixture .createDefault (), MemberFixture .createDefault (), SenderRole .SYSTEM , "system message" , MessageType .SYSTEM ));
102+ }
103+
104+ @ Test
105+ @ DisplayName ("시스템 메시지의 senderRole이 SYSTEM이 아니면 예외가 발생한다" )
106+ void createSystemMessageWithInvalidRole_shouldThrowException () {
107+ assertThrows (IllegalArgumentException .class , () ->
108+ ChatMessage .create (MentoringSessionFixture .createDefault (), null , SenderRole .MENTOR , "system message" , MessageType .SYSTEM ));
109+ }
110+
111+ @ Test
112+ @ DisplayName ("일반 메시지에 sender가 없으면 예외가 발생한다" )
113+ void createUserMessageWithNullSender_shouldThrowException () {
114+ assertThrows (IllegalArgumentException .class , () ->
115+ ChatMessage .create (MentoringSessionFixture .createDefault (), null , SenderRole .MENTOR , "user message" , MessageType .TEXT ));
116+ }
117+
118+ @ Test
119+ @ DisplayName ("일반 메시지의 senderRole이 MENTOR나 MENTEE가 아니면 예외가 발생한다" )
120+ void createUserMessageWithInvalidRole_shouldThrowException () {
121+ assertThrows (IllegalArgumentException .class , () ->
122+ ChatMessage .create (MentoringSessionFixture .createDefault (), MemberFixture .createDefault (), SenderRole .SYSTEM , "user message" , MessageType .TEXT ));
123+ }
124+ }
125+ }
0 commit comments