PUROGU LADESU

ポエムがメインのブログです。

【SpringBoot】Test

package com.example.serversidebbssample

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.http.HttpStatus
import org.springframework.http.MediaType
import org.springframework.test.context.jdbc.Sql
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.ResultMatcher
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*
import org.springframework.test.web.servlet.setup.MockMvcBuilders

@ExtendWith(SpringExtension::class)
@SpringBootTest
class PersonControllerTasks {
    lateinit var mockMvc: MockMvc

    @Autowired
    lateinit var target: PersonController

    @BeforeEach
    fun setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(target).build()
    }

    @Test
    fun getAllPersonsTest() {
        val response = mockMvc.perform(
            get("/all")
        ).andReturn().response

        assertThat(response.status).isEqualTo(HttpStatus.OK.value())
        assertThat(response.contentType).isEqualTo(MediaType.APPLICATION_JSON.toString())
    }

    @Test
    fun addNewPersonTest() {
        val response = mockMvc.perform(
            post("/add").param("name", "aaa")
        ).andReturn().response

        assertThat(response.status).isEqualTo(HttpStatus.OK.value())
        assertThat(response.contentAsString).isEqualTo("Saved")
    }

    // メソッドの前に実行するSQLを指定
    @Test
    @Sql(statements = ["INSERT INTO person (name) VALUES ('update_data');"])
    fun updatePersonTest() {
        val lastPerson: Person = target.personRepository.findAll().last()

        val response = mockMvc.perform(
            post("/update")
                .param("id", lastPerson.id.toString())
                .param("name", "update_data")
        ).andReturn().response

        assertThat(response.status).isEqualTo(HttpStatus.OK.value())
        assertThat(response.contentAsString).isEqualTo("Updated")
    }

    @Test
    fun deleteNoPersonTest() {
        var response = mockMvc.perform(
            post("/delete")
                .param("id", "-1")
        ).andReturn().response

        println(response)

        assertThat(response.status).isEqualTo(HttpStatus.OK.value())
        assertThat(response.contentAsString).isEqualTo("No User")
    }
}