theus-cli-linux-arm64 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/RELEASE.json +6 -6
- package/bin/theus +0 -0
- package/package.json +1 -1
- package/vendor/chrome-extension/README.md +142 -0
- package/vendor/chrome-extension/background.js +540 -0
- package/vendor/chrome-extension/cdp-core.js +400 -0
- package/vendor/chrome-extension/cdp-core.test.ts +321 -0
- package/vendor/chrome-extension/cdp.js +672 -0
- package/vendor/chrome-extension/icons/icon128.png +0 -0
- package/vendor/chrome-extension/icons/icon16.png +0 -0
- package/vendor/chrome-extension/icons/icon32.png +0 -0
- package/vendor/chrome-extension/icons/icon48.png +0 -0
- package/vendor/chrome-extension/manifest.json +36 -0
- package/vendor/chrome-extension/popup.html +78 -0
- package/vendor/chrome-extension/popup.js +47 -0
- package/vendor/chrome-extension/recorder.js +316 -0
- package/vendor/higiene-motor/PARCHES.md +244 -0
- package/vendor/higiene-motor/audit_dir.py +166 -0
- package/vendor/higiene-motor/audit_lib.py +333 -0
- package/vendor/higiene-motor/audit_website.py +635 -0
- package/vendor/higiene-motor/av_meta.py +498 -0
- package/vendor/higiene-motor/check_staged.py +71 -0
- package/vendor/higiene-motor/clean_ctrlregen.py +212 -0
- package/vendor/higiene-motor/clean_file.py +237 -0
- package/vendor/higiene-motor/clean_image.py +218 -0
- package/vendor/higiene-motor/clean_staged.py +143 -0
- package/vendor/higiene-motor/clean_text.py +108 -0
- package/vendor/higiene-motor/common.py +486 -0
- package/vendor/higiene-motor/container_meta.py +2522 -0
- package/vendor/higiene-motor/detect_gumbel.py +308 -0
- package/vendor/higiene-motor/detect_text_watermark.py +613 -0
- package/vendor/higiene-motor/format_dispatch.py +157 -0
- package/vendor/higiene-motor/hook_written_file.py +253 -0
- package/vendor/higiene-motor/image_meta.py +2171 -0
- package/vendor/higiene-motor/inspect_file.py +138 -0
- package/vendor/higiene-motor/inspect_image.py +72 -0
- package/vendor/higiene-motor/inspect_text.py +86 -0
- package/vendor/higiene-motor/markdiffusion_harness.py +533 -0
- package/vendor/higiene-motor/rewrite_text.py +737 -0
- package/vendor/higiene-motor/score_stylometry.py +460 -0
- package/vendor/higiene-motor/score_synthid.py +165 -0
- package/vendor/higiene-motor/server.py +1059 -0
- package/vendor/higiene-motor/synthid_score_server.py +176 -0
- package/vendor/higiene-motor/text_detectors.py +433 -0
- package/vendor/higiene-motor/text_unicode.py +730 -0
- package/vendor/theus-arsenal/.arsenal-nombres-ola2.json +0 -6
- package/vendor/theus-arsenal/.arsenal-nombres-ola3.json +0 -72
- package/vendor/theus-arsenal/.mailmap +0 -2
- package/vendor/theus-arsenal/.theus-plugin/marketplace.json +0 -25
- package/vendor/theus-arsenal/.theus-plugin/plugin.json +0 -20
- package/vendor/theus-arsenal/AUTHORS.md +0 -8
- package/vendor/theus-arsenal/CLEANROOM_REPLACEMENT_PLAN.md +0 -11
- package/vendor/theus-arsenal/LICENSE +0 -26
- package/vendor/theus-arsenal/PROVENANCE.md +0 -9
- package/vendor/theus-arsenal/README.md +0 -41
- package/vendor/theus-arsenal/THIRD_PARTY.md +0 -80
- package/vendor/theus-arsenal/agents/actualizador-docs.md +0 -123
- package/vendor/theus-arsenal/agents/analista-comentarios.md +0 -53
- package/vendor/theus-arsenal/agents/analista-conversaciones.md +0 -60
- package/vendor/theus-arsenal/agents/analista-tests-pr.md +0 -53
- package/vendor/theus-arsenal/agents/analista-tipos.md +0 -49
- package/vendor/theus-arsenal/agents/arquitecto-accesibilidad.md +0 -148
- package/vendor/theus-arsenal/agents/arquitecto-codigo.md +0 -79
- package/vendor/theus-arsenal/agents/arquitecto-homelab.md +0 -90
- package/vendor/theus-arsenal/agents/arquitecto-redes.md +0 -116
- package/vendor/theus-arsenal/agents/arquitecto-sistemas.md +0 -219
- package/vendor/theus-arsenal/agents/bifurcador-opensource.md +0 -206
- package/vendor/theus-arsenal/agents/cazador-fallos-silenciosos.md +0 -58
- package/vendor/theus-arsenal/agents/consultor-documentacion.md +0 -76
- package/vendor/theus-arsenal/agents/diagnosticador-redes.md +0 -135
- package/vendor/theus-arsenal/agents/ejecutor-e2e.md +0 -96
- package/vendor/theus-arsenal/agents/empaquetador-opensource.md +0 -257
- package/vendor/theus-arsenal/agents/escaner-secretos.md +0 -196
- package/vendor/theus-arsenal/agents/especialista-seo.md +0 -70
- package/vendor/theus-arsenal/agents/estratega-marketing.md +0 -158
- package/vendor/theus-arsenal/agents/evaluador-agentes.md +0 -214
- package/vendor/theus-arsenal/agents/evaluador-harness.md +0 -217
- package/vendor/theus-arsenal/agents/explorador-codigo.md +0 -79
- package/vendor/theus-arsenal/agents/extractor-specs.md +0 -214
- package/vendor/theus-arsenal/agents/generador-harness.md +0 -139
- package/vendor/theus-arsenal/agents/guia-tdd.md +0 -99
- package/vendor/theus-arsenal/agents/jefe-de-gabinete.md +0 -162
- package/vendor/theus-arsenal/agents/limpiador-refactors.md +0 -93
- package/vendor/theus-arsenal/agents/optimizador-rendimiento.md +0 -454
- package/vendor/theus-arsenal/agents/planificador-harness.md +0 -107
- package/vendor/theus-arsenal/agents/planificador.md +0 -221
- package/vendor/theus-arsenal/agents/resolutor-apps-harmonyos.md +0 -181
- package/vendor/theus-arsenal/agents/resolutor-builds-cpp.md +0 -98
- package/vendor/theus-arsenal/agents/resolutor-builds-dart.md +0 -209
- package/vendor/theus-arsenal/agents/resolutor-builds-django.md +0 -253
- package/vendor/theus-arsenal/agents/resolutor-builds-go.md +0 -102
- package/vendor/theus-arsenal/agents/resolutor-builds-java.md +0 -274
- package/vendor/theus-arsenal/agents/resolutor-builds-kotlin.md +0 -128
- package/vendor/theus-arsenal/agents/resolutor-builds-pytorch.md +0 -128
- package/vendor/theus-arsenal/agents/resolutor-builds-react.md +0 -214
- package/vendor/theus-arsenal/agents/resolutor-builds-rust.md +0 -156
- package/vendor/theus-arsenal/agents/resolutor-builds-swift.md +0 -169
- package/vendor/theus-arsenal/agents/resolutor-builds.md +0 -122
- package/vendor/theus-arsenal/agents/revisor-bd.md +0 -97
- package/vendor/theus-arsenal/agents/revisor-codigo.md +0 -291
- package/vendor/theus-arsenal/agents/revisor-config-red.md +0 -116
- package/vendor/theus-arsenal/agents/revisor-cpp.md +0 -80
- package/vendor/theus-arsenal/agents/revisor-csharp.md +0 -109
- package/vendor/theus-arsenal/agents/revisor-django.md +0 -168
- package/vendor/theus-arsenal/agents/revisor-fastapi.md +0 -82
- package/vendor/theus-arsenal/agents/revisor-flutter.md +0 -251
- package/vendor/theus-arsenal/agents/revisor-go.md +0 -84
- package/vendor/theus-arsenal/agents/revisor-java.md +0 -192
- package/vendor/theus-arsenal/agents/revisor-kotlin.md +0 -171
- package/vendor/theus-arsenal/agents/revisor-ml.md +0 -159
- package/vendor/theus-arsenal/agents/revisor-php.md +0 -108
- package/vendor/theus-arsenal/agents/revisor-python.md +0 -106
- package/vendor/theus-arsenal/agents/revisor-react.md +0 -166
- package/vendor/theus-arsenal/agents/revisor-rust.md +0 -102
- package/vendor/theus-arsenal/agents/revisor-seguridad.md +0 -116
- package/vendor/theus-arsenal/agents/revisor-software-clinico.md +0 -95
- package/vendor/theus-arsenal/agents/revisor-swift.md +0 -115
- package/vendor/theus-arsenal/agents/revisor-typescript.md +0 -123
- package/vendor/theus-arsenal/agents/revisor-vue.md +0 -205
- package/vendor/theus-arsenal/agents/simplificador-codigo.md +0 -55
- package/vendor/theus-arsenal/commands/actualizar-docs.md +0 -88
- package/vendor/theus-arsenal/commands/actualizar-mapas-codigo.md +0 -78
- package/vendor/theus-arsenal/commands/aprender-evaluar.md +0 -109
- package/vendor/theus-arsenal/commands/aprender.md +0 -74
- package/vendor/theus-arsenal/commands/arreglar-build.md +0 -66
- package/vendor/theus-arsenal/commands/bucle-multiperspectiva.md +0 -153
- package/vendor/theus-arsenal/commands/build-cpp.md +0 -173
- package/vendor/theus-arsenal/commands/build-flutter.md +0 -164
- package/vendor/theus-arsenal/commands/build-go.md +0 -183
- package/vendor/theus-arsenal/commands/build-gradle.md +0 -75
- package/vendor/theus-arsenal/commands/build-kotlin.md +0 -176
- package/vendor/theus-arsenal/commands/build-react.md +0 -187
- package/vendor/theus-arsenal/commands/build-rust.md +0 -187
- package/vendor/theus-arsenal/commands/campana-marketing.md +0 -125
- package/vendor/theus-arsenal/commands/checkpoint.md +0 -78
- package/vendor/theus-arsenal/commands/cobertura-tests.md +0 -73
- package/vendor/theus-arsenal/commands/configurar-gestor-paquetes.md +0 -86
- package/vendor/theus-arsenal/commands/consulta.md +0 -164
- package/vendor/theus-arsenal/commands/control-calidad.md +0 -50
- package/vendor/theus-arsenal/commands/crear-skill.md +0 -77
- package/vendor/theus-arsenal/commands/enrutar-modelo.md +0 -30
- package/vendor/theus-arsenal/commands/epica-desbloquear.md +0 -17
- package/vendor/theus-arsenal/commands/epica-descomponer.md +0 -22
- package/vendor/theus-arsenal/commands/epica-publicar.md +0 -21
- package/vendor/theus-arsenal/commands/epica-reclamar.md +0 -25
- package/vendor/theus-arsenal/commands/epica-revisar.md +0 -22
- package/vendor/theus-arsenal/commands/epica-sincronizar.md +0 -21
- package/vendor/theus-arsenal/commands/epica-validar.md +0 -21
- package/vendor/theus-arsenal/commands/evolucionar.md +0 -176
- package/vendor/theus-arsenal/commands/funcionalidad.md +0 -49
- package/vendor/theus-arsenal/commands/guardar-sesion.md +0 -278
- package/vendor/theus-arsenal/commands/harness-build.md +0 -111
- package/vendor/theus-arsenal/commands/harness-diseno.md +0 -46
- package/vendor/theus-arsenal/commands/informe-costos.md +0 -90
- package/vendor/theus-arsenal/commands/iniciar-bucle.md +0 -36
- package/vendor/theus-arsenal/commands/instintos-estado.md +0 -53
- package/vendor/theus-arsenal/commands/instintos-exportar.md +0 -69
- package/vendor/theus-arsenal/commands/instintos-importar.md +0 -120
- package/vendor/theus-arsenal/commands/lienzo-planes.md +0 -48
- package/vendor/theus-arsenal/commands/limpiar-refactor.md +0 -84
- package/vendor/theus-arsenal/commands/modo-seguro.md +0 -96
- package/vendor/theus-arsenal/commands/orq-agregar-funcionalidad.md +0 -36
- package/vendor/theus-arsenal/commands/orq-cambiar-funcionalidad.md +0 -38
- package/vendor/theus-arsenal/commands/orq-construir-mvp.md +0 -36
- package/vendor/theus-arsenal/commands/orq-corregir-defecto.md +0 -40
- package/vendor/theus-arsenal/commands/orq-refinar-codigo.md +0 -44
- package/vendor/theus-arsenal/commands/orq-revisar.md +0 -135
- package/vendor/theus-arsenal/commands/plan-prd.md +0 -160
- package/vendor/theus-arsenal/commands/plan.md +0 -198
- package/vendor/theus-arsenal/commands/podar.md +0 -31
- package/vendor/theus-arsenal/commands/pr.md +0 -181
- package/vendor/theus-arsenal/commands/promover.md +0 -41
- package/vendor/theus-arsenal/commands/proyectos.md +0 -33
- package/vendor/theus-arsenal/commands/prp-commit.md +0 -112
- package/vendor/theus-arsenal/commands/prp-implementar.md +0 -385
- package/vendor/theus-arsenal/commands/prp-planificar.md +0 -501
- package/vendor/theus-arsenal/commands/reanudar-sesion.md +0 -160
- package/vendor/theus-arsenal/commands/revisar-codigo.md +0 -289
- package/vendor/theus-arsenal/commands/revisar-cpp.md +0 -132
- package/vendor/theus-arsenal/commands/revisar-fastapi.md +0 -39
- package/vendor/theus-arsenal/commands/revisar-flutter.md +0 -115
- package/vendor/theus-arsenal/commands/revisar-go.md +0 -148
- package/vendor/theus-arsenal/commands/revisar-kotlin.md +0 -140
- package/vendor/theus-arsenal/commands/revisar-pr.md +0 -37
- package/vendor/theus-arsenal/commands/revisar-python.md +0 -297
- package/vendor/theus-arsenal/commands/revisar-react.md +0 -170
- package/vendor/theus-arsenal/commands/revisar-rust.md +0 -142
- package/vendor/theus-arsenal/commands/revisar-vue.md +0 -174
- package/vendor/theus-arsenal/commands/salud-skills.md +0 -52
- package/vendor/theus-arsenal/commands/sesiones.md +0 -345
- package/vendor/theus-arsenal/commands/test-cpp.md +0 -252
- package/vendor/theus-arsenal/commands/test-flutter.md +0 -143
- package/vendor/theus-arsenal/commands/test-go.md +0 -268
- package/vendor/theus-arsenal/commands/test-kotlin.md +0 -312
- package/vendor/theus-arsenal/commands/test-react.md +0 -265
- package/vendor/theus-arsenal/commands/test-rust.md +0 -309
- package/vendor/theus-arsenal/commands/vigilancia-canary.md +0 -43
- package/vendor/theus-arsenal/hooks/hooks.json +0 -274
- package/vendor/theus-arsenal/package.json +0 -6
- package/vendor/theus-arsenal/rules/angular/coding-style.md +0 -182
- package/vendor/theus-arsenal/rules/angular/hooks.md +0 -25
- package/vendor/theus-arsenal/rules/angular/patterns.md +0 -249
- package/vendor/theus-arsenal/rules/angular/security.md +0 -87
- package/vendor/theus-arsenal/rules/angular/testing.md +0 -164
- package/vendor/theus-arsenal/rules/arkts/coding-style.md +0 -153
- package/vendor/theus-arsenal/rules/arkts/hooks.md +0 -80
- package/vendor/theus-arsenal/rules/arkts/patterns.md +0 -236
- package/vendor/theus-arsenal/rules/arkts/security.md +0 -141
- package/vendor/theus-arsenal/rules/arkts/testing.md +0 -126
- package/vendor/theus-arsenal/rules/common/agents.md +0 -49
- package/vendor/theus-arsenal/rules/common/code-review.md +0 -123
- package/vendor/theus-arsenal/rules/common/coding-style.md +0 -90
- package/vendor/theus-arsenal/rules/common/development-workflow.md +0 -44
- package/vendor/theus-arsenal/rules/common/git-workflow.md +0 -24
- package/vendor/theus-arsenal/rules/common/hooks.md +0 -32
- package/vendor/theus-arsenal/rules/common/patterns.md +0 -31
- package/vendor/theus-arsenal/rules/common/performance.md +0 -53
- package/vendor/theus-arsenal/rules/common/security.md +0 -29
- package/vendor/theus-arsenal/rules/common/testing.md +0 -57
- package/vendor/theus-arsenal/rules/cpp/coding-style.md +0 -44
- package/vendor/theus-arsenal/rules/cpp/hooks.md +0 -39
- package/vendor/theus-arsenal/rules/cpp/patterns.md +0 -51
- package/vendor/theus-arsenal/rules/cpp/security.md +0 -51
- package/vendor/theus-arsenal/rules/cpp/testing.md +0 -44
- package/vendor/theus-arsenal/rules/csharp/coding-style.md +0 -72
- package/vendor/theus-arsenal/rules/csharp/hooks.md +0 -25
- package/vendor/theus-arsenal/rules/csharp/patterns.md +0 -50
- package/vendor/theus-arsenal/rules/csharp/security.md +0 -58
- package/vendor/theus-arsenal/rules/csharp/testing.md +0 -50
- package/vendor/theus-arsenal/rules/dart/coding-style.md +0 -159
- package/vendor/theus-arsenal/rules/dart/hooks.md +0 -68
- package/vendor/theus-arsenal/rules/dart/patterns.md +0 -261
- package/vendor/theus-arsenal/rules/dart/security.md +0 -135
- package/vendor/theus-arsenal/rules/dart/testing.md +0 -215
- package/vendor/theus-arsenal/rules/fsharp/coding-style.md +0 -112
- package/vendor/theus-arsenal/rules/fsharp/hooks.md +0 -26
- package/vendor/theus-arsenal/rules/fsharp/patterns.md +0 -111
- package/vendor/theus-arsenal/rules/fsharp/security.md +0 -76
- package/vendor/theus-arsenal/rules/fsharp/testing.md +0 -62
- package/vendor/theus-arsenal/rules/golang/coding-style.md +0 -32
- package/vendor/theus-arsenal/rules/golang/hooks.md +0 -17
- package/vendor/theus-arsenal/rules/golang/patterns.md +0 -45
- package/vendor/theus-arsenal/rules/golang/security.md +0 -34
- package/vendor/theus-arsenal/rules/golang/testing.md +0 -31
- package/vendor/theus-arsenal/rules/java/coding-style.md +0 -114
- package/vendor/theus-arsenal/rules/java/hooks.md +0 -18
- package/vendor/theus-arsenal/rules/java/patterns.md +0 -147
- package/vendor/theus-arsenal/rules/java/security.md +0 -101
- package/vendor/theus-arsenal/rules/java/testing.md +0 -133
- package/vendor/theus-arsenal/rules/kotlin/coding-style.md +0 -86
- package/vendor/theus-arsenal/rules/kotlin/hooks.md +0 -17
- package/vendor/theus-arsenal/rules/kotlin/patterns.md +0 -146
- package/vendor/theus-arsenal/rules/kotlin/security.md +0 -82
- package/vendor/theus-arsenal/rules/kotlin/testing.md +0 -128
- package/vendor/theus-arsenal/rules/nuxt/coding-style.md +0 -47
- package/vendor/theus-arsenal/rules/nuxt/hooks.md +0 -39
- package/vendor/theus-arsenal/rules/nuxt/patterns.md +0 -54
- package/vendor/theus-arsenal/rules/nuxt/security.md +0 -48
- package/vendor/theus-arsenal/rules/nuxt/testing.md +0 -49
- package/vendor/theus-arsenal/rules/php/coding-style.md +0 -40
- package/vendor/theus-arsenal/rules/php/hooks.md +0 -24
- package/vendor/theus-arsenal/rules/php/patterns.md +0 -33
- package/vendor/theus-arsenal/rules/php/security.md +0 -37
- package/vendor/theus-arsenal/rules/php/testing.md +0 -38
- package/vendor/theus-arsenal/rules/python/coding-style.md +0 -42
- package/vendor/theus-arsenal/rules/python/fastapi.md +0 -58
- package/vendor/theus-arsenal/rules/python/hooks.md +0 -19
- package/vendor/theus-arsenal/rules/python/patterns.md +0 -39
- package/vendor/theus-arsenal/rules/python/security.md +0 -30
- package/vendor/theus-arsenal/rules/python/testing.md +0 -38
- package/vendor/theus-arsenal/rules/react/coding-style.md +0 -109
- package/vendor/theus-arsenal/rules/react/hooks.md +0 -187
- package/vendor/theus-arsenal/rules/react/patterns.md +0 -194
- package/vendor/theus-arsenal/rules/react/security.md +0 -180
- package/vendor/theus-arsenal/rules/react/testing.md +0 -208
- package/vendor/theus-arsenal/rules/react-native/accessibility.md +0 -55
- package/vendor/theus-arsenal/rules/react-native/coding-style.md +0 -71
- package/vendor/theus-arsenal/rules/react-native/hooks.md +0 -28
- package/vendor/theus-arsenal/rules/react-native/patterns.md +0 -88
- package/vendor/theus-arsenal/rules/react-native/performance.md +0 -45
- package/vendor/theus-arsenal/rules/react-native/production-readiness.md +0 -51
- package/vendor/theus-arsenal/rules/react-native/security.md +0 -43
- package/vendor/theus-arsenal/rules/react-native/testing.md +0 -52
- package/vendor/theus-arsenal/rules/ruby/coding-style.md +0 -46
- package/vendor/theus-arsenal/rules/ruby/hooks.md +0 -37
- package/vendor/theus-arsenal/rules/ruby/patterns.md +0 -44
- package/vendor/theus-arsenal/rules/ruby/security.md +0 -51
- package/vendor/theus-arsenal/rules/ruby/testing.md +0 -51
- package/vendor/theus-arsenal/rules/rust/coding-style.md +0 -151
- package/vendor/theus-arsenal/rules/rust/hooks.md +0 -16
- package/vendor/theus-arsenal/rules/rust/patterns.md +0 -168
- package/vendor/theus-arsenal/rules/rust/security.md +0 -141
- package/vendor/theus-arsenal/rules/rust/testing.md +0 -154
- package/vendor/theus-arsenal/rules/swift/coding-style.md +0 -47
- package/vendor/theus-arsenal/rules/swift/hooks.md +0 -20
- package/vendor/theus-arsenal/rules/swift/patterns.md +0 -66
- package/vendor/theus-arsenal/rules/swift/security.md +0 -33
- package/vendor/theus-arsenal/rules/swift/testing.md +0 -45
- package/vendor/theus-arsenal/rules/typescript/coding-style.md +0 -199
- package/vendor/theus-arsenal/rules/typescript/hooks.md +0 -22
- package/vendor/theus-arsenal/rules/typescript/patterns.md +0 -52
- package/vendor/theus-arsenal/rules/typescript/security.md +0 -28
- package/vendor/theus-arsenal/rules/typescript/testing.md +0 -18
- package/vendor/theus-arsenal/rules/vue/coding-style.md +0 -54
- package/vendor/theus-arsenal/rules/vue/hooks.md +0 -45
- package/vendor/theus-arsenal/rules/vue/patterns.md +0 -56
- package/vendor/theus-arsenal/rules/vue/security.md +0 -46
- package/vendor/theus-arsenal/rules/vue/testing.md +0 -53
- package/vendor/theus-arsenal/rules/web/coding-style.md +0 -108
- package/vendor/theus-arsenal/rules/web/design-quality.md +0 -75
- package/vendor/theus-arsenal/rules/web/hooks.md +0 -141
- package/vendor/theus-arsenal/rules/web/patterns.md +0 -91
- package/vendor/theus-arsenal/rules/web/performance.md +0 -76
- package/vendor/theus-arsenal/rules/web/security.md +0 -69
- package/vendor/theus-arsenal/rules/web/testing.md +0 -67
- package/vendor/theus-arsenal/scripts/hooks/bash-hook-dispatcher.js +0 -192
- package/vendor/theus-arsenal/scripts/hooks/block-no-verify.js +0 -556
- package/vendor/theus-arsenal/scripts/hooks/check-console-log.js +0 -92
- package/vendor/theus-arsenal/scripts/hooks/check-hook-enabled.js +0 -16
- package/vendor/theus-arsenal/scripts/hooks/config-protection.js +0 -171
- package/vendor/theus-arsenal/scripts/hooks/design-quality-check.js +0 -132
- package/vendor/theus-arsenal/scripts/hooks/doc-file-warning.js +0 -110
- package/vendor/theus-arsenal/scripts/hooks/modo-seguro.js +0 -158
- package/vendor/theus-arsenal/scripts/hooks/notificacion-escritorio.js +0 -208
- package/vendor/theus-arsenal/scripts/hooks/plugin-hook-bootstrap.js +0 -280
- package/vendor/theus-arsenal/scripts/hooks/post-bash-command-log.js +0 -87
- package/vendor/theus-arsenal/scripts/hooks/post-bash-dispatcher.js +0 -24
- package/vendor/theus-arsenal/scripts/hooks/post-bash-pr-created.js +0 -60
- package/vendor/theus-arsenal/scripts/hooks/post-edit-accumulator.js +0 -94
- package/vendor/theus-arsenal/scripts/hooks/post-edit-console-warn.js +0 -54
- package/vendor/theus-arsenal/scripts/hooks/post-edit-format.js +0 -110
- package/vendor/theus-arsenal/scripts/hooks/post-edit-typecheck.js +0 -98
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-commit-quality.js +0 -447
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dev-server-block.js +0 -232
- package/vendor/theus-arsenal/scripts/hooks/pre-bash-dispatcher.js +0 -27
- package/vendor/theus-arsenal/scripts/hooks/pre-compact.js +0 -101
- package/vendor/theus-arsenal/scripts/hooks/pretooluse-visible-output.js +0 -49
- package/vendor/theus-arsenal/scripts/hooks/quality-gate.js +0 -168
- package/vendor/theus-arsenal/scripts/hooks/run-with-flags.js +0 -271
- package/vendor/theus-arsenal/scripts/hooks/salud-mcp.js +0 -749
- package/vendor/theus-arsenal/scripts/hooks/seguimiento-costos.js +0 -161
- package/vendor/theus-arsenal/scripts/hooks/session-end.js +0 -340
- package/vendor/theus-arsenal/scripts/hooks/session-start.js +0 -906
- package/vendor/theus-arsenal/scripts/hooks/stop-format-typecheck.js +0 -263
- package/vendor/theus-arsenal/scripts/hooks/suggest-compact.js +0 -286
- package/vendor/theus-arsenal/scripts/hooks/theus-context-monitor.js +0 -289
- package/vendor/theus-arsenal/scripts/hooks/verificacion-factual.js +0 -1278
- package/vendor/theus-arsenal/scripts/lib/agent-data-home.js +0 -96
- package/vendor/theus-arsenal/scripts/lib/cost-estimate.js +0 -66
- package/vendor/theus-arsenal/scripts/lib/hook-flags.js +0 -79
- package/vendor/theus-arsenal/scripts/lib/llm-summary.js +0 -185
- package/vendor/theus-arsenal/scripts/lib/loopback-guard.js +0 -54
- package/vendor/theus-arsenal/scripts/lib/observer-sessions.js +0 -237
- package/vendor/theus-arsenal/scripts/lib/package-manager.d.ts +0 -120
- package/vendor/theus-arsenal/scripts/lib/package-manager.js +0 -434
- package/vendor/theus-arsenal/scripts/lib/path-safety.js +0 -86
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/markdown.js +0 -285
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sdk.js +0 -238
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/server.js +0 -534
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/sessions.js +0 -274
- package/vendor/theus-arsenal/scripts/lib/plan-canvas/ui.js +0 -546
- package/vendor/theus-arsenal/scripts/lib/project-detect.js +0 -451
- package/vendor/theus-arsenal/scripts/lib/resolve-formatter.js +0 -193
- package/vendor/theus-arsenal/scripts/lib/resolve-theus-root.js +0 -101
- package/vendor/theus-arsenal/scripts/lib/session-aliases.d.ts +0 -138
- package/vendor/theus-arsenal/scripts/lib/session-aliases.js +0 -483
- package/vendor/theus-arsenal/scripts/lib/session-bridge.js +0 -155
- package/vendor/theus-arsenal/scripts/lib/session-manager.d.ts +0 -137
- package/vendor/theus-arsenal/scripts/lib/session-manager.js +0 -555
- package/vendor/theus-arsenal/scripts/lib/shell-split.js +0 -86
- package/vendor/theus-arsenal/scripts/lib/shell-substitution.js +0 -501
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/dashboard.js +0 -414
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/health.js +0 -285
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/index.js +0 -22
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/provenance.js +0 -200
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/tracker.js +0 -157
- package/vendor/theus-arsenal/scripts/lib/skill-evolution/versioning.js +0 -246
- package/vendor/theus-arsenal/scripts/lib/transcript-context.js +0 -232
- package/vendor/theus-arsenal/scripts/lib/utils.d.ts +0 -205
- package/vendor/theus-arsenal/scripts/lib/utils.js +0 -658
- package/vendor/theus-arsenal/scripts/plan-canvas.js +0 -341
- package/vendor/theus-arsenal/scripts/setup-package-manager.js +0 -46
- package/vendor/theus-arsenal/scripts/skills-health.js +0 -143
- package/vendor/theus-arsenal/skills/a11y-frontend/SKILL.md +0 -444
- package/vendor/theus-arsenal/skills/accesibilidad/SKILL.md +0 -144
- package/vendor/theus-arsenal/skills/acelerador-throughput-datos/SKILL.md +0 -72
- package/vendor/theus-arsenal/skills/agente-scraper-datos/SKILL.md +0 -771
- package/vendor/theus-arsenal/skills/analisis-plataformas-competencia/SKILL.md +0 -137
- package/vendor/theus-arsenal/skills/api-x/SKILL.md +0 -233
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/SKILL.md +0 -335
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer-loop.sh +0 -374
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/observer.md +0 -188
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/session-guardian.sh +0 -153
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/agents/start-observer.sh +0 -253
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/config.json +0 -8
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/hooks/observe.sh +0 -594
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/detect-project.sh +0 -325
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/instinct-cli.py +0 -1918
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/lib/arsenal-dir.sh +0 -23
- package/vendor/theus-arsenal/skills/aprendizaje-continuo-v2/scripts/test_parse_instinct.py +0 -1420
- package/vendor/theus-arsenal/skills/arquitectura-hexagonal/SKILL.md +0 -275
- package/vendor/theus-arsenal/skills/arquitectura-limpia-android/SKILL.md +0 -340
- package/vendor/theus-arsenal/skills/arquitectura-pipelines-recomendacion/SKILL.md +0 -112
- package/vendor/theus-arsenal/skills/atlas-datos-prediccion/SKILL.md +0 -53
- package/vendor/theus-arsenal/skills/auditoria-arquitectura-agentes/SKILL.md +0 -257
- package/vendor/theus-arsenal/skills/auditoria-produccion/SKILL.md +0 -180
- package/vendor/theus-arsenal/skills/auditoria-rutas-clic/SKILL.md +0 -243
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/SKILL.md +0 -180
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/high-score-example.md +0 -89
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/examples/low-score-example.md +0 -87
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/evaluation-criteria.md +0 -71
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/references/hook-integration.md +0 -90
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/scripts/evaluate.py +0 -409
- package/vendor/theus-arsenal/skills/autoevaluacion-agente/templates/evaluation-report.md +0 -86
- package/vendor/theus-arsenal/skills/automatizacion-ssh-netmiko/SKILL.md +0 -176
- package/vendor/theus-arsenal/skills/base-datos-pubmed/SKILL.md +0 -174
- package/vendor/theus-arsenal/skills/base-datos-uspto/SKILL.md +0 -173
- package/vendor/theus-arsenal/skills/benchmark/SKILL.md +0 -92
- package/vendor/theus-arsenal/skills/bitacora-crecimiento/SKILL.md +0 -120
- package/vendor/theus-arsenal/skills/bucle-verificacion/SKILL.md +0 -125
- package/vendor/theus-arsenal/skills/buscar-primero/SKILL.md +0 -184
- package/vendor/theus-arsenal/skills/busqueda-exa/SKILL.md +0 -111
- package/vendor/theus-arsenal/skills/cache-por-hash/SKILL.md +0 -160
- package/vendor/theus-arsenal/skills/campana-marketing/SKILL.md +0 -118
- package/vendor/theus-arsenal/skills/capacidad-producto/SKILL.md +0 -138
- package/vendor/theus-arsenal/skills/cazador-vulnerabilidades/SKILL.md +0 -104
- package/vendor/theus-arsenal/skills/compactacion-estrategica/SKILL.md +0 -115
- package/vendor/theus-arsenal/skills/comparador-baskets-prediccion/SKILL.md +0 -69
- package/vendor/theus-arsenal/skills/compras-energia/SKILL.md +0 -206
- package/vendor/theus-arsenal/skills/concurrencia-swift-6-2/SKILL.md +0 -224
- package/vendor/theus-arsenal/skills/consejo/SKILL.md +0 -201
- package/vendor/theus-arsenal/skills/construccion-harness-agentes/SKILL.md +0 -78
- package/vendor/theus-arsenal/skills/constructor-conectores/SKILL.md +0 -119
- package/vendor/theus-arsenal/skills/constructor-equipos/SKILL.md +0 -169
- package/vendor/theus-arsenal/skills/consulta-documentacion/SKILL.md +0 -92
- package/vendor/theus-arsenal/skills/consultas-genomicas-gget/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/contacto-inversores/SKILL.md +0 -95
- package/vendor/theus-arsenal/skills/corrutinas-flows-kotlin/SKILL.md +0 -284
- package/vendor/theus-arsenal/skills/creacion-video-remotion/SKILL.md +0 -46
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/3d.md +0 -86
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/animations.md +0 -29
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/charts-bar-chart.tsx +0 -173
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-typewriter.tsx +0 -100
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets/text-animations-word-highlight.tsx +0 -108
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/assets.md +0 -78
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/audio.md +0 -172
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/calculate-metadata.md +0 -104
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/can-decode.md +0 -75
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/charts.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/compositions.md +0 -146
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/display-captions.md +0 -126
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/extract-frames.md +0 -229
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/fonts.md +0 -152
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-audio-duration.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-dimensions.md +0 -68
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/get-video-duration.md +0 -58
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/gifs.md +0 -138
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/images.md +0 -130
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/import-srt-captions.md +0 -67
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/lottie.md +0 -67
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-dom-nodes.md +0 -34
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/measuring-text.md +0 -143
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/sequencing.md +0 -106
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/tailwind.md +0 -11
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/text-animations.md +0 -20
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/timing.md +0 -179
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transcribe-captions.md +0 -19
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/transitions.md +0 -122
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/trimming.md +0 -52
- package/vendor/theus-arsenal/skills/creacion-video-remotion/rules/videos.md +0 -171
- package/vendor/theus-arsenal/skills/cumplimiento-aduanero/SKILL.md +0 -270
- package/vendor/theus-arsenal/skills/cumplimiento-hipaa/SKILL.md +0 -78
- package/vendor/theus-arsenal/skills/datos-sensibles-salud/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/decimales-tokens-evm/SKILL.md +0 -128
- package/vendor/theus-arsenal/skills/decisiones-arquitectura/SKILL.md +0 -206
- package/vendor/theus-arsenal/skills/demos-ui/SKILL.md +0 -469
- package/vendor/theus-arsenal/skills/desarrollo-por-intencion/SKILL.md +0 -369
- package/vendor/theus-arsenal/skills/descubrimiento-marca/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/10_proposito-porque.md +0 -42
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/20_posicionamiento.md +0 -47
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/30_audiencia-nicho.md +0 -53
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/40_personalidad-arquetipo.md +0 -61
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/50_voz-tono.md +0 -62
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/60_narrativa-historia.md +0 -54
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/70_tension-fundador.md +0 -50
- package/vendor/theus-arsenal/skills/descubrimiento-marca/references/90_SINTESIS.md +0 -133
- package/vendor/theus-arsenal/skills/descubrimiento-plugins-laravel/SKILL.md +0 -230
- package/vendor/theus-arsenal/skills/destilado-reglas/SKILL.md +0 -263
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-rules.sh +0 -58
- package/vendor/theus-arsenal/skills/destilado-reglas/scripts/scan-skills.sh +0 -129
- package/vendor/theus-arsenal/skills/diagnostico-bgp/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/direccion-estetica/SKILL.md +0 -220
- package/vendor/theus-arsenal/skills/direccion-estetica/references/taxonomia-generos.md +0 -89
- package/vendor/theus-arsenal/skills/diseno-api/SKILL.md +0 -522
- package/vendor/theus-arsenal/skills/diseno-liquid-glass/SKILL.md +0 -282
- package/vendor/theus-arsenal/skills/e2e-escritorio-windows/SKILL.md +0 -879
- package/vendor/theus-arsenal/skills/edicion-video/SKILL.md +0 -289
- package/vendor/theus-arsenal/skills/enfoque-producto/SKILL.md +0 -91
- package/vendor/theus-arsenal/skills/entornos-flox/SKILL.md +0 -493
- package/vendor/theus-arsenal/skills/estandares-codigo/SKILL.md +0 -548
- package/vendor/theus-arsenal/skills/estandares-cpp/SKILL.md +0 -727
- package/vendor/theus-arsenal/skills/estandares-java/SKILL.md +0 -389
- package/vendor/theus-arsenal/skills/estilo-legado/SKILL.md +0 -149
- package/vendor/theus-arsenal/skills/estructura-informes-competencia/SKILL.md +0 -95
- package/vendor/theus-arsenal/skills/evaluacion-academica/SKILL.md +0 -165
- package/vendor/theus-arsenal/skills/explorador-skills/SKILL.md +0 -129
- package/vendor/theus-arsenal/skills/flujo-git/SKILL.md +0 -714
- package/vendor/theus-arsenal/skills/flujo-ingenieria-ml/SKILL.md +0 -343
- package/vendor/theus-arsenal/skills/flujo-tdd/SKILL.md +0 -584
- package/vendor/theus-arsenal/skills/forja-personas/SKILL.md +0 -298
- package/vendor/theus-arsenal/skills/forja-personas/gacha.py +0 -224
- package/vendor/theus-arsenal/skills/forja-personas/gacha.sh +0 -5
- package/vendor/theus-arsenal/skills/forja-personas/references/avatar-style.md +0 -123
- package/vendor/theus-arsenal/skills/forja-personas/references/boundary-rules.md +0 -53
- package/vendor/theus-arsenal/skills/forja-personas/references/error-handling.md +0 -53
- package/vendor/theus-arsenal/skills/forja-personas/references/identity-tension.md +0 -48
- package/vendor/theus-arsenal/skills/forja-personas/references/naming-system.md +0 -39
- package/vendor/theus-arsenal/skills/forja-personas/references/output-template.md +0 -166
- package/vendor/theus-arsenal/skills/fundamentos-animacion/SKILL.md +0 -296
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/SKILL.md +0 -156
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/generate_icons.swift +0 -258
- package/vendor/theus-arsenal/skills/generacion-iconos-ios/scripts/iconify_gen.sh +0 -235
- package/vendor/theus-arsenal/skills/gestion-excepciones-logisticas/SKILL.md +0 -208
- package/vendor/theus-arsenal/skills/gestion-transportistas/SKILL.md +0 -204
- package/vendor/theus-arsenal/skills/guia-adopcion-ml/SKILL.md +0 -64
- package/vendor/theus-arsenal/skills/harness-agente-autonomo/SKILL.md +0 -252
- package/vendor/theus-arsenal/skills/harness-eval-clinico/SKILL.md +0 -212
- package/vendor/theus-arsenal/skills/harness-evaluacion/SKILL.md +0 -296
- package/vendor/theus-arsenal/skills/harness-generador-evaluador/SKILL.md +0 -254
- package/vendor/theus-arsenal/skills/homelab-diseno-red/SKILL.md +0 -120
- package/vendor/theus-arsenal/skills/homelab-dns-pihole/SKILL.md +0 -264
- package/vendor/theus-arsenal/skills/homelab-preparacion-red/SKILL.md +0 -144
- package/vendor/theus-arsenal/skills/homelab-segmentacion-vlan/SKILL.md +0 -307
- package/vendor/theus-arsenal/skills/homelab-vpn-wireguard/SKILL.md +0 -299
- package/vendor/theus-arsenal/skills/ingenieria-agentica/SKILL.md +0 -96
- package/vendor/theus-arsenal/skills/inspeccion-animaciones-blender/SKILL.md +0 -164
- package/vendor/theus-arsenal/skills/instaladores-python/SKILL.md +0 -820
- package/vendor/theus-arsenal/skills/integracion-jira/SKILL.md +0 -307
- package/vendor/theus-arsenal/skills/inteligencia-leads/SKILL.md +0 -312
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/agente-enriquecimiento.md +0 -87
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/mapeador-mutuos.md +0 -76
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/puntuador-senales.md +0 -60
- package/vendor/theus-arsenal/skills/inteligencia-leads/agents/redactor-outreach.md +0 -102
- package/vendor/theus-arsenal/skills/inteligencia-mercados-prediccion/SKILL.md +0 -53
- package/vendor/theus-arsenal/skills/introspeccion-agente/SKILL.md +0 -150
- package/vendor/theus-arsenal/skills/inventario-skills/SKILL.md +0 -194
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/quick-diff.sh +0 -87
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/save-results.sh +0 -57
- package/vendor/theus-arsenal/skills/inventario-skills/scripts/scan.sh +0 -170
- package/vendor/theus-arsenal/skills/investigacion-mercado/SKILL.md +0 -87
- package/vendor/theus-arsenal/skills/investigacion-oraculos-prediccion/SKILL.md +0 -59
- package/vendor/theus-arsenal/skills/investigacion-profunda/SKILL.md +0 -161
- package/vendor/theus-arsenal/skills/keccak256-nodejs/SKILL.md +0 -100
- package/vendor/theus-arsenal/skills/libro-decisiones-recursivo/SKILL.md +0 -82
- package/vendor/theus-arsenal/skills/lienzo-planes/SKILL.md +0 -111
- package/vendor/theus-arsenal/skills/limpieza-configuracion/SKILL.md +0 -116
- package/vendor/theus-arsenal/skills/logistica-inversa-devoluciones/SKILL.md +0 -241
- package/vendor/theus-arsenal/skills/manejo-errores/SKILL.md +0 -375
- package/vendor/theus-arsenal/skills/materiales-inversores/SKILL.md +0 -101
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/SKILL.md +0 -170
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/forget.mjs +0 -44
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/info.mjs +0 -24
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/init.mjs +0 -152
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/list.mjs +0 -40
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/migrate.mjs +0 -214
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/resume.mjs +0 -36
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/save.mjs +0 -210
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/commands/shared.mjs +0 -402
- package/vendor/theus-arsenal/skills/memoria-por-proyecto/hooks/session-start.mjs +0 -238
- package/vendor/theus-arsenal/skills/metodologia-benchmarks/SKILL.md +0 -131
- package/vendor/theus-arsenal/skills/migraciones-bd/SKILL.md +0 -430
- package/vendor/theus-arsenal/skills/modelos-fundacionales-en-dispositivo/SKILL.md +0 -244
- package/vendor/theus-arsenal/skills/modo-seguro/SKILL.md +0 -86
- package/vendor/theus-arsenal/skills/motion-avanzado/SKILL.md +0 -592
- package/vendor/theus-arsenal/skills/motor-de-contenido/SKILL.md +0 -136
- package/vendor/theus-arsenal/skills/no-conformidades-calidad/SKILL.md +0 -249
- package/vendor/theus-arsenal/skills/onboarding-codigo/SKILL.md +0 -244
- package/vendor/theus-arsenal/skills/operaciones-agentes-empresariales/SKILL.md +0 -51
- package/vendor/theus-arsenal/skills/operaciones-conocimiento/SKILL.md +0 -159
- package/vendor/theus-arsenal/skills/operaciones-correo/SKILL.md +0 -123
- package/vendor/theus-arsenal/skills/operaciones-facturacion/SKILL.md +0 -142
- package/vendor/theus-arsenal/skills/operaciones-flujo-proyectos/SKILL.md +0 -110
- package/vendor/theus-arsenal/skills/operaciones-github/SKILL.md +0 -143
- package/vendor/theus-arsenal/skills/operaciones-google-workspace/SKILL.md +0 -100
- package/vendor/theus-arsenal/skills/operaciones-investigacion/SKILL.md +0 -124
- package/vendor/theus-arsenal/skills/operaciones-mensajes/SKILL.md +0 -103
- package/vendor/theus-arsenal/skills/operaciones-terminal/SKILL.md +0 -110
- package/vendor/theus-arsenal/skills/optimizacion-benchmark/SKILL.md +0 -70
- package/vendor/theus-arsenal/skills/optimizacion-costos-llm/SKILL.md +0 -182
- package/vendor/theus-arsenal/skills/optimizador-conexiones/SKILL.md +0 -191
- package/vendor/theus-arsenal/skills/optimizador-paralelismo/SKILL.md +0 -75
- package/vendor/theus-arsenal/skills/optimizador-prompts/SKILL.md +0 -374
- package/vendor/theus-arsenal/skills/orq-agregar-funcionalidad/SKILL.md +0 -37
- package/vendor/theus-arsenal/skills/orq-cambiar-funcionalidad/SKILL.md +0 -36
- package/vendor/theus-arsenal/skills/orq-construir-mvp/SKILL.md +0 -38
- package/vendor/theus-arsenal/skills/orq-corregir-defecto/SKILL.md +0 -36
- package/vendor/theus-arsenal/skills/orq-pipeline/SKILL.md +0 -134
- package/vendor/theus-arsenal/skills/orq-refinar-codigo/SKILL.md +0 -49
- package/vendor/theus-arsenal/skills/orquestacion-equipos-agentes/SKILL.md +0 -117
- package/vendor/theus-arsenal/skills/pagos-agentes-x402/SKILL.md +0 -237
- package/vendor/theus-arsenal/skills/patrones-angular/SKILL.md +0 -153
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-animations.md +0 -160
- package/vendor/theus-arsenal/skills/patrones-angular/references/angular-aria.md +0 -410
- package/vendor/theus-arsenal/skills/patrones-angular/references/cli.md +0 -86
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-harnesses.md +0 -59
- package/vendor/theus-arsenal/skills/patrones-angular/references/component-styling.md +0 -91
- package/vendor/theus-arsenal/skills/patrones-angular/references/components.md +0 -117
- package/vendor/theus-arsenal/skills/patrones-angular/references/creating-services.md +0 -97
- package/vendor/theus-arsenal/skills/patrones-angular/references/data-resolvers.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/define-routes.md +0 -67
- package/vendor/theus-arsenal/skills/patrones-angular/references/defining-providers.md +0 -72
- package/vendor/theus-arsenal/skills/patrones-angular/references/di-fundamentals.md +0 -120
- package/vendor/theus-arsenal/skills/patrones-angular/references/e2e-testing.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-angular/references/effects.md +0 -83
- package/vendor/theus-arsenal/skills/patrones-angular/references/hierarchical-injectors.md +0 -43
- package/vendor/theus-arsenal/skills/patrones-angular/references/host-elements.md +0 -80
- package/vendor/theus-arsenal/skills/patrones-angular/references/injection-context.md +0 -63
- package/vendor/theus-arsenal/skills/patrones-angular/references/inputs.md +0 -101
- package/vendor/theus-arsenal/skills/patrones-angular/references/linked-signal.md +0 -59
- package/vendor/theus-arsenal/skills/patrones-angular/references/loading-strategies.md +0 -61
- package/vendor/theus-arsenal/skills/patrones-angular/references/mcp.md +0 -67
- package/vendor/theus-arsenal/skills/patrones-angular/references/navigate-to-routes.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/outputs.md +0 -86
- package/vendor/theus-arsenal/skills/patrones-angular/references/reactive-forms.md +0 -122
- package/vendor/theus-arsenal/skills/patrones-angular/references/rendering-strategies.md +0 -44
- package/vendor/theus-arsenal/skills/patrones-angular/references/resource.md +0 -77
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-animations.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-angular/references/route-guards.md +0 -52
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-lifecycle.md +0 -45
- package/vendor/theus-arsenal/skills/patrones-angular/references/router-testing.md +0 -87
- package/vendor/theus-arsenal/skills/patrones-angular/references/show-routes-with-outlets.md +0 -68
- package/vendor/theus-arsenal/skills/patrones-angular/references/signal-forms.md +0 -795
- package/vendor/theus-arsenal/skills/patrones-angular/references/signals-overview.md +0 -94
- package/vendor/theus-arsenal/skills/patrones-angular/references/tailwind-css.md +0 -69
- package/vendor/theus-arsenal/skills/patrones-angular/references/template-driven-forms.md +0 -114
- package/vendor/theus-arsenal/skills/patrones-angular/references/testing-fundamentals.md +0 -65
- package/vendor/theus-arsenal/skills/patrones-animacion/SKILL.md +0 -432
- package/vendor/theus-arsenal/skills/patrones-backend/SKILL.md +0 -560
- package/vendor/theus-arsenal/skills/patrones-cdss-clinico/SKILL.md +0 -249
- package/vendor/theus-arsenal/skills/patrones-cisco-ios/SKILL.md +0 -148
- package/vendor/theus-arsenal/skills/patrones-clickhouse/SKILL.md +0 -443
- package/vendor/theus-arsenal/skills/patrones-compose-multiplatform/SKILL.md +0 -298
- package/vendor/theus-arsenal/skills/patrones-dart-flutter/SKILL.md +0 -566
- package/vendor/theus-arsenal/skills/patrones-despliegue/SKILL.md +0 -426
- package/vendor/theus-arsenal/skills/patrones-django/SKILL.md +0 -739
- package/vendor/theus-arsenal/skills/patrones-django-celery/SKILL.md +0 -456
- package/vendor/theus-arsenal/skills/patrones-docker/SKILL.md +0 -363
- package/vendor/theus-arsenal/skills/patrones-dotnet/SKILL.md +0 -321
- package/vendor/theus-arsenal/skills/patrones-emr-clinico/SKILL.md +0 -168
- package/vendor/theus-arsenal/skills/patrones-fastapi/SKILL.md +0 -513
- package/vendor/theus-arsenal/skills/patrones-frontend/SKILL.md +0 -655
- package/vendor/theus-arsenal/skills/patrones-go/SKILL.md +0 -674
- package/vendor/theus-arsenal/skills/patrones-jpa/SKILL.md +0 -156
- package/vendor/theus-arsenal/skills/patrones-kotlin/SKILL.md +0 -717
- package/vendor/theus-arsenal/skills/patrones-kotlin-exposed/SKILL.md +0 -724
- package/vendor/theus-arsenal/skills/patrones-kotlin-ktor/SKILL.md +0 -694
- package/vendor/theus-arsenal/skills/patrones-kubernetes/SKILL.md +0 -754
- package/vendor/theus-arsenal/skills/patrones-laravel/SKILL.md +0 -414
- package/vendor/theus-arsenal/skills/patrones-mcp/SKILL.md +0 -66
- package/vendor/theus-arsenal/skills/patrones-mysql/SKILL.md +0 -420
- package/vendor/theus-arsenal/skills/patrones-nestjs/SKILL.md +0 -229
- package/vendor/theus-arsenal/skills/patrones-nextjs/SKILL.md +0 -56
- package/vendor/theus-arsenal/skills/patrones-nuxt4/SKILL.md +0 -99
- package/vendor/theus-arsenal/skills/patrones-perl/SKILL.md +0 -508
- package/vendor/theus-arsenal/skills/patrones-postgres/SKILL.md +0 -141
- package/vendor/theus-arsenal/skills/patrones-prisma/SKILL.md +0 -399
- package/vendor/theus-arsenal/skills/patrones-python/SKILL.md +0 -750
- package/vendor/theus-arsenal/skills/patrones-pytorch/SKILL.md +0 -400
- package/vendor/theus-arsenal/skills/patrones-quarkus/SKILL.md +0 -729
- package/vendor/theus-arsenal/skills/patrones-react/SKILL.md +0 -339
- package/vendor/theus-arsenal/skills/patrones-react-native/SKILL.md +0 -325
- package/vendor/theus-arsenal/skills/patrones-redis/SKILL.md +0 -401
- package/vendor/theus-arsenal/skills/patrones-rust/SKILL.md +0 -504
- package/vendor/theus-arsenal/skills/patrones-springboot/SKILL.md +0 -314
- package/vendor/theus-arsenal/skills/patrones-swiftui/SKILL.md +0 -261
- package/vendor/theus-arsenal/skills/patrones-tinystruct/SKILL.md +0 -281
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/architecture.md +0 -90
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/data-handling.md +0 -60
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/database.md +0 -99
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/routing.md +0 -64
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/system-usage.md +0 -97
- package/vendor/theus-arsenal/skills/patrones-tinystruct/references/testing.md +0 -72
- package/vendor/theus-arsenal/skills/patrones-vite/SKILL.md +0 -449
- package/vendor/theus-arsenal/skills/patrones-vue/SKILL.md +0 -469
- package/vendor/theus-arsenal/skills/persistencia-actores-swift/SKILL.md +0 -148
- package/vendor/theus-arsenal/skills/pipeline-opensource/SKILL.md +0 -254
- package/vendor/theus-arsenal/skills/planificacion-demanda-inventario/SKILL.md +0 -236
- package/vendor/theus-arsenal/skills/planificador-trades-prediccion/SKILL.md +0 -60
- package/vendor/theus-arsenal/skills/plano-tecnico/SKILL.md +0 -102
- package/vendor/theus-arsenal/skills/presentaciones-html/SKILL.md +0 -189
- package/vendor/theus-arsenal/skills/presentaciones-html/STYLE_PRESETS.md +0 -330
- package/vendor/theus-arsenal/skills/presentaciones-html/animation-patterns.md +0 -122
- package/vendor/theus-arsenal/skills/presentaciones-html/html-template.md +0 -419
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/export-pdf.sh +0 -418
- package/vendor/theus-arsenal/skills/presentaciones-html/scripts/extract-pptx.py +0 -96
- package/vendor/theus-arsenal/skills/presentaciones-html/viewport-base.css +0 -153
- package/vendor/theus-arsenal/skills/presupuesto-contexto/SKILL.md +0 -263
- package/vendor/theus-arsenal/skills/procesamiento-documentos-nutrient/SKILL.md +0 -168
- package/vendor/theus-arsenal/skills/programacion-produccion/SKILL.md +0 -220
- package/vendor/theus-arsenal/skills/publicacion-cruzada/SKILL.md +0 -117
- package/vendor/theus-arsenal/skills/publicador-social/SKILL.md +0 -121
- package/vendor/theus-arsenal/skills/puerta-de-entrega/SKILL.md +0 -164
- package/vendor/theus-arsenal/skills/puerta-de-entrega/hooks/puerta-entrega.py +0 -242
- package/vendor/theus-arsenal/skills/pulir-interfaces/SKILL.md +0 -126
- package/vendor/theus-arsenal/skills/qa-navegador/SKILL.md +0 -103
- package/vendor/theus-arsenal/skills/ranking-grafo-social/SKILL.md +0 -153
- package/vendor/theus-arsenal/skills/recuperacion-iterativa/SKILL.md +0 -236
- package/vendor/theus-arsenal/skills/redaccion-articulos/SKILL.md +0 -81
- package/vendor/theus-arsenal/skills/regex-vs-llm/SKILL.md +0 -221
- package/vendor/theus-arsenal/skills/regresion-codigo-ia/SKILL.md +0 -388
- package/vendor/theus-arsenal/skills/rendimiento-react/SKILL.md +0 -567
- package/vendor/theus-arsenal/skills/revision-codigo-flutter-dart/SKILL.md +0 -442
- package/vendor/theus-arsenal/skills/revision-literatura-cientifica/SKILL.md +0 -191
- package/vendor/theus-arsenal/skills/revision-multiperspectiva/SKILL.md +0 -302
- package/vendor/theus-arsenal/skills/revision-riesgo-prediccion/SKILL.md +0 -56
- package/vendor/theus-arsenal/skills/revision-seguridad/SKILL.md +0 -505
- package/vendor/theus-arsenal/skills/revision-seguridad/cloud-infrastructure-security.md +0 -361
- package/vendor/theus-arsenal/skills/runtime-bun/SKILL.md +0 -83
- package/vendor/theus-arsenal/skills/salud-codigo-codescene/SKILL.md +0 -163
- package/vendor/theus-arsenal/skills/salud-interfaces-red/SKILL.md +0 -143
- package/vendor/theus-arsenal/skills/seguimiento-costos/SKILL.md +0 -122
- package/vendor/theus-arsenal/skills/seguridad-agentes-trading/SKILL.md +0 -145
- package/vendor/theus-arsenal/skills/seguridad-amm-defi/SKILL.md +0 -166
- package/vendor/theus-arsenal/skills/seguridad-django/SKILL.md +0 -648
- package/vendor/theus-arsenal/skills/seguridad-laravel/SKILL.md +0 -945
- package/vendor/theus-arsenal/skills/seguridad-perl/SKILL.md +0 -507
- package/vendor/theus-arsenal/skills/seguridad-quarkus/SKILL.md +0 -474
- package/vendor/theus-arsenal/skills/seguridad-springboot/SKILL.md +0 -279
- package/vendor/theus-arsenal/skills/seo/SKILL.md +0 -166
- package/vendor/theus-arsenal/skills/sistema-diseno/SKILL.md +0 -81
- package/vendor/theus-arsenal/skills/sistema-operativo-agentico/SKILL.md +0 -375
- package/vendor/theus-arsenal/skills/sistemas-latencia-critica/SKILL.md +0 -65
- package/vendor/theus-arsenal/skills/tdd-django/SKILL.md +0 -735
- package/vendor/theus-arsenal/skills/tdd-laravel/SKILL.md +0 -673
- package/vendor/theus-arsenal/skills/tdd-quarkus/SKILL.md +0 -817
- package/vendor/theus-arsenal/skills/tdd-springboot/SKILL.md +0 -165
- package/vendor/theus-arsenal/skills/testing-cpp/SKILL.md +0 -328
- package/vendor/theus-arsenal/skills/testing-csharp/SKILL.md +0 -321
- package/vendor/theus-arsenal/skills/testing-e2e/SKILL.md +0 -325
- package/vendor/theus-arsenal/skills/testing-go/SKILL.md +0 -719
- package/vendor/theus-arsenal/skills/testing-kotlin/SKILL.md +0 -829
- package/vendor/theus-arsenal/skills/testing-perl/SKILL.md +0 -479
- package/vendor/theus-arsenal/skills/testing-protocolos-di-swift/SKILL.md +0 -196
- package/vendor/theus-arsenal/skills/testing-python/SKILL.md +0 -815
- package/vendor/theus-arsenal/skills/testing-react/SKILL.md +0 -421
- package/vendor/theus-arsenal/skills/testing-rust/SKILL.md +0 -506
- package/vendor/theus-arsenal/skills/tours-de-codigo/SKILL.md +0 -252
- package/vendor/theus-arsenal/skills/traduccion-documentos-visado/SKILL.md +0 -121
- package/vendor/theus-arsenal/skills/ui-a-vue/SKILL.md +0 -141
- package/vendor/theus-arsenal/skills/validacion-config-red/SKILL.md +0 -211
- package/vendor/theus-arsenal/skills/verificacion-django/SKILL.md +0 -470
- package/vendor/theus-arsenal/skills/verificacion-factual/SKILL.md +0 -142
- package/vendor/theus-arsenal/skills/verificacion-laravel/SKILL.md +0 -184
- package/vendor/theus-arsenal/skills/verificacion-quarkus/SKILL.md +0 -485
- package/vendor/theus-arsenal/skills/verificacion-springboot/SKILL.md +0 -237
- package/vendor/theus-arsenal/skills/videodb/SKILL.md +0 -374
- package/vendor/theus-arsenal/skills/videodb/reference/api-reference.md +0 -550
- package/vendor/theus-arsenal/skills/videodb/reference/capture-reference.md +0 -407
- package/vendor/theus-arsenal/skills/videodb/reference/capture.md +0 -101
- package/vendor/theus-arsenal/skills/videodb/reference/editor.md +0 -443
- package/vendor/theus-arsenal/skills/videodb/reference/generative.md +0 -331
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream-reference.md +0 -564
- package/vendor/theus-arsenal/skills/videodb/reference/rtstream.md +0 -65
- package/vendor/theus-arsenal/skills/videodb/reference/search.md +0 -230
- package/vendor/theus-arsenal/skills/videodb/reference/streaming.md +0 -406
- package/vendor/theus-arsenal/skills/videodb/reference/use-cases.md +0 -118
- package/vendor/theus-arsenal/skills/videodb/scripts/ws_listener.py +0 -279
- package/vendor/theus-arsenal/skills/videos-manim/SKILL.md +0 -91
- package/vendor/theus-arsenal/skills/videos-manim/assets/network_graph_scene.py +0 -52
- package/vendor/theus-arsenal/skills/vigilancia-canary/SKILL.md +0 -108
- package/vendor/theus-arsenal/skills/voz-de-marca/SKILL.md +0 -106
|
@@ -1,817 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tdd-quarkus
|
|
3
|
-
description: Desarrollo guiado por tests (TDD) para Quarkus 3.x LTS con JUnit 5, Mockito, REST Assured, testing de rutas Camel y JaCoCo. Úsala al añadir funcionalidades, corregir defectos o refactorizar servicios orientados a eventos.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Flujo TDD para Quarkus
|
|
7
|
-
|
|
8
|
-
Guía de TDD para servicios Quarkus 3.x con cobertura de 80 %+ (unitaria + integración). Optimizada para arquitecturas orientadas a eventos con Apache Camel.
|
|
9
|
-
|
|
10
|
-
## Cuándo usarla
|
|
11
|
-
|
|
12
|
-
- Nuevas funcionalidades o endpoints REST
|
|
13
|
-
- Corrección de defectos o refactorizaciones
|
|
14
|
-
- Al añadir lógica de acceso a datos, reglas de seguridad o streams reactivos
|
|
15
|
-
- Al probar rutas de Apache Camel y manejadores de eventos
|
|
16
|
-
- Al probar servicios orientados a eventos con RabbitMQ
|
|
17
|
-
- Al probar lógica de flujos condicionales
|
|
18
|
-
- Al validar operaciones asíncronas con CompletableFuture
|
|
19
|
-
- Al probar la propagación de LogContext
|
|
20
|
-
|
|
21
|
-
## Flujo de trabajo
|
|
22
|
-
|
|
23
|
-
1. Escribe primero los tests (deben fallar)
|
|
24
|
-
2. Implementa el mínimo código para que pasen
|
|
25
|
-
3. Refactoriza con los tests en verde
|
|
26
|
-
4. Exige la cobertura con JaCoCo (objetivo 80 %+)
|
|
27
|
-
|
|
28
|
-
## Tests unitarios con organización @Nested
|
|
29
|
-
|
|
30
|
-
Sigue este enfoque estructurado para tests completos y legibles:
|
|
31
|
-
|
|
32
|
-
```java
|
|
33
|
-
@ExtendWith(MockitoExtension.class)
|
|
34
|
-
@DisplayName("Tests unitarios de OrderService")
|
|
35
|
-
class OrderServiceTest {
|
|
36
|
-
|
|
37
|
-
@Mock
|
|
38
|
-
private OrderRepository orderRepository;
|
|
39
|
-
|
|
40
|
-
@Mock
|
|
41
|
-
private EventService eventService;
|
|
42
|
-
|
|
43
|
-
@Mock
|
|
44
|
-
private FulfillmentPublisher fulfillmentPublisher;
|
|
45
|
-
|
|
46
|
-
@InjectMocks
|
|
47
|
-
private OrderService orderService;
|
|
48
|
-
|
|
49
|
-
private CreateOrderCommand validCommand;
|
|
50
|
-
|
|
51
|
-
@BeforeEach
|
|
52
|
-
void setUp() {
|
|
53
|
-
validCommand = new CreateOrderCommand(
|
|
54
|
-
"customer-123",
|
|
55
|
-
List.of(new OrderLine("sku-123", 2))
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
@Nested
|
|
60
|
-
@DisplayName("Tests de createOrder")
|
|
61
|
-
class CreateOrder {
|
|
62
|
-
|
|
63
|
-
@Test
|
|
64
|
-
@DisplayName("Debe persistir la orden y publicar el evento de fulfillment")
|
|
65
|
-
void givenValidCommand_whenCreateOrder_thenPersistsAndPublishes() {
|
|
66
|
-
// PREPARAR
|
|
67
|
-
doNothing().when(orderRepository).persist(any(Order.class));
|
|
68
|
-
|
|
69
|
-
// ACTUAR
|
|
70
|
-
OrderReceipt receipt = orderService.createOrder(validCommand);
|
|
71
|
-
|
|
72
|
-
// VERIFICAR
|
|
73
|
-
assertThat(receipt).isNotNull();
|
|
74
|
-
assertThat(receipt.customerId()).isEqualTo("customer-123");
|
|
75
|
-
verify(orderRepository).persist(any(Order.class));
|
|
76
|
-
verify(fulfillmentPublisher).publishAsync(receipt);
|
|
77
|
-
verify(eventService).createSuccessEvent(receipt, "ORDER_CREATED");
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
@Test
|
|
81
|
-
@DisplayName("Debe rechazar un id de cliente ausente")
|
|
82
|
-
void givenMissingCustomerId_whenCreateOrder_thenThrowsBadRequest() {
|
|
83
|
-
// PREPARAR
|
|
84
|
-
CreateOrderCommand invalid = new CreateOrderCommand("", validCommand.lines());
|
|
85
|
-
|
|
86
|
-
// ACTUAR Y VERIFICAR
|
|
87
|
-
WebApplicationException exception = assertThrows(
|
|
88
|
-
WebApplicationException.class,
|
|
89
|
-
() -> orderService.createOrder(invalid)
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
assertThat(exception.getResponse().getStatus()).isEqualTo(400);
|
|
93
|
-
verify(orderRepository, never()).persist(any(Order.class));
|
|
94
|
-
verify(fulfillmentPublisher, never()).publishAsync(any());
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@Test
|
|
98
|
-
@DisplayName("Debe registrar un evento de error cuando la persistencia falla")
|
|
99
|
-
void givenPersistenceFailure_whenCreateOrder_thenRecordsErrorEvent() {
|
|
100
|
-
// PREPARAR
|
|
101
|
-
doThrow(new PersistenceException("database unavailable"))
|
|
102
|
-
.when(orderRepository).persist(any(Order.class));
|
|
103
|
-
|
|
104
|
-
// ACTUAR Y VERIFICAR
|
|
105
|
-
PersistenceException exception = assertThrows(
|
|
106
|
-
PersistenceException.class,
|
|
107
|
-
() -> orderService.createOrder(validCommand)
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
assertThat(exception.getMessage()).contains("database unavailable");
|
|
111
|
-
verify(eventService).createErrorEvent(
|
|
112
|
-
eq(validCommand),
|
|
113
|
-
eq("ORDER_CREATE_FAILED"),
|
|
114
|
-
contains("database unavailable")
|
|
115
|
-
);
|
|
116
|
-
verify(fulfillmentPublisher, never()).publishAsync(any());
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
@Test
|
|
120
|
-
@DisplayName("Debe rechazar comandos nulos")
|
|
121
|
-
void givenNullCommand_whenCreateOrder_thenThrowsNullPointerException() {
|
|
122
|
-
// ACTUAR Y VERIFICAR
|
|
123
|
-
assertThrows(
|
|
124
|
-
NullPointerException.class,
|
|
125
|
-
() -> orderService.createOrder(null)
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
verify(orderRepository, never()).persist(any(Order.class));
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### Patrones clave de testing
|
|
135
|
-
|
|
136
|
-
1. **Clases @Nested**: agrupa los tests por método bajo prueba
|
|
137
|
-
2. **@DisplayName**: descripciones legibles para los reportes de tests
|
|
138
|
-
3. **Convención de nombres**: `givenX_whenY_thenZ` para mayor claridad
|
|
139
|
-
4. **Patrón AAA**: comentarios explícitos `// PREPARAR`, `// ACTUAR`, `// VERIFICAR`
|
|
140
|
-
5. **@BeforeEach**: prepara datos comunes para reducir duplicación
|
|
141
|
-
6. **assertDoesNotThrow**: prueba escenarios de éxito sin capturar excepciones
|
|
142
|
-
7. **assertThrows**: prueba escenarios de excepción validando el mensaje con AssertJ
|
|
143
|
-
8. **Cobertura exhaustiva**: prueba caminos felices, entradas nulas, casos límite y excepciones
|
|
144
|
-
9. **Verificar interacciones**: usa `verify()` de Mockito para asegurar que los métodos se llaman correctamente
|
|
145
|
-
10. **Verificar ausencia**: usa `never()` para asegurar que ciertos métodos NO se llaman en escenarios de error
|
|
146
|
-
|
|
147
|
-
## Testing de rutas Camel
|
|
148
|
-
|
|
149
|
-
```java
|
|
150
|
-
@QuarkusTest
|
|
151
|
-
@DisplayName("Tests de la ruta Camel de reglas de negocio")
|
|
152
|
-
class BusinessRulesRouteTest {
|
|
153
|
-
|
|
154
|
-
@Inject
|
|
155
|
-
CamelContext camelContext;
|
|
156
|
-
|
|
157
|
-
@Inject
|
|
158
|
-
ProducerTemplate producerTemplate;
|
|
159
|
-
|
|
160
|
-
@InjectMock
|
|
161
|
-
EventService eventService;
|
|
162
|
-
|
|
163
|
-
@InjectMock
|
|
164
|
-
DocumentValidator documentValidator;
|
|
165
|
-
|
|
166
|
-
private BusinessRulesPayload testPayload;
|
|
167
|
-
|
|
168
|
-
@BeforeEach
|
|
169
|
-
void setUp() {
|
|
170
|
-
// PREPARAR - Datos de prueba
|
|
171
|
-
testPayload = new BusinessRulesPayload();
|
|
172
|
-
testPayload.setDocumentId(1L);
|
|
173
|
-
testPayload.setFlowProfile(FlowProfile.BASIC);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
@Nested
|
|
177
|
-
@DisplayName("Tests de la ruta business-rules-publisher")
|
|
178
|
-
class BusinessRulesPublisher {
|
|
179
|
-
|
|
180
|
-
@Test
|
|
181
|
-
@DisplayName("Debe publicar correctamente el mensaje en RabbitMQ")
|
|
182
|
-
void givenValidPayload_whenPublish_thenMessageSentToQueue() throws Exception {
|
|
183
|
-
// PREPARAR
|
|
184
|
-
MockEndpoint mockRabbitMQ = camelContext.getEndpoint("mock:rabbitmq", MockEndpoint.class);
|
|
185
|
-
mockRabbitMQ.expectedMessageCount(1);
|
|
186
|
-
|
|
187
|
-
// Reemplaza el endpoint real por un mock para el test
|
|
188
|
-
camelContext.getRouteController().stopRoute("business-rules-publisher");
|
|
189
|
-
AdviceWith.adviceWith(camelContext, "business-rules-publisher", advice -> {
|
|
190
|
-
advice.replaceFromWith("direct:business-rules-publisher");
|
|
191
|
-
advice.weaveByToString(".*spring-rabbitmq.*").replace().to("mock:rabbitmq");
|
|
192
|
-
});
|
|
193
|
-
camelContext.getRouteController().startRoute("business-rules-publisher");
|
|
194
|
-
|
|
195
|
-
// ACTUAR
|
|
196
|
-
producerTemplate.sendBody("direct:business-rules-publisher", testPayload);
|
|
197
|
-
|
|
198
|
-
// VERIFICAR — el body es un String JSON tras .marshal().json(JsonLibrary.Jackson)
|
|
199
|
-
mockRabbitMQ.assertIsSatisfied(5000);
|
|
200
|
-
|
|
201
|
-
assertThat(mockRabbitMQ.getExchanges()).hasSize(1);
|
|
202
|
-
String body = mockRabbitMQ.getExchanges().get(0).getIn().getBody(String.class);
|
|
203
|
-
assertThat(body).contains("\"documentId\":1");
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
@Test
|
|
207
|
-
@DisplayName("Debe realizar el marshalling a JSON")
|
|
208
|
-
void givenPayload_whenPublish_thenMarshalledToJson() throws Exception {
|
|
209
|
-
// PREPARAR
|
|
210
|
-
MockEndpoint mockMarshal = new MockEndpoint("mock:marshal");
|
|
211
|
-
camelContext.addEndpoint("mock:marshal", mockMarshal);
|
|
212
|
-
mockMarshal.expectedMessageCount(1);
|
|
213
|
-
|
|
214
|
-
camelContext.getRouteController().stopRoute("business-rules-publisher");
|
|
215
|
-
AdviceWith.adviceWith(camelContext, "business-rules-publisher", advice -> {
|
|
216
|
-
advice.weaveAddLast().to("mock:marshal");
|
|
217
|
-
});
|
|
218
|
-
camelContext.getRouteController().startRoute("business-rules-publisher");
|
|
219
|
-
|
|
220
|
-
// ACTUAR
|
|
221
|
-
producerTemplate.sendBody("direct:business-rules-publisher", testPayload);
|
|
222
|
-
|
|
223
|
-
// VERIFICAR
|
|
224
|
-
mockMarshal.assertIsSatisfied(5000);
|
|
225
|
-
|
|
226
|
-
String body = mockMarshal.getExchanges().get(0).getIn().getBody(String.class);
|
|
227
|
-
assertThat(body).contains("\"documentId\":1");
|
|
228
|
-
assertThat(body).contains("\"flowProfile\":\"BASIC\"");
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
@Nested
|
|
233
|
-
@DisplayName("Tests de la ruta document-processing")
|
|
234
|
-
class DocumentProcessing {
|
|
235
|
-
|
|
236
|
-
@Test
|
|
237
|
-
@DisplayName("Debe enrutar la factura al procesador correcto")
|
|
238
|
-
void givenInvoiceType_whenProcess_thenRoutesToInvoiceProcessor() throws Exception {
|
|
239
|
-
// PREPARAR
|
|
240
|
-
MockEndpoint mockInvoice = camelContext.getEndpoint("mock:invoice", MockEndpoint.class);
|
|
241
|
-
mockInvoice.expectedMessageCount(1);
|
|
242
|
-
|
|
243
|
-
camelContext.getRouteController().stopRoute("document-processing");
|
|
244
|
-
AdviceWith.adviceWith(camelContext, "document-processing", advice -> {
|
|
245
|
-
advice.weaveByToString(".*direct:process-invoice.*").replace().to("mock:invoice");
|
|
246
|
-
});
|
|
247
|
-
camelContext.getRouteController().startRoute("document-processing");
|
|
248
|
-
|
|
249
|
-
// ACTUAR
|
|
250
|
-
producerTemplate.sendBodyAndHeader("direct:process-document",
|
|
251
|
-
testPayload, "documentType", "INVOICE");
|
|
252
|
-
|
|
253
|
-
// VERIFICAR
|
|
254
|
-
mockInvoice.assertIsSatisfied(5000);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
@Test
|
|
258
|
-
@DisplayName("Debe manejar los errores de validación con elegancia")
|
|
259
|
-
void givenValidationError_whenProcess_thenRoutesToErrorHandler() throws Exception {
|
|
260
|
-
// PREPARAR
|
|
261
|
-
MockEndpoint mockError = camelContext.getEndpoint("mock:error", MockEndpoint.class);
|
|
262
|
-
mockError.expectedMessageCount(1);
|
|
263
|
-
|
|
264
|
-
camelContext.getRouteController().stopRoute("document-processing");
|
|
265
|
-
AdviceWith.adviceWith(camelContext, "document-processing", advice -> {
|
|
266
|
-
advice.weaveByToString(".*direct:validation-error-handler.*")
|
|
267
|
-
.replace().to("mock:error");
|
|
268
|
-
});
|
|
269
|
-
camelContext.getRouteController().startRoute("document-processing");
|
|
270
|
-
|
|
271
|
-
// Mockea el bean validador para que lance una excepción
|
|
272
|
-
when(documentValidator.validate(any())).thenThrow(new ValidationException("Invalid document"));
|
|
273
|
-
|
|
274
|
-
// ACTUAR
|
|
275
|
-
producerTemplate.sendBody("direct:process-document", testPayload);
|
|
276
|
-
|
|
277
|
-
// VERIFICAR
|
|
278
|
-
mockError.assertIsSatisfied(5000);
|
|
279
|
-
|
|
280
|
-
Exception exception = mockError.getExchanges().get(0).getException();
|
|
281
|
-
assertThat(exception).isInstanceOf(ValidationException.class);
|
|
282
|
-
assertThat(exception.getMessage()).contains("Invalid document");
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Testing de servicios de eventos
|
|
289
|
-
|
|
290
|
-
```java
|
|
291
|
-
@ExtendWith(MockitoExtension.class)
|
|
292
|
-
@DisplayName("Tests unitarios de EventService")
|
|
293
|
-
class EventServiceTest {
|
|
294
|
-
|
|
295
|
-
@Mock
|
|
296
|
-
private EventRepository eventRepository;
|
|
297
|
-
|
|
298
|
-
@Mock
|
|
299
|
-
private ObjectMapper objectMapper;
|
|
300
|
-
|
|
301
|
-
@InjectMocks
|
|
302
|
-
private EventService eventService;
|
|
303
|
-
|
|
304
|
-
private BusinessRulesPayload testPayload;
|
|
305
|
-
|
|
306
|
-
@BeforeEach
|
|
307
|
-
void setUp() {
|
|
308
|
-
// PREPARAR
|
|
309
|
-
testPayload = new BusinessRulesPayload();
|
|
310
|
-
testPayload.setDocumentId(1L);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
@Nested
|
|
314
|
-
@DisplayName("Tests de createSuccessEvent")
|
|
315
|
-
class CreateSuccessEvent {
|
|
316
|
-
|
|
317
|
-
@Test
|
|
318
|
-
@DisplayName("Debe crear un evento de éxito con los atributos correctos")
|
|
319
|
-
void givenValidPayload_whenCreateSuccessEvent_thenEventPersisted() throws Exception {
|
|
320
|
-
// PREPARAR
|
|
321
|
-
when(objectMapper.writeValueAsString(testPayload)).thenReturn("{\"documentId\":1}");
|
|
322
|
-
|
|
323
|
-
// ACTUAR
|
|
324
|
-
assertDoesNotThrow(() ->
|
|
325
|
-
eventService.createSuccessEvent(testPayload, "DOCUMENT_PROCESSED"));
|
|
326
|
-
|
|
327
|
-
// VERIFICAR
|
|
328
|
-
verify(eventRepository).persist(argThat(event ->
|
|
329
|
-
event.getType().equals("DOCUMENT_PROCESSED") &&
|
|
330
|
-
event.getStatus() == EventStatus.SUCCESS &&
|
|
331
|
-
event.getPayload().equals("{\"documentId\":1}") &&
|
|
332
|
-
event.getTimestamp() != null
|
|
333
|
-
));
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
@Test
|
|
337
|
-
@DisplayName("Debe lanzar una excepción cuando el payload es nulo")
|
|
338
|
-
void givenNullPayload_whenCreateSuccessEvent_thenThrowsException() {
|
|
339
|
-
// PREPARAR
|
|
340
|
-
Object nullPayload = null;
|
|
341
|
-
|
|
342
|
-
// ACTUAR Y VERIFICAR
|
|
343
|
-
NullPointerException exception = assertThrows(
|
|
344
|
-
NullPointerException.class,
|
|
345
|
-
() -> eventService.createSuccessEvent(nullPayload, "EVENT_TYPE")
|
|
346
|
-
);
|
|
347
|
-
|
|
348
|
-
assertThat(exception.getMessage()).isEqualTo("El payload no puede ser nulo");
|
|
349
|
-
verify(eventRepository, never()).persist(any());
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
@Nested
|
|
354
|
-
@DisplayName("Tests de createErrorEvent")
|
|
355
|
-
class CreateErrorEvent {
|
|
356
|
-
|
|
357
|
-
@Test
|
|
358
|
-
@DisplayName("Debe crear un evento de error con el mensaje de error")
|
|
359
|
-
void givenError_whenCreateErrorEvent_thenEventPersistedWithMessage() throws Exception {
|
|
360
|
-
// PREPARAR
|
|
361
|
-
String errorMessage = "Processing failed";
|
|
362
|
-
when(objectMapper.writeValueAsString(testPayload)).thenReturn("{\"documentId\":1}");
|
|
363
|
-
|
|
364
|
-
// ACTUAR
|
|
365
|
-
assertDoesNotThrow(() ->
|
|
366
|
-
eventService.createErrorEvent(testPayload, "PROCESSING_ERROR", errorMessage));
|
|
367
|
-
|
|
368
|
-
// VERIFICAR
|
|
369
|
-
verify(eventRepository).persist(argThat(event ->
|
|
370
|
-
event.getType().equals("PROCESSING_ERROR") &&
|
|
371
|
-
event.getStatus() == EventStatus.ERROR &&
|
|
372
|
-
event.getErrorMessage().equals(errorMessage) &&
|
|
373
|
-
event.getPayload().equals("{\"documentId\":1}")
|
|
374
|
-
));
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
@ParameterizedTest
|
|
378
|
-
@DisplayName("Debe rechazar mensajes de error inválidos")
|
|
379
|
-
@ValueSource(strings = {"", " "})
|
|
380
|
-
void givenBlankErrorMessage_whenCreateErrorEvent_thenThrowsException(String blankMessage) {
|
|
381
|
-
// ACTUAR Y VERIFICAR
|
|
382
|
-
IllegalArgumentException exception = assertThrows(
|
|
383
|
-
IllegalArgumentException.class,
|
|
384
|
-
() -> eventService.createErrorEvent(testPayload, "ERROR", blankMessage)
|
|
385
|
-
);
|
|
386
|
-
|
|
387
|
-
assertThat(exception.getMessage()).contains("El mensaje de error no puede estar en blanco");
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
## Testing de CompletableFuture
|
|
394
|
-
|
|
395
|
-
```java
|
|
396
|
-
@ExtendWith(MockitoExtension.class)
|
|
397
|
-
@DisplayName("Tests unitarios de FileStorageService")
|
|
398
|
-
class FileStorageServiceTest {
|
|
399
|
-
|
|
400
|
-
@Mock
|
|
401
|
-
private S3Client s3Client;
|
|
402
|
-
|
|
403
|
-
@Mock
|
|
404
|
-
private ExecutorService executorService;
|
|
405
|
-
|
|
406
|
-
@InjectMocks
|
|
407
|
-
private FileStorageService fileStorageService;
|
|
408
|
-
|
|
409
|
-
private InputStream testInputStream;
|
|
410
|
-
private LogContext testLogContext;
|
|
411
|
-
|
|
412
|
-
@BeforeEach
|
|
413
|
-
void setUp() {
|
|
414
|
-
// PREPARAR
|
|
415
|
-
testInputStream = new ByteArrayInputStream("test content".getBytes());
|
|
416
|
-
testLogContext = new LogContext();
|
|
417
|
-
testLogContext.put("traceId", "trace-123");
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
@Nested
|
|
421
|
-
@DisplayName("Tests de uploadOriginalFile")
|
|
422
|
-
class UploadOriginalFile {
|
|
423
|
-
|
|
424
|
-
@Test
|
|
425
|
-
@DisplayName("Debe subir el archivo con éxito y devolver la info del documento")
|
|
426
|
-
void givenValidFile_whenUpload_thenReturnsDocumentInfo() throws Exception {
|
|
427
|
-
// PREPARAR
|
|
428
|
-
doAnswer(invocation -> {
|
|
429
|
-
((Runnable) invocation.getArgument(0)).run();
|
|
430
|
-
return null;
|
|
431
|
-
}).when(executorService).execute(any(Runnable.class));
|
|
432
|
-
|
|
433
|
-
when(s3Client.putObject(any(PutObjectRequest.class), any(RequestBody.class)))
|
|
434
|
-
.thenReturn(PutObjectResponse.builder().build());
|
|
435
|
-
|
|
436
|
-
// ACTUAR
|
|
437
|
-
CompletableFuture<StoredDocumentInfo> future =
|
|
438
|
-
fileStorageService.uploadOriginalFile(testInputStream, 1024L,
|
|
439
|
-
testLogContext, InvoiceFormat.UBL);
|
|
440
|
-
|
|
441
|
-
StoredDocumentInfo result = future.join();
|
|
442
|
-
|
|
443
|
-
// VERIFICAR
|
|
444
|
-
assertThat(result).isNotNull();
|
|
445
|
-
assertThat(result.getPath()).isNotBlank();
|
|
446
|
-
assertThat(result.getSize()).isEqualTo(1024L);
|
|
447
|
-
assertThat(result.getUploadedAt()).isNotNull();
|
|
448
|
-
|
|
449
|
-
verify(s3Client).putObject(any(PutObjectRequest.class), any(RequestBody.class));
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
@Test
|
|
453
|
-
@DisplayName("Debe manejar el fallo de subida a S3")
|
|
454
|
-
void givenS3Failure_whenUpload_thenCompletableFutureFails() {
|
|
455
|
-
// PREPARAR — ejecuta de forma síncrona para que la excepción se propague por el future
|
|
456
|
-
doAnswer(invocation -> {
|
|
457
|
-
((Runnable) invocation.getArgument(0)).run();
|
|
458
|
-
return null;
|
|
459
|
-
}).when(executorService).execute(any(Runnable.class));
|
|
460
|
-
|
|
461
|
-
when(s3Client.putObject(any(PutObjectRequest.class), any(RequestBody.class)))
|
|
462
|
-
.thenThrow(new StorageException("S3 unavailable"));
|
|
463
|
-
|
|
464
|
-
// ACTUAR
|
|
465
|
-
CompletableFuture<StoredDocumentInfo> future =
|
|
466
|
-
fileStorageService.uploadOriginalFile(testInputStream, 1024L,
|
|
467
|
-
testLogContext, InvoiceFormat.UBL);
|
|
468
|
-
|
|
469
|
-
// VERIFICAR
|
|
470
|
-
assertThatThrownBy(() -> future.join())
|
|
471
|
-
.isInstanceOf(CompletionException.class)
|
|
472
|
-
.hasCauseInstanceOf(StorageException.class)
|
|
473
|
-
.hasMessageContaining("S3 unavailable");
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
@Test
|
|
477
|
-
@DisplayName("Debe propagar el LogContext a la operación asíncrona")
|
|
478
|
-
void givenLogContext_whenUpload_thenContextPropagated() throws Exception {
|
|
479
|
-
// PREPARAR
|
|
480
|
-
AtomicReference<LogContext> capturedContext = new AtomicReference<>();
|
|
481
|
-
|
|
482
|
-
doAnswer(invocation -> {
|
|
483
|
-
capturedContext.set(CustomLog.getCurrentContext());
|
|
484
|
-
((Runnable) invocation.getArgument(0)).run();
|
|
485
|
-
return null;
|
|
486
|
-
}).when(executorService).execute(any(Runnable.class));
|
|
487
|
-
|
|
488
|
-
// ACTUAR
|
|
489
|
-
fileStorageService.uploadOriginalFile(testInputStream, 1024L,
|
|
490
|
-
testLogContext, InvoiceFormat.UBL).join();
|
|
491
|
-
|
|
492
|
-
// VERIFICAR
|
|
493
|
-
assertThat(capturedContext.get()).isNotNull();
|
|
494
|
-
assertThat(capturedContext.get().get("traceId")).isEqualTo("trace-123");
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
```
|
|
499
|
-
|
|
500
|
-
## Tests de la capa resource (REST Assured)
|
|
501
|
-
|
|
502
|
-
```java
|
|
503
|
-
@QuarkusTest
|
|
504
|
-
@DisplayName("Tests de API de DocumentResource")
|
|
505
|
-
class DocumentResourceTest {
|
|
506
|
-
|
|
507
|
-
@InjectMock
|
|
508
|
-
DocumentService documentService;
|
|
509
|
-
|
|
510
|
-
@Nested
|
|
511
|
-
@DisplayName("Tests de GET /api/documents")
|
|
512
|
-
class ListDocuments {
|
|
513
|
-
|
|
514
|
-
@Test
|
|
515
|
-
@DisplayName("Debe devolver la lista de documentos")
|
|
516
|
-
void givenDocumentsExist_whenList_thenReturnsOk() {
|
|
517
|
-
// PREPARAR
|
|
518
|
-
List<Document> documents = List.of(createDocument(1L, "DOC-001"));
|
|
519
|
-
when(documentService.list(0, 20)).thenReturn(documents);
|
|
520
|
-
|
|
521
|
-
// ACTUAR Y VERIFICAR
|
|
522
|
-
given()
|
|
523
|
-
.when().get("/api/documents")
|
|
524
|
-
.then()
|
|
525
|
-
.statusCode(200)
|
|
526
|
-
.body("$.size()", is(1))
|
|
527
|
-
.body("[0].referenceNumber", equalTo("DOC-001"));
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
@Nested
|
|
532
|
-
@DisplayName("Tests de POST /api/documents")
|
|
533
|
-
class CreateDocument {
|
|
534
|
-
|
|
535
|
-
@Test
|
|
536
|
-
@DisplayName("Debe crear el documento y devolver 201")
|
|
537
|
-
void givenValidRequest_whenCreate_thenReturns201() {
|
|
538
|
-
// PREPARAR
|
|
539
|
-
Document document = createDocument(1L, "DOC-001");
|
|
540
|
-
when(documentService.create(any())).thenReturn(document);
|
|
541
|
-
|
|
542
|
-
// ACTUAR Y VERIFICAR
|
|
543
|
-
given()
|
|
544
|
-
.contentType(ContentType.JSON)
|
|
545
|
-
.body("""
|
|
546
|
-
{
|
|
547
|
-
"referenceNumber": "DOC-001",
|
|
548
|
-
"description": "Documento de prueba",
|
|
549
|
-
"validUntil": "2030-01-01T00:00:00Z",
|
|
550
|
-
"categories": ["test"]
|
|
551
|
-
}
|
|
552
|
-
""")
|
|
553
|
-
.when().post("/api/documents")
|
|
554
|
-
.then()
|
|
555
|
-
.statusCode(201)
|
|
556
|
-
.header("Location", containsString("/api/documents/1"))
|
|
557
|
-
.body("referenceNumber", equalTo("DOC-001"));
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
@Test
|
|
561
|
-
@DisplayName("Debe devolver 400 ante entrada inválida")
|
|
562
|
-
void givenInvalidRequest_whenCreate_thenReturns400() {
|
|
563
|
-
// ACTUAR Y VERIFICAR
|
|
564
|
-
given()
|
|
565
|
-
.contentType(ContentType.JSON)
|
|
566
|
-
.body("""
|
|
567
|
-
{
|
|
568
|
-
"referenceNumber": "",
|
|
569
|
-
"description": "Prueba"
|
|
570
|
-
}
|
|
571
|
-
""")
|
|
572
|
-
.when().post("/api/documents")
|
|
573
|
-
.then()
|
|
574
|
-
.statusCode(400);
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
private Document createDocument(Long id, String referenceNumber) {
|
|
579
|
-
Document document = new Document();
|
|
580
|
-
document.setId(id);
|
|
581
|
-
document.setReferenceNumber(referenceNumber);
|
|
582
|
-
document.setStatus(DocumentStatus.PENDING);
|
|
583
|
-
return document;
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
```
|
|
587
|
-
|
|
588
|
-
## Tests de integración con base de datos real
|
|
589
|
-
|
|
590
|
-
```java
|
|
591
|
-
@QuarkusTest
|
|
592
|
-
@TestProfile(IntegrationTestProfile.class)
|
|
593
|
-
@DisplayName("Tests de integración de documentos")
|
|
594
|
-
class DocumentIntegrationTest {
|
|
595
|
-
|
|
596
|
-
@Test
|
|
597
|
-
@Transactional
|
|
598
|
-
@DisplayName("Debe crear y recuperar un documento vía API")
|
|
599
|
-
void givenNewDocument_whenCreateAndRetrieve_thenSuccessful() {
|
|
600
|
-
// ACTUAR - Crear vía API
|
|
601
|
-
Long id = given()
|
|
602
|
-
.contentType(ContentType.JSON)
|
|
603
|
-
.body("""
|
|
604
|
-
{
|
|
605
|
-
"referenceNumber": "INT-001",
|
|
606
|
-
"description": "Test de integración",
|
|
607
|
-
"validUntil": "2030-01-01T00:00:00Z",
|
|
608
|
-
"categories": ["test"]
|
|
609
|
-
}
|
|
610
|
-
""")
|
|
611
|
-
.when().post("/api/documents")
|
|
612
|
-
.then()
|
|
613
|
-
.statusCode(201)
|
|
614
|
-
.extract().path("id");
|
|
615
|
-
|
|
616
|
-
// VERIFICAR - Recuperar vía API
|
|
617
|
-
given()
|
|
618
|
-
.when().get("/api/documents/" + id)
|
|
619
|
-
.then()
|
|
620
|
-
.statusCode(200)
|
|
621
|
-
.body("referenceNumber", equalTo("INT-001"));
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
```
|
|
625
|
-
|
|
626
|
-
## Cobertura con JaCoCo
|
|
627
|
-
|
|
628
|
-
### Configuración Maven (completa)
|
|
629
|
-
|
|
630
|
-
```xml
|
|
631
|
-
<plugin>
|
|
632
|
-
<groupId>org.jacoco</groupId>
|
|
633
|
-
<artifactId>jacoco-maven-plugin</artifactId>
|
|
634
|
-
<version>0.8.13</version>
|
|
635
|
-
<executions>
|
|
636
|
-
<!-- Prepara el agente para la ejecución de tests -->
|
|
637
|
-
<execution>
|
|
638
|
-
<id>prepare-agent</id>
|
|
639
|
-
<goals>
|
|
640
|
-
<goal>prepare-agent</goal>
|
|
641
|
-
</goals>
|
|
642
|
-
</execution>
|
|
643
|
-
|
|
644
|
-
<!-- Genera el reporte de cobertura -->
|
|
645
|
-
<execution>
|
|
646
|
-
<id>report</id>
|
|
647
|
-
<phase>verify</phase>
|
|
648
|
-
<goals>
|
|
649
|
-
<goal>report</goal>
|
|
650
|
-
</goals>
|
|
651
|
-
</execution>
|
|
652
|
-
|
|
653
|
-
<!-- Exige los umbrales de cobertura -->
|
|
654
|
-
<execution>
|
|
655
|
-
<id>check</id>
|
|
656
|
-
<goals>
|
|
657
|
-
<goal>check</goal>
|
|
658
|
-
</goals>
|
|
659
|
-
<configuration>
|
|
660
|
-
<rules>
|
|
661
|
-
<rule>
|
|
662
|
-
<element>BUNDLE</element>
|
|
663
|
-
<limits>
|
|
664
|
-
<limit>
|
|
665
|
-
<counter>LINE</counter>
|
|
666
|
-
<value>COVEREDRATIO</value>
|
|
667
|
-
<minimum>0.80</minimum>
|
|
668
|
-
</limit>
|
|
669
|
-
<limit>
|
|
670
|
-
<counter>BRANCH</counter>
|
|
671
|
-
<value>COVEREDRATIO</value>
|
|
672
|
-
<minimum>0.70</minimum>
|
|
673
|
-
</limit>
|
|
674
|
-
</limits>
|
|
675
|
-
</rule>
|
|
676
|
-
</rules>
|
|
677
|
-
</configuration>
|
|
678
|
-
</execution>
|
|
679
|
-
</executions>
|
|
680
|
-
</plugin>
|
|
681
|
-
```
|
|
682
|
-
|
|
683
|
-
Ejecuta los tests con cobertura:
|
|
684
|
-
```bash
|
|
685
|
-
mvn clean test
|
|
686
|
-
mvn jacoco:report
|
|
687
|
-
mvn jacoco:check
|
|
688
|
-
|
|
689
|
-
# Reporte en: target/site/jacoco/index.html
|
|
690
|
-
```
|
|
691
|
-
|
|
692
|
-
## Dependencias de test
|
|
693
|
-
|
|
694
|
-
```xml
|
|
695
|
-
<dependencies>
|
|
696
|
-
<!-- Testing de Quarkus -->
|
|
697
|
-
<dependency>
|
|
698
|
-
<groupId>io.quarkus</groupId>
|
|
699
|
-
<artifactId>quarkus-junit5</artifactId>
|
|
700
|
-
<scope>test</scope>
|
|
701
|
-
</dependency>
|
|
702
|
-
<dependency>
|
|
703
|
-
<groupId>io.quarkus</groupId>
|
|
704
|
-
<artifactId>quarkus-junit5-mockito</artifactId>
|
|
705
|
-
<scope>test</scope>
|
|
706
|
-
</dependency>
|
|
707
|
-
|
|
708
|
-
<!-- Mockito -->
|
|
709
|
-
<dependency>
|
|
710
|
-
<groupId>org.mockito</groupId>
|
|
711
|
-
<artifactId>mockito-core</artifactId>
|
|
712
|
-
<scope>test</scope>
|
|
713
|
-
</dependency>
|
|
714
|
-
|
|
715
|
-
<!-- AssertJ (preferido sobre las aserciones de JUnit) -->
|
|
716
|
-
<dependency>
|
|
717
|
-
<groupId>org.assertj</groupId>
|
|
718
|
-
<artifactId>assertj-core</artifactId>
|
|
719
|
-
<version>3.24.2</version>
|
|
720
|
-
<scope>test</scope>
|
|
721
|
-
</dependency>
|
|
722
|
-
|
|
723
|
-
<!-- REST Assured -->
|
|
724
|
-
<dependency>
|
|
725
|
-
<groupId>io.rest-assured</groupId>
|
|
726
|
-
<artifactId>rest-assured</artifactId>
|
|
727
|
-
<scope>test</scope>
|
|
728
|
-
</dependency>
|
|
729
|
-
|
|
730
|
-
<!-- Testing de Camel -->
|
|
731
|
-
<dependency>
|
|
732
|
-
<groupId>org.apache.camel.quarkus</groupId>
|
|
733
|
-
<artifactId>camel-quarkus-junit5</artifactId>
|
|
734
|
-
<scope>test</scope>
|
|
735
|
-
</dependency>
|
|
736
|
-
</dependencies>
|
|
737
|
-
```
|
|
738
|
-
|
|
739
|
-
## Buenas prácticas
|
|
740
|
-
|
|
741
|
-
### Organización de tests
|
|
742
|
-
- Usa clases `@Nested` para agrupar tests por método bajo prueba
|
|
743
|
-
- Usa `@DisplayName` para descripciones legibles visibles en los reportes
|
|
744
|
-
- Sigue la convención `givenX_whenY_thenZ` en los nombres de métodos de test
|
|
745
|
-
- Usa `@BeforeEach` para preparar datos comunes y reducir duplicación
|
|
746
|
-
|
|
747
|
-
### Estructura de tests
|
|
748
|
-
- Sigue el patrón AAA con comentarios explícitos (`// PREPARAR`, `// ACTUAR`, `// VERIFICAR`)
|
|
749
|
-
- Usa `assertDoesNotThrow` para escenarios de éxito
|
|
750
|
-
- Usa `assertThrows` para escenarios de excepción validando el mensaje
|
|
751
|
-
- Verifica que los mensajes de excepción coinciden con lo esperado usando `contains()` o `isEqualTo()` de AssertJ
|
|
752
|
-
|
|
753
|
-
### Cobertura de tests
|
|
754
|
-
- Prueba los caminos felices de todos los métodos públicos
|
|
755
|
-
- Prueba el manejo de entradas nulas
|
|
756
|
-
- Prueba casos límite (colecciones vacías, valores frontera, IDs negativos, strings en blanco)
|
|
757
|
-
- Prueba exhaustivamente los escenarios de excepción
|
|
758
|
-
- Mockea todas las dependencias externas (repositorios, servicios, endpoints de Camel)
|
|
759
|
-
- Apunta a 80 %+ de cobertura de líneas y 70 %+ de ramas
|
|
760
|
-
|
|
761
|
-
### Aserciones
|
|
762
|
-
- **Prefiere AssertJ** (`assertThat`) sobre las aserciones de JUnit para comprobar valores
|
|
763
|
-
- Usa la API fluida de AssertJ para legibilidad: `assertThat(list).hasSize(3).contains(item)`
|
|
764
|
-
- Para excepciones: captura con `assertThrows` de JUnit y valida el mensaje con AssertJ
|
|
765
|
-
- Para caminos de éxito sin excepciones: usa `assertDoesNotThrow` de JUnit
|
|
766
|
-
- Para colecciones: `extracting()`, `filteredOn()`, `containsExactly()`
|
|
767
|
-
|
|
768
|
-
### Integración en tests
|
|
769
|
-
- Usa `@QuarkusTest` para tests de integración
|
|
770
|
-
- Usa `@InjectMock` para mockear dependencias en tests de Quarkus
|
|
771
|
-
- Prefiere REST Assured para probar la API
|
|
772
|
-
- Usa `@TestProfile` para configuración específica de tests
|
|
773
|
-
|
|
774
|
-
### Testing orientado a eventos
|
|
775
|
-
- Prueba rutas de Camel con `AdviceWith` y `MockEndpoint`
|
|
776
|
-
- Usa la anotación `@CamelQuarkusTest` (si usas tests independientes de Camel)
|
|
777
|
-
- Verifica el contenido de los mensajes, cabeceras y lógica de enrutamiento
|
|
778
|
-
- Prueba las rutas de manejo de errores por separado
|
|
779
|
-
- Mockea sistemas externos (RabbitMQ, S3, bases de datos) en tests unitarios
|
|
780
|
-
|
|
781
|
-
### Testing de rutas Camel
|
|
782
|
-
- Usa `MockEndpoint` para verificar el flujo de mensajes
|
|
783
|
-
- Usa `AdviceWith` para modificar rutas en tests (reemplazar endpoints por mocks)
|
|
784
|
-
- Prueba la transformación y el marshalling de mensajes
|
|
785
|
-
- Prueba el manejo de excepciones y las dead letter queues
|
|
786
|
-
|
|
787
|
-
### Testing de operaciones asíncronas
|
|
788
|
-
- Prueba los escenarios de éxito y fallo de CompletableFuture
|
|
789
|
-
- Usa `.join()` en tests para esperar la finalización asíncrona
|
|
790
|
-
- Prueba la propagación de excepciones desde CompletableFuture
|
|
791
|
-
- Verifica la propagación del LogContext a las operaciones asíncronas
|
|
792
|
-
|
|
793
|
-
### Rendimiento
|
|
794
|
-
- Mantén los tests rápidos y aislados
|
|
795
|
-
- Ejecuta los tests en modo continuo: `mvn quarkus:test`
|
|
796
|
-
- Usa tests parametrizados (`@ParameterizedTest`) para variaciones de entrada
|
|
797
|
-
- Construye builders de datos de prueba o métodos factory reutilizables
|
|
798
|
-
|
|
799
|
-
### Específico de Quarkus
|
|
800
|
-
- Mantente en la última versión LTS (Quarkus 3.x)
|
|
801
|
-
- Prueba periódicamente la compatibilidad con compilación nativa
|
|
802
|
-
- Usa perfiles de test de Quarkus para distintos escenarios
|
|
803
|
-
- Aprovecha los dev services de Quarkus para pruebas locales
|
|
804
|
-
- Usa `@InjectMock` en lugar de `@MockBean` (específico de Quarkus)
|
|
805
|
-
|
|
806
|
-
### Buenas prácticas de verificación
|
|
807
|
-
- Verifica siempre las interacciones sobre las dependencias mockeadas
|
|
808
|
-
- Usa `verify(mock, never())` para asegurar que ciertos métodos NO se llaman en escenarios de error
|
|
809
|
-
- Usa `argThat()` para coincidencia compleja de argumentos
|
|
810
|
-
- Verifica el orden de las llamadas cuando importe: `InOrder` de Mockito
|
|
811
|
-
|
|
812
|
-
## Skills relacionadas
|
|
813
|
-
|
|
814
|
-
- `patrones-quarkus`
|
|
815
|
-
- `seguridad-quarkus`
|
|
816
|
-
- `verificacion-quarkus`
|
|
817
|
-
- `flujo-tdd`
|