theus-cli-linux-x64 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,815 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: testing-python
|
|
3
|
-
description: Estrategias de testing en Python con pytest, metodología TDD, fixtures, mocking, parametrización y requisitos de cobertura.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Patrones de testing en Python
|
|
7
|
-
|
|
8
|
-
Estrategias integrales de testing para aplicaciones Python usando pytest, metodología TDD y buenas prácticas.
|
|
9
|
-
|
|
10
|
-
## Cuándo activar
|
|
11
|
-
|
|
12
|
-
- Al escribir código Python nuevo (sigue TDD: rojo, verde, refactor)
|
|
13
|
-
- Al diseñar suites de tests para proyectos Python
|
|
14
|
-
- Al revisar la cobertura de tests de Python
|
|
15
|
-
- Al configurar infraestructura de testing
|
|
16
|
-
|
|
17
|
-
## Filosofía central de testing
|
|
18
|
-
|
|
19
|
-
### Desarrollo guiado por tests (TDD)
|
|
20
|
-
|
|
21
|
-
Sigue siempre el ciclo TDD:
|
|
22
|
-
|
|
23
|
-
1. **ROJO**: escribe un test que falle para el comportamiento deseado
|
|
24
|
-
2. **VERDE**: escribe el código mínimo para que el test pase
|
|
25
|
-
3. **REFACTOR**: mejora el código manteniendo los tests en verde
|
|
26
|
-
|
|
27
|
-
```python
|
|
28
|
-
# Paso 1: escribir el test que falla (ROJO)
|
|
29
|
-
def test_add_numbers():
|
|
30
|
-
result = add(2, 3)
|
|
31
|
-
assert result == 5
|
|
32
|
-
|
|
33
|
-
# Paso 2: escribir la implementación mínima (VERDE)
|
|
34
|
-
def add(a, b):
|
|
35
|
-
return a + b
|
|
36
|
-
|
|
37
|
-
# Paso 3: refactorizar si hace falta (REFACTOR)
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Requisitos de cobertura
|
|
41
|
-
|
|
42
|
-
- **Objetivo**: 80%+ de cobertura de código
|
|
43
|
-
- **Rutas críticas**: se exige 100% de cobertura
|
|
44
|
-
- Usa `pytest --cov` para medir la cobertura
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
pytest --cov=mypackage --cov-report=term-missing --cov-report=html
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Fundamentos de pytest
|
|
51
|
-
|
|
52
|
-
### Estructura básica de un test
|
|
53
|
-
|
|
54
|
-
```python
|
|
55
|
-
import pytest
|
|
56
|
-
|
|
57
|
-
def test_addition():
|
|
58
|
-
"""Prueba la suma básica."""
|
|
59
|
-
assert 2 + 2 == 4
|
|
60
|
-
|
|
61
|
-
def test_string_uppercase():
|
|
62
|
-
"""Prueba pasar una cadena a mayúsculas."""
|
|
63
|
-
text = "hello"
|
|
64
|
-
assert text.upper() == "HELLO"
|
|
65
|
-
|
|
66
|
-
def test_list_append():
|
|
67
|
-
"""Prueba el append de listas."""
|
|
68
|
-
items = [1, 2, 3]
|
|
69
|
-
items.append(4)
|
|
70
|
-
assert 4 in items
|
|
71
|
-
assert len(items) == 4
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Aserciones
|
|
75
|
-
|
|
76
|
-
```python
|
|
77
|
-
# Igualdad
|
|
78
|
-
assert result == expected
|
|
79
|
-
|
|
80
|
-
# Desigualdad
|
|
81
|
-
assert result != unexpected
|
|
82
|
-
|
|
83
|
-
# Veracidad
|
|
84
|
-
assert result # Verdadero (truthy)
|
|
85
|
-
assert not result # Falso (falsy)
|
|
86
|
-
assert result is True # Exactamente True
|
|
87
|
-
assert result is False # Exactamente False
|
|
88
|
-
assert result is None # Exactamente None
|
|
89
|
-
|
|
90
|
-
# Pertenencia
|
|
91
|
-
assert item in collection
|
|
92
|
-
assert item not in collection
|
|
93
|
-
|
|
94
|
-
# Comparaciones
|
|
95
|
-
assert result > 0
|
|
96
|
-
assert 0 <= result <= 100
|
|
97
|
-
|
|
98
|
-
# Comprobación de tipos
|
|
99
|
-
assert isinstance(result, str)
|
|
100
|
-
|
|
101
|
-
# Prueba de excepciones (enfoque preferido)
|
|
102
|
-
with pytest.raises(ValueError):
|
|
103
|
-
raise ValueError("error message")
|
|
104
|
-
|
|
105
|
-
# Comprobar el mensaje de la excepción
|
|
106
|
-
with pytest.raises(ValueError, match="invalid input"):
|
|
107
|
-
raise ValueError("invalid input provided")
|
|
108
|
-
|
|
109
|
-
# Comprobar atributos de la excepción
|
|
110
|
-
with pytest.raises(ValueError) as exc_info:
|
|
111
|
-
raise ValueError("error message")
|
|
112
|
-
assert str(exc_info.value) == "error message"
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## Fixtures
|
|
116
|
-
|
|
117
|
-
### Uso básico de fixtures
|
|
118
|
-
|
|
119
|
-
```python
|
|
120
|
-
import pytest
|
|
121
|
-
|
|
122
|
-
@pytest.fixture
|
|
123
|
-
def sample_data():
|
|
124
|
-
"""Fixture que provee datos de ejemplo."""
|
|
125
|
-
return {"name": "Alice", "age": 30}
|
|
126
|
-
|
|
127
|
-
def test_sample_data(sample_data):
|
|
128
|
-
"""Test que usa la fixture."""
|
|
129
|
-
assert sample_data["name"] == "Alice"
|
|
130
|
-
assert sample_data["age"] == 30
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
### Fixture con setup/teardown
|
|
134
|
-
|
|
135
|
-
```python
|
|
136
|
-
@pytest.fixture
|
|
137
|
-
def database():
|
|
138
|
-
"""Fixture con preparación y limpieza."""
|
|
139
|
-
# Preparación
|
|
140
|
-
db = Database(":memory:")
|
|
141
|
-
db.create_tables()
|
|
142
|
-
db.insert_test_data()
|
|
143
|
-
|
|
144
|
-
yield db # Se entrega al test
|
|
145
|
-
|
|
146
|
-
# Limpieza
|
|
147
|
-
db.close()
|
|
148
|
-
|
|
149
|
-
def test_database_query(database):
|
|
150
|
-
"""Prueba operaciones de base de datos."""
|
|
151
|
-
result = database.query("SELECT * FROM users")
|
|
152
|
-
assert len(result) > 0
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Alcances (scopes) de fixtures
|
|
156
|
-
|
|
157
|
-
```python
|
|
158
|
-
# Alcance function (por defecto) — se ejecuta en cada test
|
|
159
|
-
@pytest.fixture
|
|
160
|
-
def temp_file():
|
|
161
|
-
with open("temp.txt", "w") as f:
|
|
162
|
-
yield f
|
|
163
|
-
os.remove("temp.txt")
|
|
164
|
-
|
|
165
|
-
# Alcance module — se ejecuta una vez por módulo
|
|
166
|
-
@pytest.fixture(scope="module")
|
|
167
|
-
def module_db():
|
|
168
|
-
db = Database(":memory:")
|
|
169
|
-
db.create_tables()
|
|
170
|
-
yield db
|
|
171
|
-
db.close()
|
|
172
|
-
|
|
173
|
-
# Alcance session — se ejecuta una vez por sesión de tests
|
|
174
|
-
@pytest.fixture(scope="session")
|
|
175
|
-
def shared_resource():
|
|
176
|
-
resource = ExpensiveResource()
|
|
177
|
-
yield resource
|
|
178
|
-
resource.cleanup()
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Fixture con parámetros
|
|
182
|
-
|
|
183
|
-
```python
|
|
184
|
-
@pytest.fixture(params=[1, 2, 3])
|
|
185
|
-
def number(request):
|
|
186
|
-
"""Fixture parametrizada."""
|
|
187
|
-
return request.param
|
|
188
|
-
|
|
189
|
-
def test_numbers(number):
|
|
190
|
-
"""El test corre 3 veces, una por cada parámetro."""
|
|
191
|
-
assert number > 0
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Uso de varias fixtures
|
|
195
|
-
|
|
196
|
-
```python
|
|
197
|
-
@pytest.fixture
|
|
198
|
-
def user():
|
|
199
|
-
return User(id=1, name="Alice")
|
|
200
|
-
|
|
201
|
-
@pytest.fixture
|
|
202
|
-
def admin():
|
|
203
|
-
return User(id=2, name="Admin", role="admin")
|
|
204
|
-
|
|
205
|
-
def test_user_admin_interaction(user, admin):
|
|
206
|
-
"""Test que usa varias fixtures."""
|
|
207
|
-
assert admin.can_manage(user)
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### Fixtures autouse
|
|
211
|
-
|
|
212
|
-
```python
|
|
213
|
-
@pytest.fixture(autouse=True)
|
|
214
|
-
def reset_config():
|
|
215
|
-
"""Se ejecuta automáticamente antes de cada test."""
|
|
216
|
-
Config.reset()
|
|
217
|
-
yield
|
|
218
|
-
Config.cleanup()
|
|
219
|
-
|
|
220
|
-
def test_without_fixture_call():
|
|
221
|
-
# reset_config se ejecuta automáticamente
|
|
222
|
-
assert Config.get_setting("debug") is False
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### conftest.py para fixtures compartidas
|
|
226
|
-
|
|
227
|
-
```python
|
|
228
|
-
# tests/conftest.py
|
|
229
|
-
import pytest
|
|
230
|
-
|
|
231
|
-
@pytest.fixture
|
|
232
|
-
def client():
|
|
233
|
-
"""Fixture compartida por todos los tests."""
|
|
234
|
-
app = create_app(testing=True)
|
|
235
|
-
with app.test_client() as client:
|
|
236
|
-
yield client
|
|
237
|
-
|
|
238
|
-
@pytest.fixture
|
|
239
|
-
def auth_headers(client):
|
|
240
|
-
"""Genera cabeceras de autenticación para probar la API."""
|
|
241
|
-
response = client.post("/api/login", json={
|
|
242
|
-
"username": "test",
|
|
243
|
-
"password": "test"
|
|
244
|
-
})
|
|
245
|
-
token = response.json["token"]
|
|
246
|
-
return {"Authorization": f"Bearer {token}"}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Parametrización
|
|
250
|
-
|
|
251
|
-
### Parametrización básica
|
|
252
|
-
|
|
253
|
-
```python
|
|
254
|
-
@pytest.mark.parametrize("input,expected", [
|
|
255
|
-
("hello", "HELLO"),
|
|
256
|
-
("world", "WORLD"),
|
|
257
|
-
("PyThOn", "PYTHON"),
|
|
258
|
-
])
|
|
259
|
-
def test_uppercase(input, expected):
|
|
260
|
-
"""El test corre 3 veces con distintas entradas."""
|
|
261
|
-
assert input.upper() == expected
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### Varios parámetros
|
|
265
|
-
|
|
266
|
-
```python
|
|
267
|
-
@pytest.mark.parametrize("a,b,expected", [
|
|
268
|
-
(2, 3, 5),
|
|
269
|
-
(0, 0, 0),
|
|
270
|
-
(-1, 1, 0),
|
|
271
|
-
(100, 200, 300),
|
|
272
|
-
])
|
|
273
|
-
def test_add(a, b, expected):
|
|
274
|
-
"""Prueba la suma con múltiples entradas."""
|
|
275
|
-
assert add(a, b) == expected
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Parametrizar con IDs
|
|
279
|
-
|
|
280
|
-
```python
|
|
281
|
-
@pytest.mark.parametrize("input,expected", [
|
|
282
|
-
("valid@email.com", True),
|
|
283
|
-
("invalid", False),
|
|
284
|
-
("@no-domain.com", False),
|
|
285
|
-
], ids=["valid-email", "missing-at", "missing-domain"])
|
|
286
|
-
def test_email_validation(input, expected):
|
|
287
|
-
"""Prueba la validación de emails con IDs de test legibles."""
|
|
288
|
-
assert is_valid_email(input) is expected
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
### Fixtures parametrizadas
|
|
292
|
-
|
|
293
|
-
```python
|
|
294
|
-
@pytest.fixture(params=["sqlite", "postgresql", "mysql"])
|
|
295
|
-
def db(request):
|
|
296
|
-
"""Prueba contra varios backends de base de datos."""
|
|
297
|
-
if request.param == "sqlite":
|
|
298
|
-
return Database(":memory:")
|
|
299
|
-
elif request.param == "postgresql":
|
|
300
|
-
return Database("postgresql://localhost/test")
|
|
301
|
-
elif request.param == "mysql":
|
|
302
|
-
return Database("mysql://localhost/test")
|
|
303
|
-
|
|
304
|
-
def test_database_operations(db):
|
|
305
|
-
"""El test corre 3 veces, una por cada base de datos."""
|
|
306
|
-
result = db.query("SELECT 1")
|
|
307
|
-
assert result is not None
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
## Marcadores y selección de tests
|
|
311
|
-
|
|
312
|
-
### Marcadores personalizados
|
|
313
|
-
|
|
314
|
-
```python
|
|
315
|
-
# Marcar tests lentos
|
|
316
|
-
@pytest.mark.slow
|
|
317
|
-
def test_slow_operation():
|
|
318
|
-
time.sleep(5)
|
|
319
|
-
|
|
320
|
-
# Marcar tests de integración
|
|
321
|
-
@pytest.mark.integration
|
|
322
|
-
def test_api_integration():
|
|
323
|
-
response = requests.get("https://api.example.com")
|
|
324
|
-
assert response.status_code == 200
|
|
325
|
-
|
|
326
|
-
# Marcar tests unitarios
|
|
327
|
-
@pytest.mark.unit
|
|
328
|
-
def test_unit_logic():
|
|
329
|
-
assert calculate(2, 3) == 5
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
### Ejecutar tests específicos
|
|
333
|
-
|
|
334
|
-
```bash
|
|
335
|
-
# Ejecutar solo los tests rápidos
|
|
336
|
-
pytest -m "not slow"
|
|
337
|
-
|
|
338
|
-
# Ejecutar solo los tests de integración
|
|
339
|
-
pytest -m integration
|
|
340
|
-
|
|
341
|
-
# Ejecutar tests de integración o lentos
|
|
342
|
-
pytest -m "integration or slow"
|
|
343
|
-
|
|
344
|
-
# Ejecutar tests marcados como unit pero no slow
|
|
345
|
-
pytest -m "unit and not slow"
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
### Configurar marcadores en pytest.ini
|
|
349
|
-
|
|
350
|
-
```ini
|
|
351
|
-
[pytest]
|
|
352
|
-
markers =
|
|
353
|
-
slow: marca los tests lentos
|
|
354
|
-
integration: marca los tests de integración
|
|
355
|
-
unit: marca los tests unitarios
|
|
356
|
-
django: marca los tests que requieren Django
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
## Mocking y patching
|
|
360
|
-
|
|
361
|
-
### Mockear funciones
|
|
362
|
-
|
|
363
|
-
```python
|
|
364
|
-
from unittest.mock import patch, Mock
|
|
365
|
-
|
|
366
|
-
@patch("mypackage.external_api_call")
|
|
367
|
-
def test_with_mock(api_call_mock):
|
|
368
|
-
"""Test con la API externa mockeada."""
|
|
369
|
-
api_call_mock.return_value = {"status": "success"}
|
|
370
|
-
|
|
371
|
-
result = my_function()
|
|
372
|
-
|
|
373
|
-
api_call_mock.assert_called_once()
|
|
374
|
-
assert result["status"] == "success"
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
### Mockear valores de retorno
|
|
378
|
-
|
|
379
|
-
```python
|
|
380
|
-
@patch("mypackage.Database.connect")
|
|
381
|
-
def test_database_connection(connect_mock):
|
|
382
|
-
"""Test con la conexión a base de datos mockeada."""
|
|
383
|
-
connect_mock.return_value = MockConnection()
|
|
384
|
-
|
|
385
|
-
db = Database()
|
|
386
|
-
db.connect()
|
|
387
|
-
|
|
388
|
-
connect_mock.assert_called_once_with("localhost")
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
### Mockear excepciones
|
|
392
|
-
|
|
393
|
-
```python
|
|
394
|
-
@patch("mypackage.api_call")
|
|
395
|
-
def test_api_error_handling(api_call_mock):
|
|
396
|
-
"""Prueba el manejo de errores con una excepción mockeada."""
|
|
397
|
-
api_call_mock.side_effect = ConnectionError("Network error")
|
|
398
|
-
|
|
399
|
-
with pytest.raises(ConnectionError):
|
|
400
|
-
api_call()
|
|
401
|
-
|
|
402
|
-
api_call_mock.assert_called_once()
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
### Mockear context managers
|
|
406
|
-
|
|
407
|
-
```python
|
|
408
|
-
@patch("builtins.open", new_callable=mock_open)
|
|
409
|
-
def test_file_reading(mock_file):
|
|
410
|
-
"""Prueba la lectura de archivos con open mockeado."""
|
|
411
|
-
mock_file.return_value.read.return_value = "file content"
|
|
412
|
-
|
|
413
|
-
result = read_file("test.txt")
|
|
414
|
-
|
|
415
|
-
mock_file.assert_called_once_with("test.txt", "r")
|
|
416
|
-
assert result == "file content"
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
### Uso de autospec
|
|
420
|
-
|
|
421
|
-
```python
|
|
422
|
-
@patch("mypackage.DBConnection", autospec=True)
|
|
423
|
-
def test_autospec(db_mock):
|
|
424
|
-
"""Test con autospec para detectar mal uso de la API."""
|
|
425
|
-
db = db_mock.return_value
|
|
426
|
-
db.query("SELECT * FROM users")
|
|
427
|
-
|
|
428
|
-
# Esto fallaría si DBConnection no tuviera el método query
|
|
429
|
-
db_mock.assert_called_once()
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
### Mockear instancias de clases
|
|
433
|
-
|
|
434
|
-
```python
|
|
435
|
-
class TestUserService:
|
|
436
|
-
@patch("mypackage.UserRepository")
|
|
437
|
-
def test_create_user(self, repo_mock):
|
|
438
|
-
"""Prueba la creación de usuarios con el repositorio mockeado."""
|
|
439
|
-
repo_mock.return_value.save.return_value = User(id=1, name="Alice")
|
|
440
|
-
|
|
441
|
-
service = UserService(repo_mock.return_value)
|
|
442
|
-
user = service.create_user(name="Alice")
|
|
443
|
-
|
|
444
|
-
assert user.name == "Alice"
|
|
445
|
-
repo_mock.return_value.save.assert_called_once()
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
### Mockear propiedades
|
|
449
|
-
|
|
450
|
-
```python
|
|
451
|
-
@pytest.fixture
|
|
452
|
-
def mock_config():
|
|
453
|
-
"""Crea un mock con una propiedad."""
|
|
454
|
-
config = Mock()
|
|
455
|
-
type(config).debug = PropertyMock(return_value=True)
|
|
456
|
-
type(config).api_key = PropertyMock(return_value="test-key")
|
|
457
|
-
return config
|
|
458
|
-
|
|
459
|
-
def test_with_mock_config(mock_config):
|
|
460
|
-
"""Test con propiedades de configuración mockeadas."""
|
|
461
|
-
assert mock_config.debug is True
|
|
462
|
-
assert mock_config.api_key == "test-key"
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
## Testing de código asíncrono
|
|
466
|
-
|
|
467
|
-
### Tests async con pytest-asyncio
|
|
468
|
-
|
|
469
|
-
```python
|
|
470
|
-
import pytest
|
|
471
|
-
|
|
472
|
-
@pytest.mark.asyncio
|
|
473
|
-
async def test_async_function():
|
|
474
|
-
"""Prueba una función async."""
|
|
475
|
-
result = await async_add(2, 3)
|
|
476
|
-
assert result == 5
|
|
477
|
-
|
|
478
|
-
@pytest.mark.asyncio
|
|
479
|
-
async def test_async_with_fixture(async_client):
|
|
480
|
-
"""Test async con fixture async."""
|
|
481
|
-
response = await async_client.get("/api/users")
|
|
482
|
-
assert response.status_code == 200
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
### Fixture async
|
|
486
|
-
|
|
487
|
-
```python
|
|
488
|
-
@pytest.fixture
|
|
489
|
-
async def async_client():
|
|
490
|
-
"""Fixture async que provee un cliente de pruebas async."""
|
|
491
|
-
app = create_app()
|
|
492
|
-
async with app.test_client() as client:
|
|
493
|
-
yield client
|
|
494
|
-
|
|
495
|
-
@pytest.mark.asyncio
|
|
496
|
-
async def test_api_endpoint(async_client):
|
|
497
|
-
"""Test que usa la fixture async."""
|
|
498
|
-
response = await async_client.get("/api/data")
|
|
499
|
-
assert response.status_code == 200
|
|
500
|
-
```
|
|
501
|
-
|
|
502
|
-
### Mockear funciones async
|
|
503
|
-
|
|
504
|
-
```python
|
|
505
|
-
@pytest.mark.asyncio
|
|
506
|
-
@patch("mypackage.async_api_call")
|
|
507
|
-
async def test_async_mock(api_call_mock):
|
|
508
|
-
"""Prueba una función async con mock."""
|
|
509
|
-
api_call_mock.return_value = {"status": "ok"}
|
|
510
|
-
|
|
511
|
-
result = await my_async_function()
|
|
512
|
-
|
|
513
|
-
api_call_mock.assert_awaited_once()
|
|
514
|
-
assert result["status"] == "ok"
|
|
515
|
-
```
|
|
516
|
-
|
|
517
|
-
## Testing de excepciones
|
|
518
|
-
|
|
519
|
-
### Probar excepciones esperadas
|
|
520
|
-
|
|
521
|
-
```python
|
|
522
|
-
def test_divide_by_zero():
|
|
523
|
-
"""Comprueba que dividir por cero lanza ZeroDivisionError."""
|
|
524
|
-
with pytest.raises(ZeroDivisionError):
|
|
525
|
-
divide(10, 0)
|
|
526
|
-
|
|
527
|
-
def test_custom_exception():
|
|
528
|
-
"""Prueba una excepción personalizada con mensaje."""
|
|
529
|
-
with pytest.raises(ValueError, match="invalid input"):
|
|
530
|
-
validate_input("invalid")
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
### Probar atributos de excepciones
|
|
534
|
-
|
|
535
|
-
```python
|
|
536
|
-
def test_exception_with_details():
|
|
537
|
-
"""Prueba una excepción con atributos personalizados."""
|
|
538
|
-
with pytest.raises(CustomError) as exc_info:
|
|
539
|
-
raise CustomError("error", code=400)
|
|
540
|
-
|
|
541
|
-
assert exc_info.value.code == 400
|
|
542
|
-
assert "error" in str(exc_info.value)
|
|
543
|
-
```
|
|
544
|
-
|
|
545
|
-
## Testing de efectos secundarios
|
|
546
|
-
|
|
547
|
-
### Probar operaciones con archivos
|
|
548
|
-
|
|
549
|
-
```python
|
|
550
|
-
import tempfile
|
|
551
|
-
import os
|
|
552
|
-
|
|
553
|
-
def test_file_processing():
|
|
554
|
-
"""Prueba el procesamiento de archivos con archivo temporal."""
|
|
555
|
-
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.txt') as f:
|
|
556
|
-
f.write("test content")
|
|
557
|
-
temp_path = f.name
|
|
558
|
-
|
|
559
|
-
try:
|
|
560
|
-
result = process_file(temp_path)
|
|
561
|
-
assert result == "processed: test content"
|
|
562
|
-
finally:
|
|
563
|
-
os.unlink(temp_path)
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
### Probar con la fixture tmp_path de pytest
|
|
567
|
-
|
|
568
|
-
```python
|
|
569
|
-
def test_with_tmp_path(tmp_path):
|
|
570
|
-
"""Test que usa la fixture integrada de rutas temporales de pytest."""
|
|
571
|
-
test_file = tmp_path / "test.txt"
|
|
572
|
-
test_file.write_text("hello world")
|
|
573
|
-
|
|
574
|
-
result = process_file(str(test_file))
|
|
575
|
-
assert result == "hello world"
|
|
576
|
-
# tmp_path se limpia automáticamente
|
|
577
|
-
```
|
|
578
|
-
|
|
579
|
-
### Probar con la fixture tmpdir
|
|
580
|
-
|
|
581
|
-
```python
|
|
582
|
-
def test_with_tmpdir(tmpdir):
|
|
583
|
-
"""Test que usa la fixture tmpdir de pytest."""
|
|
584
|
-
test_file = tmpdir.join("test.txt")
|
|
585
|
-
test_file.write("data")
|
|
586
|
-
|
|
587
|
-
result = process_file(str(test_file))
|
|
588
|
-
assert result == "data"
|
|
589
|
-
```
|
|
590
|
-
|
|
591
|
-
## Organización de los tests
|
|
592
|
-
|
|
593
|
-
### Estructura de directorios
|
|
594
|
-
|
|
595
|
-
```
|
|
596
|
-
tests/
|
|
597
|
-
├── conftest.py # Fixtures compartidas
|
|
598
|
-
├── __init__.py
|
|
599
|
-
├── unit/ # Tests unitarios
|
|
600
|
-
│ ├── __init__.py
|
|
601
|
-
│ ├── test_models.py
|
|
602
|
-
│ ├── test_utils.py
|
|
603
|
-
│ └── test_services.py
|
|
604
|
-
├── integration/ # Tests de integración
|
|
605
|
-
│ ├── __init__.py
|
|
606
|
-
│ ├── test_api.py
|
|
607
|
-
│ └── test_database.py
|
|
608
|
-
└── e2e/ # Tests end-to-end
|
|
609
|
-
├── __init__.py
|
|
610
|
-
└── test_user_flow.py
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
### Clases de tests
|
|
614
|
-
|
|
615
|
-
```python
|
|
616
|
-
class TestUserService:
|
|
617
|
-
"""Agrupa tests relacionados en una clase."""
|
|
618
|
-
|
|
619
|
-
@pytest.fixture(autouse=True)
|
|
620
|
-
def setup(self):
|
|
621
|
-
"""La preparación corre antes de cada test de esta clase."""
|
|
622
|
-
self.service = UserService()
|
|
623
|
-
|
|
624
|
-
def test_create_user(self):
|
|
625
|
-
"""Prueba la creación de usuarios."""
|
|
626
|
-
user = self.service.create_user("Alice")
|
|
627
|
-
assert user.name == "Alice"
|
|
628
|
-
|
|
629
|
-
def test_delete_user(self):
|
|
630
|
-
"""Prueba la eliminación de usuarios."""
|
|
631
|
-
user = User(id=1, name="Bob")
|
|
632
|
-
self.service.delete_user(user)
|
|
633
|
-
assert not self.service.user_exists(1)
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
## Buenas prácticas
|
|
637
|
-
|
|
638
|
-
### SÍ
|
|
639
|
-
|
|
640
|
-
- **Sigue TDD**: escribe los tests antes que el código (rojo-verde-refactor)
|
|
641
|
-
- **Prueba una sola cosa**: cada test debe verificar un único comportamiento
|
|
642
|
-
- **Usa nombres descriptivos**: `test_user_login_with_invalid_credentials_fails`
|
|
643
|
-
- **Usa fixtures**: elimina la duplicación con fixtures
|
|
644
|
-
- **Mockea las dependencias externas**: no dependas de servicios externos
|
|
645
|
-
- **Prueba casos límite**: entradas vacías, valores None, condiciones de frontera
|
|
646
|
-
- **Apunta a 80%+ de cobertura**: enfócate en las rutas críticas
|
|
647
|
-
- **Mantén los tests rápidos**: usa marcadores para separar los tests lentos
|
|
648
|
-
|
|
649
|
-
### NO
|
|
650
|
-
|
|
651
|
-
- **No pruebes la implementación**: prueba el comportamiento, no los detalles internos
|
|
652
|
-
- **No uses condicionales complejos en los tests**: mantén los tests simples
|
|
653
|
-
- **No ignores los fallos de tests**: todos los tests deben pasar
|
|
654
|
-
- **No pruebes código de terceros**: confía en que las librerías funcionan
|
|
655
|
-
- **No compartas estado entre tests**: los tests deben ser independientes
|
|
656
|
-
- **No captures excepciones en los tests**: usa `pytest.raises`
|
|
657
|
-
- **No uses sentencias print**: usa aserciones y la salida de pytest
|
|
658
|
-
- **No escribas tests demasiado frágiles**: evita mocks excesivamente específicos
|
|
659
|
-
|
|
660
|
-
## Patrones comunes
|
|
661
|
-
|
|
662
|
-
### Probar endpoints de API (FastAPI/Flask)
|
|
663
|
-
|
|
664
|
-
```python
|
|
665
|
-
@pytest.fixture
|
|
666
|
-
def client():
|
|
667
|
-
app = create_app(testing=True)
|
|
668
|
-
return app.test_client()
|
|
669
|
-
|
|
670
|
-
def test_get_user(client):
|
|
671
|
-
response = client.get("/api/users/1")
|
|
672
|
-
assert response.status_code == 200
|
|
673
|
-
assert response.json["id"] == 1
|
|
674
|
-
|
|
675
|
-
def test_create_user(client):
|
|
676
|
-
response = client.post("/api/users", json={
|
|
677
|
-
"name": "Alice",
|
|
678
|
-
"email": "alice@example.com"
|
|
679
|
-
})
|
|
680
|
-
assert response.status_code == 201
|
|
681
|
-
assert response.json["name"] == "Alice"
|
|
682
|
-
```
|
|
683
|
-
|
|
684
|
-
### Probar operaciones de base de datos
|
|
685
|
-
|
|
686
|
-
```python
|
|
687
|
-
@pytest.fixture
|
|
688
|
-
def db_session():
|
|
689
|
-
"""Crea una sesión de base de datos de pruebas."""
|
|
690
|
-
session = Session(bind=engine)
|
|
691
|
-
session.begin_nested()
|
|
692
|
-
yield session
|
|
693
|
-
session.rollback()
|
|
694
|
-
session.close()
|
|
695
|
-
|
|
696
|
-
def test_create_user(db_session):
|
|
697
|
-
user = User(name="Alice", email="alice@example.com")
|
|
698
|
-
db_session.add(user)
|
|
699
|
-
db_session.commit()
|
|
700
|
-
|
|
701
|
-
retrieved = db_session.query(User).filter_by(name="Alice").first()
|
|
702
|
-
assert retrieved.email == "alice@example.com"
|
|
703
|
-
```
|
|
704
|
-
|
|
705
|
-
### Probar métodos de clases
|
|
706
|
-
|
|
707
|
-
```python
|
|
708
|
-
class TestCalculator:
|
|
709
|
-
@pytest.fixture
|
|
710
|
-
def calculator(self):
|
|
711
|
-
return Calculator()
|
|
712
|
-
|
|
713
|
-
def test_add(self, calculator):
|
|
714
|
-
assert calculator.add(2, 3) == 5
|
|
715
|
-
|
|
716
|
-
def test_divide_by_zero(self, calculator):
|
|
717
|
-
with pytest.raises(ZeroDivisionError):
|
|
718
|
-
calculator.divide(10, 0)
|
|
719
|
-
```
|
|
720
|
-
|
|
721
|
-
## Configuración de pytest
|
|
722
|
-
|
|
723
|
-
### pytest.ini
|
|
724
|
-
|
|
725
|
-
```ini
|
|
726
|
-
[pytest]
|
|
727
|
-
testpaths = tests
|
|
728
|
-
python_files = test_*.py
|
|
729
|
-
python_classes = Test*
|
|
730
|
-
python_functions = test_*
|
|
731
|
-
addopts =
|
|
732
|
-
--strict-markers
|
|
733
|
-
--disable-warnings
|
|
734
|
-
--cov=mypackage
|
|
735
|
-
--cov-report=term-missing
|
|
736
|
-
--cov-report=html
|
|
737
|
-
markers =
|
|
738
|
-
slow: marca los tests lentos
|
|
739
|
-
integration: marca los tests de integración
|
|
740
|
-
unit: marca los tests unitarios
|
|
741
|
-
```
|
|
742
|
-
|
|
743
|
-
### pyproject.toml
|
|
744
|
-
|
|
745
|
-
```toml
|
|
746
|
-
[tool.pytest.ini_options]
|
|
747
|
-
testpaths = ["tests"]
|
|
748
|
-
python_files = ["test_*.py"]
|
|
749
|
-
python_classes = ["Test*"]
|
|
750
|
-
python_functions = ["test_*"]
|
|
751
|
-
addopts = [
|
|
752
|
-
"--strict-markers",
|
|
753
|
-
"--cov=mypackage",
|
|
754
|
-
"--cov-report=term-missing",
|
|
755
|
-
"--cov-report=html",
|
|
756
|
-
]
|
|
757
|
-
markers = [
|
|
758
|
-
"slow: marca los tests lentos",
|
|
759
|
-
"integration: marca los tests de integración",
|
|
760
|
-
"unit: marca los tests unitarios",
|
|
761
|
-
]
|
|
762
|
-
```
|
|
763
|
-
|
|
764
|
-
## Ejecutar los tests
|
|
765
|
-
|
|
766
|
-
```bash
|
|
767
|
-
# Ejecutar todos los tests
|
|
768
|
-
pytest
|
|
769
|
-
|
|
770
|
-
# Ejecutar un archivo específico
|
|
771
|
-
pytest tests/test_utils.py
|
|
772
|
-
|
|
773
|
-
# Ejecutar un test específico
|
|
774
|
-
pytest tests/test_utils.py::test_function
|
|
775
|
-
|
|
776
|
-
# Ejecutar con salida detallada
|
|
777
|
-
pytest -v
|
|
778
|
-
|
|
779
|
-
# Ejecutar con cobertura
|
|
780
|
-
pytest --cov=mypackage --cov-report=html
|
|
781
|
-
|
|
782
|
-
# Ejecutar solo los tests rápidos
|
|
783
|
-
pytest -m "not slow"
|
|
784
|
-
|
|
785
|
-
# Ejecutar hasta el primer fallo
|
|
786
|
-
pytest -x
|
|
787
|
-
|
|
788
|
-
# Ejecutar y detenerse tras N fallos
|
|
789
|
-
pytest --maxfail=3
|
|
790
|
-
|
|
791
|
-
# Ejecutar los últimos tests fallidos
|
|
792
|
-
pytest --lf
|
|
793
|
-
|
|
794
|
-
# Ejecutar tests por patrón
|
|
795
|
-
pytest -k "test_user"
|
|
796
|
-
|
|
797
|
-
# Ejecutar con depurador al fallar
|
|
798
|
-
pytest --pdb
|
|
799
|
-
```
|
|
800
|
-
|
|
801
|
-
## Referencia rápida
|
|
802
|
-
|
|
803
|
-
| Patrón | Uso |
|
|
804
|
-
|---------|-------|
|
|
805
|
-
| `pytest.raises()` | Probar excepciones esperadas |
|
|
806
|
-
| `@pytest.fixture()` | Crear fixtures de test reutilizables |
|
|
807
|
-
| `@pytest.mark.parametrize()` | Ejecutar tests con múltiples entradas |
|
|
808
|
-
| `@pytest.mark.slow` | Marcar tests lentos |
|
|
809
|
-
| `pytest -m "not slow"` | Omitir tests lentos |
|
|
810
|
-
| `@patch()` | Mockear funciones y clases |
|
|
811
|
-
| Fixture `tmp_path` | Directorio temporal automático |
|
|
812
|
-
| `pytest --cov` | Generar reporte de cobertura |
|
|
813
|
-
| `assert` | Aserciones simples y legibles |
|
|
814
|
-
|
|
815
|
-
**Recuerda**: los tests también son código. Mantenlos limpios, legibles y mantenibles. Los buenos tests atrapan bugs; los grandes tests los previenen.
|