Conversation
ADR-015 left it written down: the contract spec checks the shape of the endpoints it lists by hand, so a new endpoint with another shape breaks nothing until someone adds it there, and walking every route would be another card. The new spec takes every GET under /api/v1 from the routes: each index must answer data plus a meta with page, per_page and total, each fixed vocabulary must answer data alone, and any other GET route that is not a known bare resource fails the spec until someone decides its shape. Removing the meta of a listing now fails naming the route. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Revisado. Lo veo bien para implementar. Es, junto a #114, el PR de esta tanda con mejor relación valor/costo: 101 líneas, todas de spec, y cubre literalmente una de las tareas transversales de QA que siguen abiertas en el tablero. No agrega producto, agrega red de seguridad sobre lo que ya está. Lo que verifiqué
Lo único que dejaría anotado
Antes de mergear
|
Ticket de Jira
https://proyectofinalfrlp.atlassian.net/browse/TESIS-999031
Descripción
ADR-015 lo dejó escrito en sus consecuencias:
api_contract_spec.rbfija las formas de respuesta sobre los endpoints que enumera a mano, así que «un endpoint nuevo con otra forma no rompe nada hasta que se lo agrega ahí. Recorrer todas las rutas sería otra card». Esta es esa card: un spec que toma las rutas de la app y no una lista.Qué verifica, por cada GET de
/api/v1:indexes una colección: responde 200 condata+meta, y elmetatrae exactamentepage,per_pageytotal(TESIS-108: no hay colección sinmeta).products#categories,orders#provinces) respondendatasola, como fija la sección de excepciones del ADR.show,me,tenant-config). Una ruta nueva sin clasificar hace fallar el spec hasta que alguien decida qué forma tiene.Dientes: sacándole el
metaal listado de depósitos, falla nombrando la ruta:expected ["warehouses#index", [200, ["data"], nil]] to satisfy ….Orden de merge:
reports#overview(proyecto-api#101, card 007) ya está clasificado como recurso, aunque la ruta llegue en otra rama, para que mergear una antes que la otra no rompa este spec.spec/requests/api/v1/every_listing_envelope_spec.rb. Las listas de vocabularios y recursos van en un módulo (FormaDeCadaRuta), con el mismo criterio queContratoDeLaApi.Evidencia visual
N/A
Cómo probar
bundle exec rspec spec/requests/api/v1/every_listing_envelope_spec.rb→ 4 ejemplos en verde.WarehousesController#indexpara que no mandemeta→ el spec falla nombrandowarehouses#index.index→ el spec falla hasta sumarla a una lista.Verificación:
bundle exec rspec(1571 ejemplos, 0 fallas),rubocoplimpio.Impacto y consideraciones
¿Introduce breaking changes?
No. Sólo tests y documentación.
¿Requiere nuevas variables de entorno?
No
¿Afecta la arquitectura o genera un nuevo patrón?
No. Automatiza una regla que ya existía (ADR-015).
🤖 Generated with Claude Code