tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__py3-none-any.whl
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.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,310 +1,310 @@
|
|
|
1
|
-
# Testing Best Practices
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Following testing best practices ensures reliable, maintainable, and effective test suites. This guide covers essential practices for writing quality tests.
|
|
6
|
-
|
|
7
|
-
## Test Design
|
|
8
|
-
|
|
9
|
-
### Write Clear Tests
|
|
10
|
-
|
|
11
|
-
**AAA Pattern:**
|
|
12
|
-
```python
|
|
13
|
-
def test_calculate_total():
|
|
14
|
-
# Arrange
|
|
15
|
-
items = [10, 20, 30]
|
|
16
|
-
|
|
17
|
-
# Act
|
|
18
|
-
result = calculate_total(items)
|
|
19
|
-
|
|
20
|
-
# Assert
|
|
21
|
-
assert result == 60
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### One Concept Per Test
|
|
25
|
-
|
|
26
|
-
**Focused Tests:**
|
|
27
|
-
```python
|
|
28
|
-
# Good: One concept
|
|
29
|
-
def test_user_activation():
|
|
30
|
-
user = create_user()
|
|
31
|
-
user.activate()
|
|
32
|
-
assert user.is_active is True
|
|
33
|
-
|
|
34
|
-
# Bad: Multiple concepts
|
|
35
|
-
def test_user_operations():
|
|
36
|
-
user = create_user()
|
|
37
|
-
user.activate()
|
|
38
|
-
user.add_role("admin")
|
|
39
|
-
user.update_email("new@example.com")
|
|
40
|
-
assert user.is_active is True
|
|
41
|
-
assert "admin" in user.roles
|
|
42
|
-
assert user.email == "new@example.com"
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### Test Behavior, Not Implementation
|
|
46
|
-
|
|
47
|
-
**Focus on Outcomes:**
|
|
48
|
-
```python
|
|
49
|
-
# Good: Tests behavior
|
|
50
|
-
def test_user_login():
|
|
51
|
-
user = create_user()
|
|
52
|
-
result = login(user.email, "password")
|
|
53
|
-
assert result is True
|
|
54
|
-
|
|
55
|
-
# Bad: Tests implementation
|
|
56
|
-
def test_user_login():
|
|
57
|
-
user = create_user()
|
|
58
|
-
login(user.email, "password")
|
|
59
|
-
assert user.session_id is not None # Implementation detail
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Test Organization
|
|
63
|
-
|
|
64
|
-
### Structure Tests
|
|
65
|
-
|
|
66
|
-
**Organize by Feature:**
|
|
67
|
-
```
|
|
68
|
-
tests/
|
|
69
|
-
├── unit/
|
|
70
|
-
│ ├── test_user.py
|
|
71
|
-
│ └── test_order.py
|
|
72
|
-
├── integration/
|
|
73
|
-
│ └── test_api.py
|
|
74
|
-
└── e2e/
|
|
75
|
-
└── test_checkout.py
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Use Descriptive Names
|
|
79
|
-
|
|
80
|
-
**Clear Test Names:**
|
|
81
|
-
```python
|
|
82
|
-
# Good: Descriptive
|
|
83
|
-
def test_calculate_total_returns_sum_of_items():
|
|
84
|
-
pass
|
|
85
|
-
|
|
86
|
-
def test_calculate_total_handles_empty_list():
|
|
87
|
-
pass
|
|
88
|
-
|
|
89
|
-
# Bad: Unclear
|
|
90
|
-
def test_calculate():
|
|
91
|
-
pass
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Test Data
|
|
95
|
-
|
|
96
|
-
### Use Fixtures
|
|
97
|
-
|
|
98
|
-
**Reusable Test Data:**
|
|
99
|
-
```python
|
|
100
|
-
@pytest.fixture
|
|
101
|
-
def user():
|
|
102
|
-
return User(email="test@example.com", password="password")
|
|
103
|
-
|
|
104
|
-
def test_user_login(user):
|
|
105
|
-
assert login(user.email, "password") is True
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Isolate Test Data
|
|
109
|
-
|
|
110
|
-
**Independent Tests:**
|
|
111
|
-
```python
|
|
112
|
-
def test_user_operations():
|
|
113
|
-
# Each test creates its own data
|
|
114
|
-
user = create_user()
|
|
115
|
-
# Test operations
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Test Isolation
|
|
119
|
-
|
|
120
|
-
### No Shared State
|
|
121
|
-
|
|
122
|
-
**Independent Tests:**
|
|
123
|
-
```python
|
|
124
|
-
# Good: Isolated
|
|
125
|
-
def test_user_creation():
|
|
126
|
-
user = create_user()
|
|
127
|
-
assert user.id is not None
|
|
128
|
-
|
|
129
|
-
def test_user_deletion():
|
|
130
|
-
user = create_user()
|
|
131
|
-
user.delete()
|
|
132
|
-
assert user.deleted is True
|
|
133
|
-
|
|
134
|
-
# Bad: Shared state
|
|
135
|
-
shared_user = None
|
|
136
|
-
|
|
137
|
-
def test_user_creation():
|
|
138
|
-
global shared_user
|
|
139
|
-
shared_user = create_user()
|
|
140
|
-
|
|
141
|
-
def test_user_deletion():
|
|
142
|
-
shared_user.delete() # Depends on previous test
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Mocking
|
|
146
|
-
|
|
147
|
-
### Mock External Dependencies
|
|
148
|
-
|
|
149
|
-
**Isolate Units:**
|
|
150
|
-
```python
|
|
151
|
-
@patch('external_service.get_data')
|
|
152
|
-
def test_process_data(mock_get):
|
|
153
|
-
mock_get.return_value = {"key": "value"}
|
|
154
|
-
result = process_data()
|
|
155
|
-
assert result == {"key": "value"}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Avoid Over-Mocking
|
|
159
|
-
|
|
160
|
-
**Balance:**
|
|
161
|
-
```python
|
|
162
|
-
# Good: Mock external service
|
|
163
|
-
@patch('api.external_api')
|
|
164
|
-
def test_fetch_data(mock_api):
|
|
165
|
-
mock_api.get.return_value = {"data": "test"}
|
|
166
|
-
result = fetch_data()
|
|
167
|
-
assert result == {"data": "test"}
|
|
168
|
-
|
|
169
|
-
# Bad: Over-mocking
|
|
170
|
-
@patch('database.query')
|
|
171
|
-
@patch('cache.get')
|
|
172
|
-
@patch('logger.info')
|
|
173
|
-
def test_simple_function(mock_logger, mock_cache, mock_db):
|
|
174
|
-
# Too many mocks
|
|
175
|
-
pass
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## Test Coverage
|
|
179
|
-
|
|
180
|
-
### Meaningful Coverage
|
|
181
|
-
|
|
182
|
-
**Focus on Value:**
|
|
183
|
-
- Test critical paths
|
|
184
|
-
- Test edge cases
|
|
185
|
-
- Test error handling
|
|
186
|
-
- Don't chase 100% coverage
|
|
187
|
-
|
|
188
|
-
### Coverage Goals
|
|
189
|
-
|
|
190
|
-
**Realistic Targets:**
|
|
191
|
-
- Unit tests: 80-90%
|
|
192
|
-
- Critical code: 100%
|
|
193
|
-
- Integration: 60-70%
|
|
194
|
-
|
|
195
|
-
## Performance
|
|
196
|
-
|
|
197
|
-
### Keep Tests Fast
|
|
198
|
-
|
|
199
|
-
**Optimize Execution:**
|
|
200
|
-
```python
|
|
201
|
-
# Fast: Mock database
|
|
202
|
-
@patch('database.query')
|
|
203
|
-
def test_user_operations(mock_query):
|
|
204
|
-
mock_query.return_value = User()
|
|
205
|
-
# Test operations
|
|
206
|
-
|
|
207
|
-
# Slow: Real database
|
|
208
|
-
def test_user_operations():
|
|
209
|
-
user = User.objects.create(...)
|
|
210
|
-
# Test operations
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### Parallel Execution
|
|
214
|
-
|
|
215
|
-
**Speed Up Tests:**
|
|
216
|
-
```bash
|
|
217
|
-
pytest -n auto # Run in parallel
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
## Error Handling
|
|
221
|
-
|
|
222
|
-
### Test Error Cases
|
|
223
|
-
|
|
224
|
-
**Cover Edge Cases:**
|
|
225
|
-
```python
|
|
226
|
-
def test_divide_by_zero():
|
|
227
|
-
with pytest.raises(ValueError):
|
|
228
|
-
divide(10, 0)
|
|
229
|
-
|
|
230
|
-
def test_invalid_input():
|
|
231
|
-
with pytest.raises(ValueError):
|
|
232
|
-
process_data(None)
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
## Documentation
|
|
236
|
-
|
|
237
|
-
### Document Tests
|
|
238
|
-
|
|
239
|
-
**Clear Documentation:**
|
|
240
|
-
```python
|
|
241
|
-
def test_calculate_total_with_discount():
|
|
242
|
-
"""
|
|
243
|
-
Test that calculate_total applies discount correctly.
|
|
244
|
-
|
|
245
|
-
Given: Items totaling 100 with 10% discount
|
|
246
|
-
When: calculate_total is called
|
|
247
|
-
Then: Result should be 90
|
|
248
|
-
"""
|
|
249
|
-
items = [50, 50]
|
|
250
|
-
discount = 0.1
|
|
251
|
-
result = calculate_total(items, discount)
|
|
252
|
-
assert result == 90
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
## Best Practices Summary
|
|
256
|
-
|
|
257
|
-
1. **Write Clear Tests**: AAA pattern, descriptive names
|
|
258
|
-
2. **Test Behavior**: Focus on outcomes, not implementation
|
|
259
|
-
3. **Isolate Tests**: No shared state, independent tests
|
|
260
|
-
4. **Use Fixtures**: Reusable test data
|
|
261
|
-
5. **Mock Appropriately**: External dependencies only
|
|
262
|
-
6. **Keep Tests Fast**: Optimize execution time
|
|
263
|
-
7. **Test Edge Cases**: Error handling, boundary conditions
|
|
264
|
-
8. **Document Tests**: Clear test purpose
|
|
265
|
-
9. **Maintain Tests**: Update with code changes
|
|
266
|
-
10. **Review Tests**: Regular test reviews
|
|
267
|
-
|
|
268
|
-
## Common Mistakes
|
|
269
|
-
|
|
270
|
-
### Testing Implementation
|
|
271
|
-
|
|
272
|
-
**Problem:**
|
|
273
|
-
- Testing how, not what
|
|
274
|
-
- Brittle tests
|
|
275
|
-
- Break on refactoring
|
|
276
|
-
|
|
277
|
-
**Solution:**
|
|
278
|
-
- Test behavior
|
|
279
|
-
- Test public interface
|
|
280
|
-
- Focus on outcomes
|
|
281
|
-
|
|
282
|
-
### Shared State
|
|
283
|
-
|
|
284
|
-
**Problem:**
|
|
285
|
-
- Tests depend on each other
|
|
286
|
-
- Unpredictable results
|
|
287
|
-
- Hard to debug
|
|
288
|
-
|
|
289
|
-
**Solution:**
|
|
290
|
-
- Isolate tests
|
|
291
|
-
- No shared state
|
|
292
|
-
- Independent execution
|
|
293
|
-
|
|
294
|
-
### Over-Mocking
|
|
295
|
-
|
|
296
|
-
**Problem:**
|
|
297
|
-
- Too many mocks
|
|
298
|
-
- Tests don't reflect reality
|
|
299
|
-
- Hard to maintain
|
|
300
|
-
|
|
301
|
-
**Solution:**
|
|
302
|
-
- Mock external dependencies
|
|
303
|
-
- Use real objects when possible
|
|
304
|
-
- Balance isolation and realism
|
|
305
|
-
|
|
306
|
-
## References
|
|
307
|
-
|
|
308
|
-
- [Testing Best Practices](https://testing.googleblog.com/)
|
|
309
|
-
- [Test-Driven Development](https://www.agilealliance.org/glossary/tdd/)
|
|
310
|
-
|
|
1
|
+
# Testing Best Practices
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Following testing best practices ensures reliable, maintainable, and effective test suites. This guide covers essential practices for writing quality tests.
|
|
6
|
+
|
|
7
|
+
## Test Design
|
|
8
|
+
|
|
9
|
+
### Write Clear Tests
|
|
10
|
+
|
|
11
|
+
**AAA Pattern:**
|
|
12
|
+
```python
|
|
13
|
+
def test_calculate_total():
|
|
14
|
+
# Arrange
|
|
15
|
+
items = [10, 20, 30]
|
|
16
|
+
|
|
17
|
+
# Act
|
|
18
|
+
result = calculate_total(items)
|
|
19
|
+
|
|
20
|
+
# Assert
|
|
21
|
+
assert result == 60
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### One Concept Per Test
|
|
25
|
+
|
|
26
|
+
**Focused Tests:**
|
|
27
|
+
```python
|
|
28
|
+
# Good: One concept
|
|
29
|
+
def test_user_activation():
|
|
30
|
+
user = create_user()
|
|
31
|
+
user.activate()
|
|
32
|
+
assert user.is_active is True
|
|
33
|
+
|
|
34
|
+
# Bad: Multiple concepts
|
|
35
|
+
def test_user_operations():
|
|
36
|
+
user = create_user()
|
|
37
|
+
user.activate()
|
|
38
|
+
user.add_role("admin")
|
|
39
|
+
user.update_email("new@example.com")
|
|
40
|
+
assert user.is_active is True
|
|
41
|
+
assert "admin" in user.roles
|
|
42
|
+
assert user.email == "new@example.com"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Test Behavior, Not Implementation
|
|
46
|
+
|
|
47
|
+
**Focus on Outcomes:**
|
|
48
|
+
```python
|
|
49
|
+
# Good: Tests behavior
|
|
50
|
+
def test_user_login():
|
|
51
|
+
user = create_user()
|
|
52
|
+
result = login(user.email, "password")
|
|
53
|
+
assert result is True
|
|
54
|
+
|
|
55
|
+
# Bad: Tests implementation
|
|
56
|
+
def test_user_login():
|
|
57
|
+
user = create_user()
|
|
58
|
+
login(user.email, "password")
|
|
59
|
+
assert user.session_id is not None # Implementation detail
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Test Organization
|
|
63
|
+
|
|
64
|
+
### Structure Tests
|
|
65
|
+
|
|
66
|
+
**Organize by Feature:**
|
|
67
|
+
```
|
|
68
|
+
tests/
|
|
69
|
+
├── unit/
|
|
70
|
+
│ ├── test_user.py
|
|
71
|
+
│ └── test_order.py
|
|
72
|
+
├── integration/
|
|
73
|
+
│ └── test_api.py
|
|
74
|
+
└── e2e/
|
|
75
|
+
└── test_checkout.py
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Use Descriptive Names
|
|
79
|
+
|
|
80
|
+
**Clear Test Names:**
|
|
81
|
+
```python
|
|
82
|
+
# Good: Descriptive
|
|
83
|
+
def test_calculate_total_returns_sum_of_items():
|
|
84
|
+
pass
|
|
85
|
+
|
|
86
|
+
def test_calculate_total_handles_empty_list():
|
|
87
|
+
pass
|
|
88
|
+
|
|
89
|
+
# Bad: Unclear
|
|
90
|
+
def test_calculate():
|
|
91
|
+
pass
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Test Data
|
|
95
|
+
|
|
96
|
+
### Use Fixtures
|
|
97
|
+
|
|
98
|
+
**Reusable Test Data:**
|
|
99
|
+
```python
|
|
100
|
+
@pytest.fixture
|
|
101
|
+
def user():
|
|
102
|
+
return User(email="test@example.com", password="password")
|
|
103
|
+
|
|
104
|
+
def test_user_login(user):
|
|
105
|
+
assert login(user.email, "password") is True
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Isolate Test Data
|
|
109
|
+
|
|
110
|
+
**Independent Tests:**
|
|
111
|
+
```python
|
|
112
|
+
def test_user_operations():
|
|
113
|
+
# Each test creates its own data
|
|
114
|
+
user = create_user()
|
|
115
|
+
# Test operations
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Test Isolation
|
|
119
|
+
|
|
120
|
+
### No Shared State
|
|
121
|
+
|
|
122
|
+
**Independent Tests:**
|
|
123
|
+
```python
|
|
124
|
+
# Good: Isolated
|
|
125
|
+
def test_user_creation():
|
|
126
|
+
user = create_user()
|
|
127
|
+
assert user.id is not None
|
|
128
|
+
|
|
129
|
+
def test_user_deletion():
|
|
130
|
+
user = create_user()
|
|
131
|
+
user.delete()
|
|
132
|
+
assert user.deleted is True
|
|
133
|
+
|
|
134
|
+
# Bad: Shared state
|
|
135
|
+
shared_user = None
|
|
136
|
+
|
|
137
|
+
def test_user_creation():
|
|
138
|
+
global shared_user
|
|
139
|
+
shared_user = create_user()
|
|
140
|
+
|
|
141
|
+
def test_user_deletion():
|
|
142
|
+
shared_user.delete() # Depends on previous test
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Mocking
|
|
146
|
+
|
|
147
|
+
### Mock External Dependencies
|
|
148
|
+
|
|
149
|
+
**Isolate Units:**
|
|
150
|
+
```python
|
|
151
|
+
@patch('external_service.get_data')
|
|
152
|
+
def test_process_data(mock_get):
|
|
153
|
+
mock_get.return_value = {"key": "value"}
|
|
154
|
+
result = process_data()
|
|
155
|
+
assert result == {"key": "value"}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Avoid Over-Mocking
|
|
159
|
+
|
|
160
|
+
**Balance:**
|
|
161
|
+
```python
|
|
162
|
+
# Good: Mock external service
|
|
163
|
+
@patch('api.external_api')
|
|
164
|
+
def test_fetch_data(mock_api):
|
|
165
|
+
mock_api.get.return_value = {"data": "test"}
|
|
166
|
+
result = fetch_data()
|
|
167
|
+
assert result == {"data": "test"}
|
|
168
|
+
|
|
169
|
+
# Bad: Over-mocking
|
|
170
|
+
@patch('database.query')
|
|
171
|
+
@patch('cache.get')
|
|
172
|
+
@patch('logger.info')
|
|
173
|
+
def test_simple_function(mock_logger, mock_cache, mock_db):
|
|
174
|
+
# Too many mocks
|
|
175
|
+
pass
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Test Coverage
|
|
179
|
+
|
|
180
|
+
### Meaningful Coverage
|
|
181
|
+
|
|
182
|
+
**Focus on Value:**
|
|
183
|
+
- Test critical paths
|
|
184
|
+
- Test edge cases
|
|
185
|
+
- Test error handling
|
|
186
|
+
- Don't chase 100% coverage
|
|
187
|
+
|
|
188
|
+
### Coverage Goals
|
|
189
|
+
|
|
190
|
+
**Realistic Targets:**
|
|
191
|
+
- Unit tests: 80-90%
|
|
192
|
+
- Critical code: 100%
|
|
193
|
+
- Integration: 60-70%
|
|
194
|
+
|
|
195
|
+
## Performance
|
|
196
|
+
|
|
197
|
+
### Keep Tests Fast
|
|
198
|
+
|
|
199
|
+
**Optimize Execution:**
|
|
200
|
+
```python
|
|
201
|
+
# Fast: Mock database
|
|
202
|
+
@patch('database.query')
|
|
203
|
+
def test_user_operations(mock_query):
|
|
204
|
+
mock_query.return_value = User()
|
|
205
|
+
# Test operations
|
|
206
|
+
|
|
207
|
+
# Slow: Real database
|
|
208
|
+
def test_user_operations():
|
|
209
|
+
user = User.objects.create(...)
|
|
210
|
+
# Test operations
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Parallel Execution
|
|
214
|
+
|
|
215
|
+
**Speed Up Tests:**
|
|
216
|
+
```bash
|
|
217
|
+
pytest -n auto # Run in parallel
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Error Handling
|
|
221
|
+
|
|
222
|
+
### Test Error Cases
|
|
223
|
+
|
|
224
|
+
**Cover Edge Cases:**
|
|
225
|
+
```python
|
|
226
|
+
def test_divide_by_zero():
|
|
227
|
+
with pytest.raises(ValueError):
|
|
228
|
+
divide(10, 0)
|
|
229
|
+
|
|
230
|
+
def test_invalid_input():
|
|
231
|
+
with pytest.raises(ValueError):
|
|
232
|
+
process_data(None)
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Documentation
|
|
236
|
+
|
|
237
|
+
### Document Tests
|
|
238
|
+
|
|
239
|
+
**Clear Documentation:**
|
|
240
|
+
```python
|
|
241
|
+
def test_calculate_total_with_discount():
|
|
242
|
+
"""
|
|
243
|
+
Test that calculate_total applies discount correctly.
|
|
244
|
+
|
|
245
|
+
Given: Items totaling 100 with 10% discount
|
|
246
|
+
When: calculate_total is called
|
|
247
|
+
Then: Result should be 90
|
|
248
|
+
"""
|
|
249
|
+
items = [50, 50]
|
|
250
|
+
discount = 0.1
|
|
251
|
+
result = calculate_total(items, discount)
|
|
252
|
+
assert result == 90
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Best Practices Summary
|
|
256
|
+
|
|
257
|
+
1. **Write Clear Tests**: AAA pattern, descriptive names
|
|
258
|
+
2. **Test Behavior**: Focus on outcomes, not implementation
|
|
259
|
+
3. **Isolate Tests**: No shared state, independent tests
|
|
260
|
+
4. **Use Fixtures**: Reusable test data
|
|
261
|
+
5. **Mock Appropriately**: External dependencies only
|
|
262
|
+
6. **Keep Tests Fast**: Optimize execution time
|
|
263
|
+
7. **Test Edge Cases**: Error handling, boundary conditions
|
|
264
|
+
8. **Document Tests**: Clear test purpose
|
|
265
|
+
9. **Maintain Tests**: Update with code changes
|
|
266
|
+
10. **Review Tests**: Regular test reviews
|
|
267
|
+
|
|
268
|
+
## Common Mistakes
|
|
269
|
+
|
|
270
|
+
### Testing Implementation
|
|
271
|
+
|
|
272
|
+
**Problem:**
|
|
273
|
+
- Testing how, not what
|
|
274
|
+
- Brittle tests
|
|
275
|
+
- Break on refactoring
|
|
276
|
+
|
|
277
|
+
**Solution:**
|
|
278
|
+
- Test behavior
|
|
279
|
+
- Test public interface
|
|
280
|
+
- Focus on outcomes
|
|
281
|
+
|
|
282
|
+
### Shared State
|
|
283
|
+
|
|
284
|
+
**Problem:**
|
|
285
|
+
- Tests depend on each other
|
|
286
|
+
- Unpredictable results
|
|
287
|
+
- Hard to debug
|
|
288
|
+
|
|
289
|
+
**Solution:**
|
|
290
|
+
- Isolate tests
|
|
291
|
+
- No shared state
|
|
292
|
+
- Independent execution
|
|
293
|
+
|
|
294
|
+
### Over-Mocking
|
|
295
|
+
|
|
296
|
+
**Problem:**
|
|
297
|
+
- Too many mocks
|
|
298
|
+
- Tests don't reflect reality
|
|
299
|
+
- Hard to maintain
|
|
300
|
+
|
|
301
|
+
**Solution:**
|
|
302
|
+
- Mock external dependencies
|
|
303
|
+
- Use real objects when possible
|
|
304
|
+
- Balance isolation and realism
|
|
305
|
+
|
|
306
|
+
## References
|
|
307
|
+
|
|
308
|
+
- [Testing Best Practices](https://testing.googleblog.com/)
|
|
309
|
+
- [Test-Driven Development](https://www.agilealliance.org/glossary/tdd/)
|
|
310
|
+
|