Agent-Logs-Url: https://github.com/devitq/movienight-backend/sessions/60cd9b1b-e3e1-46a1-bfd9-04a75bd0d569 Co-authored-by: devitq <118541411+devitq@users.noreply.github.com>
109 lines
3.8 KiB
Kotlin
109 lines
3.8 KiB
Kotlin
package com.project.movienight.controllers
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper
|
|
import com.project.movienight.adapters.web.dto.request.CreateUserRequest
|
|
import com.project.movienight.adapters.web.dto.request.EditUserRequest
|
|
import org.junit.jupiter.api.Test
|
|
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.http.MediaType
|
|
import org.springframework.test.web.servlet.MockMvc
|
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete
|
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch
|
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
|
|
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath
|
|
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
|
|
import org.springframework.transaction.annotation.Transactional
|
|
|
|
@SpringBootTest
|
|
@AutoConfigureMockMvc
|
|
@Transactional
|
|
class UserControllerTest {
|
|
@Autowired
|
|
private lateinit var mockMvc: MockMvc
|
|
|
|
@Autowired
|
|
private lateinit var objectMapper: ObjectMapper
|
|
|
|
@Test
|
|
fun `create user should return 201 CREATED`() {
|
|
val request =
|
|
CreateUserRequest(
|
|
name = "John Doe",
|
|
email = "john@example.com",
|
|
)
|
|
|
|
mockMvc
|
|
.perform(
|
|
post("/api/users")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(objectMapper.writeValueAsString(request)),
|
|
).andExpect(status().isCreated)
|
|
.andExpect(jsonPath("$.name").value("John Doe"))
|
|
.andExpect(jsonPath("$.email").value("john@example.com"))
|
|
.andExpect(jsonPath("$.id").exists())
|
|
}
|
|
|
|
@Test
|
|
fun `edit user should return updated user`() {
|
|
val createRequest =
|
|
CreateUserRequest(
|
|
name = "Old Name",
|
|
email = "edit@example.com",
|
|
)
|
|
|
|
val response =
|
|
mockMvc
|
|
.perform(
|
|
post("/api/users")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(objectMapper.writeValueAsString(createRequest)),
|
|
).andReturn()
|
|
|
|
val userId = objectMapper.readTree(response.response.contentAsString).get("id").asText()
|
|
|
|
val editRequest = EditUserRequest(name = "New Name")
|
|
|
|
mockMvc
|
|
.perform(
|
|
patch("/api/users/$userId")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(objectMapper.writeValueAsString(editRequest)),
|
|
).andExpect(status().isOk)
|
|
.andExpect(jsonPath("$.name").value("New Name"))
|
|
.andExpect(jsonPath("$.email").value("edit@example.com"))
|
|
}
|
|
|
|
@Test
|
|
fun `delete user should return 204 NO CONTENT`() {
|
|
val request =
|
|
CreateUserRequest(
|
|
name = "User To Delete",
|
|
email = "delete@example.com",
|
|
)
|
|
|
|
val response =
|
|
mockMvc
|
|
.perform(
|
|
post("/api/users")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content(objectMapper.writeValueAsString(request)),
|
|
).andReturn()
|
|
|
|
val userId = objectMapper.readTree(response.response.contentAsString).get("id").asText()
|
|
|
|
mockMvc
|
|
.perform(delete("/api/users/$userId"))
|
|
.andExpect(status().isNoContent())
|
|
}
|
|
|
|
@Test
|
|
fun `delete non-existent user should return 404`() {
|
|
val nonExistentId = "123e4567-e89b-12d3-a456-426614174000"
|
|
mockMvc
|
|
.perform(delete("/api/users/$nonExistentId"))
|
|
.andExpect(status().isNotFound())
|
|
}
|
|
}
|