uqbar-project / eg-politics-springboot

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ejemplo Politics

Build Status

Material relacionado

  • En el branch master está la versión que recomendamos usar para resolver el TP, en el branch entity-manager está la versión menos declarativa que usa el Entity Manager como representación de los queries a la base
  • Apunte con la explicación completa

Swagger - Open API

Un chiche interesante es que pueden explorar y testear con Swagger el presente ejemplo, levantando la aplicación y navegando en la siguiente URL:

http://localhost:8080/swagger-ui/index.html#/

Swagger busca los controllers y arma un entorno web para probar los endpoints (puede resultar más cómodo que POSTMAN sobre todo para métodos POST o PUT).

Para conseguir el mismo efecto en tu proyecto solo tenés que agregar dos dependencias:

<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-boot-starter</artifactId>
  <version>3.0.0</version>
</dependency>
<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-swagger-ui</artifactId>
  <version>3.0.0</version>
</dependency>

Luego en los controllers la annotation @ApiOperation es la que permite agregar una descripción al endpoint

@GetMapping(value="/zonas/{id}")
@ApiOperation("Permite traer la información de una zona, con las personas candidatas y las intenciones de voto incluidas.")
def getZona(@PathVariable Long id) {

que luego tomará Swagger para publicar en la página.

swagger

Testeo de integración

Podés ver la implementación de varios casos de prueba:

  • para el controller de zonas
    • al traer todas las zonas no trae las personas candidatas
    • al traer una zona trae todas las personas candidatas (para este caso de prueba necesitamos convertir el JSON a una clase DTO especial para el test, ya que la serialización se hace con una clase ZonaParaGrillaSerializer en lugar de manejar el mapeo con anotaciones de Jackson o un DTO, quizás una razón más para utilizar como técnica el DTO)
    • si buscamos una zona inexistente debe devolver código de http 404
  • para el controller de candidates
    • si actualizamos un candidate mediante un PUT eso se refleja en la base de datos. Dado que tiene efecto colateral debemos utilizar la anotación @Transactional para este test. Si bien utilizamos una base de datos in-memory y podríamos pensar "los cambios realmente no persisten", sí lo hacen en el contexto de los tests. Es decir, si repetimos el mismo test sin revertir el cambio, el primer test pasará correctamente y el segundo fallará cuando espere que nuestro candidate tenga 0 votos.

About


Languages

Language:Xtend 100.0%