2 minute read

Índice de temario

Día Tema a tratar
1 Definiendo objetivos
2 Proyecto inicial
3 Endpoint básico
4 Entidades y persistencia
5 Transaccionalidad
6 Migraciones
7 Manejo de excepciones

Día 3. Endpoint básico

Bueno. Lo primero que tenemos que hacer es buscar la manera de hace un test de integración que nos ayude a nuestro cometido.

En este caso, queremos que un endpoint deje hacer un llamada POST para crear un usuario. Pero para empezar, sólo haremos que nos devuelva la información que le enviamos.

Siguiendo la estructura de DDD Bounded Context.Module.Layer. Creamos el package users.user.ui en la carpeta de test e intentamos hacer que funcione…

Para ello necesitaremos declarar que es un test de Springboot con la anotación @SpringBootTest (equivale a WebTestCase de symfony) y cargar el MockMvc con @AutoConfigureMockMvc (equivale al cliente de test de symfony)

package com.example.users.user.ui

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.post
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import kotlin.test.Test

@SpringBootTest
@AutoConfigureMockMvc
internal class SignUpUserTest {
    @Autowired
    private lateinit var mockMvc: MockMvc

    @Test
    fun `Should create a User` () {
        mockMvc.perform(
            post("/user/signup"))
            .andExpect(status().isCreated)
    }
}

Al test le faltan cosas… pero vamos por partes…. Ahora tendremos que hacer un endpoint que nos devuelva un estado “created”.

package com.example.users.user.ui

import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RestController
import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType

@RestController
class SignUpUser {

    @PostMapping("/user/signup")
    fun execute(): ResponseEntity<JvmType.Object>
    {
        return ResponseEntity(HttpStatus.CREATED)
    }
}

A tener en cuenta. SpringBoot maneja las dependencias a través de anotaciones y detecta servicios buscando en los paquetes hijos que haya debajo del fichero Application. Eso quiere decir que si ponemos las anotaciones y los packages en el sitio correcto, SpringBoot hará el resto con el @Autowired

Si le damos al play en nuestro IDE para que ejecute el test, tendremos luz verde para seguir nuestro camino, que es que guarde realmente algo en base de datos. Lo veremos en el siguiente post


https://spring.io/guides/gs/testing-web/


comments powered by Disqus