feat(user-creator-chat): WebSocket 메시지 계약을 추가한다

This commit is contained in:
2026-06-18 17:06:25 +09:00
parent d506ad9c39
commit fefd62c63a
2 changed files with 99 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
package kr.co.vividnext.sodalive.v2.usercreatorchat.websocket
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
class UserCreatorChatWebSocketMessageTest {
private val objectMapper = jacksonObjectMapper()
@Test
@DisplayName("WebSocket message type enum은 클라이언트 요청과 서버 응답 타입을 모두 가진다")
fun shouldDefineAllWebSocketMessageTypes() {
val names = UserCreatorChatWebSocketMessageType.values().map { it.name }
assertEquals(
listOf(
"JOIN_ROOM",
"SEND_TEXT",
"LEAVE_ROOM",
"PING",
"JOINED",
"MESSAGE",
"SEND_ACK",
"ERROR",
"PONG"
),
names,
"Expected WebSocket message types to match the protocol contract"
)
}
@Test
@DisplayName("SEND_TEXT JSON envelope를 JsonNode payload로 역직렬화한다")
fun shouldDeserializeSendTextEnvelopeWithJsonNodePayload() {
val json = """
{
"type": "SEND_TEXT",
"requestId": "client-request-id",
"roomId": 10,
"payload": {
"textMessage": "hello"
}
}
""".trimIndent()
val message = objectMapper.readValue<UserCreatorChatWebSocketMessage>(json)
assertEquals(UserCreatorChatWebSocketMessageType.SEND_TEXT, message.type)
assertEquals("client-request-id", message.requestId)
assertEquals(10L, message.roomId)
assertNotNull(message.payload, "Expected payload JsonNode to be present")
assertEquals("hello", message.payload["textMessage"].asText())
}
@Test
@DisplayName("payload가 비어 있는 JOIN_ROOM envelope도 역직렬화한다")
fun shouldDeserializeJoinRoomEnvelopeWithEmptyPayload() {
val json = """
{
"type": "JOIN_ROOM",
"requestId": "join-request-id",
"roomId": 10,
"payload": {}
}
""".trimIndent()
val message = objectMapper.readValue<UserCreatorChatWebSocketMessage>(json)
assertEquals(UserCreatorChatWebSocketMessageType.JOIN_ROOM, message.type)
assertEquals("join-request-id", message.requestId)
assertEquals(10L, message.roomId)
assertEquals(0, message.payload.size(), "Expected empty JSON object payload")
}
}