Skip to content

Commit 96a4e18

Browse files
committed
Test/Chore : 유효성 검증 추가 및 테스트 추가
1 parent c118072 commit 96a4e18

File tree

2 files changed

+151
-0
lines changed

2 files changed

+151
-0
lines changed

back/src/main/java/com/back/domain/mentoring/session/entity/ChatMessage.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,32 @@ private ChatMessage(MentoringSession mentoringSession, Member sender, SenderRole
4646
}
4747

4848
public static ChatMessage create(MentoringSession mentoringSession, Member sender, SenderRole senderRole, String content, MessageType type) {
49+
if (mentoringSession == null) {
50+
throw new IllegalArgumentException("MentoringSession은 null일 수 없습니다.");
51+
}
52+
if (content == null || content.isBlank()) {
53+
throw new IllegalArgumentException("Content는 null이거나 비어 있을 수 없습니다.");
54+
}
55+
if (type == null) {
56+
throw new IllegalArgumentException("MessageType은 null일 수 없습니다.");
57+
}
58+
59+
if (type == MessageType.SYSTEM) {
60+
if (sender != null) {
61+
throw new IllegalArgumentException("시스템 메시지의 sender는 null이어야 합니다.");
62+
}
63+
if (senderRole != SenderRole.SYSTEM) {
64+
throw new IllegalArgumentException("시스템 메시지의 senderRole은 SYSTEM이어야 합니다.");
65+
}
66+
} else { // TEXT, IMAGE, FILE
67+
if (sender == null) {
68+
throw new IllegalArgumentException("일반 메시지의 sender는 null일 수 없습니다.");
69+
}
70+
if (senderRole != SenderRole.MENTOR && senderRole != SenderRole.MENTEE) {
71+
throw new IllegalArgumentException("일반 메시지의 senderRole은 MENTOR 또는 MENTEE여야 합니다.");
72+
}
73+
}
74+
4975
return ChatMessage.builder()
5076
.mentoringSession(mentoringSession)
5177
.sender(sender)
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
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

Comments
 (0)