update
This commit is contained in:
36
README.md
36
README.md
@@ -1274,13 +1274,18 @@ a leer ese documento y no este código.
|
||||
|
||||
Dos cosas lo sujetan:
|
||||
|
||||
**Un test de contrato** ([`PublicApiContractTest`](tests/Feature/Api/PublicApiContractTest.php))
|
||||
que llama a cada endpoint público con datos sembrados y compara la respuesta con
|
||||
el esquema del `openapi.yaml`, clave a clave. La regla es asimétrica a
|
||||
propósito: **todo lo que la API manda tiene que estar documentado** —siempre—, y
|
||||
lo que el documento promete tiene que llegar en los endpoints de detalle, salvo
|
||||
lo que está marcado `nullable`, que es como este documento dice «puede no
|
||||
estar».
|
||||
**Dos tests de contrato**, uno por mitad de la API, comparten la comparación en
|
||||
sí ([`VerifiesOpenApiContract`](tests/VerifiesOpenApiContract.php)) porque la
|
||||
pregunta es la misma dos veces: si la forma que el documento promete es la que
|
||||
la API manda. Lo que cambia es todo lo que rodea la pregunta, no la
|
||||
comparación.
|
||||
|
||||
[`PublicApiContractTest`](tests/Feature/Api/PublicApiContractTest.php) llama a
|
||||
cada endpoint público con datos sembrados y compara la respuesta con el esquema
|
||||
del `openapi.yaml`, clave a clave. La regla es asimétrica a propósito: **todo lo
|
||||
que la API manda tiene que estar documentado** —siempre—, y lo que el documento
|
||||
promete tiene que llegar en los endpoints de detalle, salvo lo que está marcado
|
||||
`nullable`, que es como este documento dice «puede no estar».
|
||||
|
||||
Al escribirlo aparecieron cuatro desajustes que llevaban ahí un tiempo:
|
||||
`meta_title` y `meta_description` sin documentar en proyectos y servicios,
|
||||
@@ -1292,6 +1297,19 @@ era la API: el alt vive dentro de la imagen, que es donde lo necesita un `<img>`
|
||||
y dos nombres para el mismo texto es cómo un frontend acaba leyendo el que
|
||||
resulta ser el accidental.
|
||||
|
||||
[`AdminApiContractTest`](tests/Feature/Api/AdminApiContractTest.php) hace lo
|
||||
mismo con `/v1/*`, autenticado como `super_admin` para que un permiso de menos
|
||||
nunca se confunda con una forma equivocada, y añade una comprobación que la
|
||||
pública no necesita: el **sobre de paginación** (`links`, `meta`) de cada
|
||||
listado contra lo documentado, y que `/v1/roles` —el único listado que Laravel
|
||||
no pagina— no lleve ninguno de los dos. Escribirlo encontró cuatro desajustes
|
||||
más: `featured_image_alt` sin documentar en absoluto en la respuesta de página
|
||||
(la petición de escritura sí lo tenía, con otra forma), `permissions` de
|
||||
usuario documentado solo en prosa en vez de con `nullable: true`, y el sobre de
|
||||
paginación real de Laravel —que manda `from`, `to`, `path` y un `links` de
|
||||
primer nivel— documentado con la mitad de esas claves y sin ese `links` en
|
||||
absoluto.
|
||||
|
||||
**Tipos generados** para el otro lado:
|
||||
|
||||
```bash
|
||||
@@ -1346,7 +1364,7 @@ php artisan site:maintenance --up
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
php artisan test # 391 tests, 1121 aserciones
|
||||
php artisan test # 394 tests, 1128 aserciones
|
||||
```
|
||||
|
||||
En cada push y cada pull request, [`.github/workflows/tests.yml`](.github/workflows/tests.yml)
|
||||
@@ -1569,7 +1587,7 @@ docker compose -f docker-compose.test.yml run --rm test
|
||||
|
||||
Levanta un Postgres en memoria, corre la suite entera contra él y lo tira. Es la
|
||||
comprobación que convierte «debería funcionar» en «funciona», y conviene hacerla
|
||||
antes del primer despliegue. **391 tests en verde contra Postgres 17.**
|
||||
antes del primer despliegue. **394 tests en verde contra Postgres 17.**
|
||||
|
||||
Usa una etapa propia de la imagen: la de producción se construye con `--no-dev`
|
||||
y ahí no está ni el runner de tests.
|
||||
|
||||
Reference in New Issue
Block a user