Skip to content

Commit

Permalink
feat: ChatControllerTest에 getChats 테스트코드 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
minisundev committed Jun 1, 2024
1 parent 5cb98e6 commit 4f2ebc3
Showing 1 changed file with 150 additions and 48 deletions.
198 changes: 150 additions & 48 deletions chat/src/test/kotlin/kpring/chat/chat/api/v1/ChatControllerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ import kpring.core.auth.enums.TokenType
import kpring.core.chat.chat.dto.response.ChatResponse
import kpring.core.global.dto.response.ApiResponse
import kpring.core.server.client.ServerClient
import kpring.server.config.CoreConfiguration
import kpring.core.server.dto.ServerSimpleInfo
import kpring.test.restdoc.dsl.restDoc
import kpring.test.restdoc.json.JsonDataType
import kpring.test.web.URLBuilder
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
import org.springframework.context.annotation.Import
import org.springframework.http.ResponseEntity
import org.springframework.restdocs.ManualRestDocumentation
import org.springframework.restdocs.RestDocumentationExtension
import org.springframework.restdocs.operation.preprocess.Preprocessors
Expand All @@ -33,7 +34,6 @@ import java.time.LocalDateTime
@ExtendWith(RestDocumentationExtension::class)
@ExtendWith(SpringExtension::class)
@ExtendWith(MockKExtension::class)
@Import(CoreConfiguration::class)
class ChatControllerTest(
private val om: ObjectMapper,
webContext: WebApplicationContext,
Expand All @@ -42,65 +42,167 @@ class ChatControllerTest(
@MockkBean val authClient: AuthClient,
) : DescribeSpec({

val restDocument = ManualRestDocumentation()
val webTestClient: WebTestClient = MockMvcWebTestClient.bindToApplicationContext(webContext).configureClient()
.baseUrl("http://localhost:8081")
.filter(
WebTestClientRestDocumentation.documentationConfiguration(restDocument).operationPreprocessors()
.withRequestDefaults(Preprocessors.prettyPrint()).withResponseDefaults(Preprocessors.prettyPrint()),
)
.build()
val restDocument = ManualRestDocumentation()
val webTestClient: WebTestClient =
MockMvcWebTestClient.bindToApplicationContext(webContext).configureClient()
.baseUrl("http://localhost:8081")
.filter(
WebTestClientRestDocumentation.documentationConfiguration(restDocument).operationPreprocessors()
.withRequestDefaults(Preprocessors.prettyPrint()).withResponseDefaults(Preprocessors.prettyPrint()),
)
.build()

beforeSpec { restDocument.beforeTest(this.javaClass, "chat controller") }
beforeSpec { restDocument.beforeTest(this.javaClass, "chat controller") }

afterSpec { restDocument.afterTest() }
afterSpec { restDocument.afterTest() }

describe("GET /api/v1/chat/server/{serverId} : getServerChats api test") {
describe("GET /api/v1/chat : getServerChats api test") {

val url = "/api/v1/chat/server/{serverId}"
it("getServerChats api test") {
val url = "/api/v1/chat"
it("getServerChats api test") {

// Given
val serverId = "test_server_id"
val data = listOf(ChatResponse(serverId, false, LocalDateTime.now(), "sad"))
// Given
val serverId = "test_server_id"
val data =
listOf(
ChatResponse(
serverId,
false,
LocalDateTime.now(),
"sad",
),
)
val serverList =
listOf(
ServerSimpleInfo(
id = serverId,
name = "test_server_name",
bookmarked = true,
),
)

every { authClient.getTokenInfo(any()) } returns ApiResponse(
data = TokenInfo(
type = TokenType.ACCESS, userId = CommonTest.TEST_USER_ID
)
)
every { authClient.getTokenInfo(any()) } returns
ApiResponse(
data =
TokenInfo(
type = TokenType.ACCESS, userId = CommonTest.TEST_USER_ID,
),
)

every { serverClient.getServerList(any(), any()) } returns
ResponseEntity.ok().body(ApiResponse(data = serverList))

every { serverClient.verifyIfJoined(any(), any()) } returns true
every {
chatService.getServerChats(
serverId,
CommonTest.TEST_USER_ID,
1,
serverList,
)
} returns ApiResponse(data = data)

every { chatService.getChatsByServer(serverId, CommonTest.TEST_USER_ID, 1) } returns data
// When
val result =
webTestClient.get().uri(
URLBuilder(url).query("id", serverId).query("type", "Server").query("page", 1).build(),
)
.header("Authorization", "Bearer mock_token")
.exchange()

// When
val result = webTestClient.get().uri(
URLBuilder(url).query("page",1).build(),serverId)
.header("Authorization", "Bearer mock_token")
.exchange()
val docs = result.expectStatus().isOk.expectBody().json(om.writeValueAsString(ApiResponse(data = data)))

val docs = result.expectStatus().isOk.expectBody().json(om.writeValueAsString((ApiResponse(data=data))))
// Then
docs.restDoc(
identifier = "get_server_chats_200",
description = "서버 채팅 조회 api",
) {

// Then
docs.restDoc(
identifier = "get_server_chats_200",
description = "채팅 조회 api",
) {
request {
path { "serverId" mean "서버 id" }
query { "page" mean "page number" }
request {
query {

"type" mean "Server / Room"
"id" mean "서버 ID"
"page" mean "페이지 번호"
}
}

response {
body {
"data[].id" type JsonDataType.Strings mean "서버 ID"
"data[].isEdited" type JsonDataType.Booleans mean "메시지가 수정되었는지 여부"
"data[].sentAt" type JsonDataType.Time mean "메시지 전송 시간"
"data[].content" type JsonDataType.Strings mean "메시지 내용"
}
}
}
}
}

describe("GET /api/v1/chat : getRoomChats api test") {

val url = "/api/v1/chat"
it("getRoomChats api test") {

// Given
val roomId = "test_room_id"
val data =
listOf(
ChatResponse(
roomId,
false,
LocalDateTime.now(),
"sad",
),
)

every { authClient.getTokenInfo(any()) } returns
ApiResponse(
data =
TokenInfo(
type = TokenType.ACCESS, userId = CommonTest.TEST_USER_ID,
),
)

every {
chatService.getRoomChats(
roomId,
CommonTest.TEST_USER_ID,
1,
)
} returns ApiResponse(data = data)

// When
val result =
webTestClient.get().uri(
URLBuilder(url).query("id", roomId).query("type", "Room").query("page", 1).build(),
)
.header("Authorization", "Bearer mock_token")
.exchange()

val docs = result.expectStatus().isOk.expectBody().json(om.writeValueAsString(ApiResponse(data = data)))

// Then
docs.restDoc(
identifier = "get_room_chats_200",
description = "채팅방 채팅 조회 api",
) {
request {
query {
"type" mean "Server / Room"
"id" mean "채팅방 ID"
"page" mean "페이지 번호"
}
}

response {
body {
"data[].id" type "String" mean "ServerChat ID"
"data[].isEdited" type "Boolean" mean "If the chat is edited"
"data[].sentAt" type "LocalDateTime" mean "When the chat is sent"
"data[].content" type "String" mean "The content of the chat"
response {
body {
"data[].id" type JsonDataType.Strings mean "채팅방 ID"
"data[].isEdited" type JsonDataType.Booleans mean "메시지가 수정되었는지 여부"
"data[].sentAt" type JsonDataType.Time mean "메시지 전송 시간"
"data[].content" type JsonDataType.Strings mean "메시지 내용"
}
}
}
}
}
}
})
})

0 comments on commit 4f2ebc3

Please sign in to comment.