20240207 (수) 개인 주특기 플러스 7일차
2024. 2. 7. 19:34ㆍTIL
오늘은 테스트코드를 작성하고 2시쯤에 있는 쿼리DSL 특강을 듣고서 동적쿼리에 대해서도 작성해보았다.
확실히 뭐랄까 그냥 강의 자료같은 것만 보면서 따라하는건 좀 어렵고 시연같은걸 보고 한번 따라해보면 생각보다 술술 풀렸다.
우선 PostControllerTest
package lsw.practice.domain.post.controller
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import io.kotest.core.spec.style.DescribeSpec
import io.kotest.extensions.spring.SpringExtension
import io.kotest.matchers.shouldBe
import io.mockk.clearAllMocks
import io.mockk.every
import io.mockk.junit5.MockKExtension
import io.mockk.mockk
import lsw.practice.domain.post.dto.PostResponse
import lsw.practice.domain.post.service.PostService
import lsw.practice.infra.security.jwt.JwtPlugin
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
import java.time.LocalDateTime
@SpringBootTest
@AutoConfigureMockMvc
@ExtendWith(MockKExtension::class)
class PostControllerTest @Autowired constructor(
private val mockMvc: MockMvc, private val jwtPlugin: JwtPlugin,
): DescribeSpec({
extensions(SpringExtension)
afterContainer {
clearAllMocks()
}
val postService = mockk<PostService>()
describe("GET /posts/{id}") {
context("존재하는 ID를 요청할 때") {
it ("200 status code를 응답한다.") {
val postId = 1L
every { postService.getPost(any()) } returns PostResponse(
id = postId,
title = "test",
content = "test_content",
name = "username",
comments = mutableListOf()
)
val jwtToken = jwtPlugin.generateAccessToken(
subject = "1",
email = "test@gmail.com",
role = "USER"
)
val result = mockMvc.perform(
get ("/posts/$postId")
.header("Authorization", "Bearer $jwtToken")
).andReturn()
result.response.status shouldBe 200
val responseDto = jacksonObjectMapper().readValue(
result.response.contentAsString,
PostResponse::class.java
)
responseDto.id shouldBe postId
}
}
}
})
이건 아직 어떤 코드가 어느역할을 하는지 자세하게 알진 못해서 좀더 공부해봐야겠다.
searchPostList
override fun searchPostList(title: String?, name: String?): List<Post> {
val builder = BooleanBuilder()
if (title != null) {
builder.and(post.title.eq(title))
}
if (name != null) {
builder.and(post.name.eq(name))
}
return queryFactory
.selectFrom(post)
.where(builder)
.fetch()
}
동적쿼리부분은 생각보다 쉬웠다. BooleanBuilder 덕분인것 같다.
남는시간엔 JPA 심화강의를 들어보면서 지냈다.
요즘에 오히려 공부를 자율에 맡기니까 집중이 잘 안되는 느낌이다. 차라리 프로젝트 같은걸 진행하는게 나한텐는 조금더 맞는것 같기도..
'TIL' 카테고리의 다른 글
20240213 (화) 개인 주특기 플러스 9일차 (0) | 2024.02.13 |
---|---|
20240208 (목) 개인 주특기 플러스 8일차 (0) | 2024.02.08 |
20240206 (화) 개인 주특기 플러스 6일차 (1) | 2024.02.06 |
20240205 (월) 개인 주특기 플러스 5일차 (1) | 2024.02.05 |
20240202 (금) 개인 주특기 플러스 주차 4일차 (0) | 2024.02.02 |