agentic-qe 1.2.0 → 1.3.1
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/.claude/settings.json +44 -6
- package/.claude/skills/accessibility-testing/SKILL.md +777 -0
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +109 -0
- package/.claude/skills/compatibility-testing/SKILL.md +101 -0
- package/.claude/skills/compliance-testing/SKILL.md +162 -0
- package/.claude/skills/contract-testing/SKILL.md +193 -0
- package/.claude/skills/database-testing/SKILL.md +243 -0
- package/.claude/skills/localization-testing/SKILL.md +115 -0
- package/.claude/skills/mobile-testing/SKILL.md +548 -0
- package/.claude/skills/mutation-testing/SKILL.md +129 -0
- package/.claude/skills/regression-testing/SKILL.md +1045 -0
- package/.claude/skills/shift-left-testing/SKILL.md +535 -0
- package/.claude/skills/shift-right-testing/SKILL.md +591 -0
- package/.claude/skills/skill-builder/SKILL.md +1 -1
- package/.claude/skills/test-data-management/SKILL.md +1067 -0
- package/.claude/skills/test-design-techniques/SKILL.md +160 -0
- package/.claude/skills/test-environment-management/SKILL.md +204 -0
- package/.claude/skills/test-reporting-analytics/SKILL.md +143 -0
- package/.claude/skills/visual-testing-advanced/SKILL.md +148 -0
- package/CHANGELOG.md +130 -511
- package/README.md +21 -10
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +5 -4
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +9 -8
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +3 -2
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +2 -1
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +7 -6
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +7 -6
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +37 -36
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +2 -1
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +15 -14
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +2 -1
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +12 -11
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +17 -16
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +10 -9
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/cli/commands/agent/benchmark.d.ts.map +1 -1
- package/dist/cli/commands/agent/benchmark.js +2 -1
- package/dist/cli/commands/agent/benchmark.js.map +1 -1
- package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
- package/dist/cli/commands/agent/spawn.js +2 -1
- package/dist/cli/commands/agent/spawn.js.map +1 -1
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +2 -1
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/config/list.d.ts.map +1 -1
- package/dist/cli/commands/config/list.js +2 -1
- package/dist/cli/commands/config/list.js.map +1 -1
- package/dist/cli/commands/config/set.d.ts +7 -0
- package/dist/cli/commands/config/set.d.ts.map +1 -1
- package/dist/cli/commands/config/set.js +35 -4
- package/dist/cli/commands/config/set.js.map +1 -1
- package/dist/cli/commands/fleet/logs.d.ts.map +1 -1
- package/dist/cli/commands/fleet/logs.js +2 -1
- package/dist/cli/commands/fleet/logs.js.map +1 -1
- package/dist/cli/commands/fleet/metrics.d.ts.map +1 -1
- package/dist/cli/commands/fleet/metrics.js +2 -1
- package/dist/cli/commands/fleet/metrics.js.map +1 -1
- package/dist/cli/commands/fleet/monitor.d.ts.map +1 -1
- package/dist/cli/commands/fleet/monitor.js +7 -5
- package/dist/cli/commands/fleet/monitor.js.map +1 -1
- package/dist/cli/commands/fleet.d.ts.map +1 -1
- package/dist/cli/commands/fleet.js +2 -1
- package/dist/cli/commands/fleet.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +2 -1
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts.map +1 -1
- package/dist/cli/commands/improve/index.js +12 -11
- package/dist/cli/commands/improve/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +54 -27
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +13 -12
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/commands/monitor/alerts.d.ts.map +1 -1
- package/dist/cli/commands/monitor/alerts.js +2 -1
- package/dist/cli/commands/monitor/alerts.js.map +1 -1
- package/dist/cli/commands/patterns/index.d.ts.map +1 -1
- package/dist/cli/commands/patterns/index.js +20 -19
- package/dist/cli/commands/patterns/index.js.map +1 -1
- package/dist/cli/commands/quality/decision.d.ts.map +1 -1
- package/dist/cli/commands/quality/decision.js +9 -7
- package/dist/cli/commands/quality/decision.js.map +1 -1
- package/dist/cli/commands/quality/gate.d.ts.map +1 -1
- package/dist/cli/commands/quality/gate.js +10 -8
- package/dist/cli/commands/quality/gate.js.map +1 -1
- package/dist/cli/commands/quality/policy.d.ts.map +1 -1
- package/dist/cli/commands/quality/policy.js +10 -8
- package/dist/cli/commands/quality/policy.js.map +1 -1
- package/dist/cli/commands/quality/risk.d.ts.map +1 -1
- package/dist/cli/commands/quality/risk.js +5 -3
- package/dist/cli/commands/quality/risk.js.map +1 -1
- package/dist/cli/commands/quality/validate.d.ts.map +1 -1
- package/dist/cli/commands/quality/validate.js +10 -8
- package/dist/cli/commands/quality/validate.js.map +1 -1
- package/dist/cli/commands/quantization.d.ts +6 -0
- package/dist/cli/commands/quantization.d.ts.map +1 -0
- package/dist/cli/commands/quantization.js +188 -0
- package/dist/cli/commands/quantization.js.map +1 -0
- package/dist/cli/commands/routing/index.d.ts +0 -6
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +17 -16
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +2 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/skills/index.d.ts.map +1 -1
- package/dist/cli/commands/skills/index.js +10 -9
- package/dist/cli/commands/skills/index.js.map +1 -1
- package/dist/cli/commands/test/debug.d.ts.map +1 -1
- package/dist/cli/commands/test/debug.js +2 -1
- package/dist/cli/commands/test/debug.js.map +1 -1
- package/dist/cli/commands/test/mutate.d.ts.map +1 -1
- package/dist/cli/commands/test/mutate.js +2 -1
- package/dist/cli/commands/test/mutate.js.map +1 -1
- package/dist/cli/commands/test/parallel.d.ts.map +1 -1
- package/dist/cli/commands/test/parallel.js +6 -4
- package/dist/cli/commands/test/parallel.js.map +1 -1
- package/dist/cli/commands/test/profile.d.ts.map +1 -1
- package/dist/cli/commands/test/profile.js +3 -2
- package/dist/cli/commands/test/profile.js.map +1 -1
- package/dist/cli/commands/test/queue.d.ts.map +1 -1
- package/dist/cli/commands/test/queue.js +2 -1
- package/dist/cli/commands/test/queue.js.map +1 -1
- package/dist/cli/commands/test/retry.d.ts.map +1 -1
- package/dist/cli/commands/test/retry.js +6 -4
- package/dist/cli/commands/test/retry.js.map +1 -1
- package/dist/cli/commands/test/trace.d.ts.map +1 -1
- package/dist/cli/commands/test/trace.js +2 -1
- package/dist/cli/commands/test/trace.js.map +1 -1
- package/dist/cli/commands/test/watch.d.ts.map +1 -1
- package/dist/cli/commands/test/watch.js +3 -2
- package/dist/cli/commands/test/watch.js.map +1 -1
- package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
- package/dist/cli/commands/workflow/cancel.js +2 -1
- package/dist/cli/commands/workflow/cancel.js.map +1 -1
- package/dist/cli/index-working.js +9 -8
- package/dist/cli/index-working.js.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/coordination/OODACoordination.d.ts.map +1 -1
- package/dist/core/coordination/OODACoordination.js +2 -1
- package/dist/core/coordination/OODACoordination.js.map +1 -1
- package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
- package/dist/core/memory/AgentDBManager.js +2 -19
- package/dist/core/memory/AgentDBManager.js.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +4 -3
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.js +2 -5
- package/dist/core/memory/ReasoningBankAdapter.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +4 -3
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/neural/NeuralTrainer.d.ts.map +1 -1
- package/dist/core/neural/NeuralTrainer.js +3 -2
- package/dist/core/neural/NeuralTrainer.js.map +1 -1
- package/dist/core/quantization/QuantizationManager.d.ts +83 -0
- package/dist/core/quantization/QuantizationManager.d.ts.map +1 -0
- package/dist/core/quantization/QuantizationManager.js +264 -0
- package/dist/core/quantization/QuantizationManager.js.map +1 -0
- package/dist/core/quantization/index.d.ts +5 -0
- package/dist/core/quantization/index.d.ts.map +1 -0
- package/dist/core/quantization/index.js +9 -0
- package/dist/core/quantization/index.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +4 -1
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/mcp/handlers/advanced/mutation-test-execute.d.ts +3 -3
- package/dist/mcp/handlers/advanced/mutation-test-execute.d.ts.map +1 -1
- package/dist/mcp/handlers/advanced/mutation-test-execute.js +5 -4
- package/dist/mcp/handlers/advanced/mutation-test-execute.js.map +1 -1
- package/dist/mcp/handlers/agent-spawn.d.ts.map +1 -1
- package/dist/mcp/handlers/agent-spawn.js +2 -1
- package/dist/mcp/handlers/agent-spawn.js.map +1 -1
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js +9 -8
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js.map +1 -1
- package/dist/mcp/handlers/analysis/coverageGapsDetect.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/coverageGapsDetect.js +6 -5
- package/dist/mcp/handlers/analysis/coverageGapsDetect.js.map +1 -1
- package/dist/mcp/handlers/analysis/performance-monitor-realtime-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/performance-monitor-realtime-handler.js +5 -4
- package/dist/mcp/handlers/analysis/performance-monitor-realtime-handler.js.map +1 -1
- package/dist/mcp/handlers/analysis/performanceBenchmarkRun.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/performanceBenchmarkRun.js +8 -7
- package/dist/mcp/handlers/analysis/performanceBenchmarkRun.js.map +1 -1
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js +7 -6
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js.map +1 -1
- package/dist/mcp/handlers/analysis/securityScanComprehensive.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/securityScanComprehensive.js +18 -21
- package/dist/mcp/handlers/analysis/securityScanComprehensive.js.map +1 -1
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
- package/dist/mcp/handlers/base-handler.js +2 -9
- package/dist/mcp/handlers/base-handler.js.map +1 -1
- package/dist/mcp/handlers/chaos/chaos-inject-failure.d.ts.map +1 -1
- package/dist/mcp/handlers/chaos/chaos-inject-failure.js +4 -3
- package/dist/mcp/handlers/chaos/chaos-inject-failure.js.map +1 -1
- package/dist/mcp/handlers/chaos/chaos-inject-latency.d.ts.map +1 -1
- package/dist/mcp/handlers/chaos/chaos-inject-latency.js +6 -5
- package/dist/mcp/handlers/chaos/chaos-inject-latency.js.map +1 -1
- package/dist/mcp/handlers/coordination/event-emit.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/event-emit.js +2 -1
- package/dist/mcp/handlers/coordination/event-emit.js.map +1 -1
- package/dist/mcp/handlers/coordination/event-subscribe.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/event-subscribe.js +2 -1
- package/dist/mcp/handlers/coordination/event-subscribe.js.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-checkpoint.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-checkpoint.js +2 -1
- package/dist/mcp/handlers/coordination/workflow-checkpoint.js.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-create.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-create.js +2 -1
- package/dist/mcp/handlers/coordination/workflow-create.js.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-execute.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-execute.js +2 -1
- package/dist/mcp/handlers/coordination/workflow-execute.js.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-resume.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/workflow-resume.js +2 -1
- package/dist/mcp/handlers/coordination/workflow-resume.js.map +1 -1
- package/dist/mcp/handlers/fleet-init.d.ts.map +1 -1
- package/dist/mcp/handlers/fleet-init.js +2 -1
- package/dist/mcp/handlers/fleet-init.js.map +1 -1
- package/dist/mcp/handlers/fleet-status.d.ts.map +1 -1
- package/dist/mcp/handlers/fleet-status.js +31 -30
- package/dist/mcp/handlers/fleet-status.js.map +1 -1
- package/dist/mcp/handlers/integration/dependency-check.d.ts.map +1 -1
- package/dist/mcp/handlers/integration/dependency-check.js +3 -2
- package/dist/mcp/handlers/integration/dependency-check.js.map +1 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js +2 -1
- package/dist/mcp/handlers/integration/integration-test-orchestrate.js.map +1 -1
- package/dist/mcp/handlers/optimize-tests.d.ts.map +1 -1
- package/dist/mcp/handlers/optimize-tests.js +33 -32
- package/dist/mcp/handlers/optimize-tests.js.map +1 -1
- package/dist/mcp/handlers/predict-defects.d.ts.map +1 -1
- package/dist/mcp/handlers/predict-defects.js +46 -45
- package/dist/mcp/handlers/predict-defects.js.map +1 -1
- package/dist/mcp/handlers/prediction/deployment-readiness-check.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/deployment-readiness-check.js +24 -23
- package/dist/mcp/handlers/prediction/deployment-readiness-check.js.map +1 -1
- package/dist/mcp/handlers/prediction/predict-defects-ai.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/predict-defects-ai.js +10 -9
- package/dist/mcp/handlers/prediction/predict-defects-ai.js.map +1 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/regression-risk-analyze.js +10 -9
- package/dist/mcp/handlers/prediction/regression-risk-analyze.js.map +1 -1
- package/dist/mcp/handlers/prediction/visual-test-regression.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/visual-test-regression.js +7 -6
- package/dist/mcp/handlers/prediction/visual-test-regression.js.map +1 -1
- package/dist/mcp/handlers/quality-analyze.d.ts.map +1 -1
- package/dist/mcp/handlers/quality-analyze.js +53 -52
- package/dist/mcp/handlers/quality-analyze.js.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +19 -18
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/handlers/test/test-execute-parallel.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-execute-parallel.js +7 -6
- package/dist/mcp/handlers/test/test-execute-parallel.js.map +1 -1
- package/dist/mcp/handlers/test/test-generate-enhanced.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-generate-enhanced.js +2 -1
- package/dist/mcp/handlers/test/test-generate-enhanced.js.map +1 -1
- package/dist/mcp/handlers/test/test-optimize-sublinear.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-optimize-sublinear.js +3 -2
- package/dist/mcp/handlers/test/test-optimize-sublinear.js.map +1 -1
- package/dist/mcp/handlers/test-execute.d.ts.map +1 -1
- package/dist/mcp/handlers/test-execute.js +11 -10
- package/dist/mcp/handlers/test-execute.js.map +1 -1
- package/dist/mcp/handlers/test-generate.d.ts.map +1 -1
- package/dist/mcp/handlers/test-generate.js +4 -3
- package/dist/mcp/handlers/test-generate.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +2 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +10 -9
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -1
- package/dist/mcp/streaming/StreamingMCPTool.d.ts.map +1 -1
- package/dist/mcp/streaming/StreamingMCPTool.js +2 -1
- package/dist/mcp/streaming/StreamingMCPTool.js.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.js +6 -5
- package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -1
- package/dist/reasoning/TestTemplateCreator.d.ts +10 -2
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -1
- package/dist/reasoning/TestTemplateCreator.js +81 -21
- package/dist/reasoning/TestTemplateCreator.js.map +1 -1
- package/dist/types/pattern.types.d.ts +39 -3
- package/dist/types/pattern.types.d.ts.map +1 -1
- package/dist/utils/Config.js +2 -2
- package/dist/utils/Config.js.map +1 -1
- package/dist/utils/ProcessExit.d.ts +23 -0
- package/dist/utils/ProcessExit.d.ts.map +1 -0
- package/dist/utils/ProcessExit.js +40 -0
- package/dist/utils/ProcessExit.js.map +1 -0
- package/dist/utils/SecureRandom.d.ts +171 -0
- package/dist/utils/SecureRandom.d.ts.map +1 -0
- package/dist/utils/SecureRandom.js +229 -0
- package/dist/utils/SecureRandom.js.map +1 -0
- package/dist/utils/SecureUrlValidator.d.ts +167 -0
- package/dist/utils/SecureUrlValidator.d.ts.map +1 -0
- package/dist/utils/SecureUrlValidator.js +306 -0
- package/dist/utils/SecureUrlValidator.js.map +1 -0
- package/dist/utils/SecureValidation.d.ts +131 -0
- package/dist/utils/SecureValidation.d.ts.map +1 -0
- package/dist/utils/SecureValidation.js +265 -0
- package/dist/utils/SecureValidation.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +5 -4
- package/dist/utils/validation.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database-testing
|
|
3
|
+
description: Database schema validation, data integrity testing, migration testing, transaction isolation, and query performance. Use when testing data persistence, ensuring referential integrity, or validating database migrations.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
category: specialized-testing
|
|
6
|
+
tags: [database-testing, sql, schema-migration, data-integrity, transaction-testing, query-performance]
|
|
7
|
+
difficulty: intermediate
|
|
8
|
+
estimated_time: 75 minutes
|
|
9
|
+
author: agentic-qe
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Database Testing
|
|
13
|
+
|
|
14
|
+
## Core Principle
|
|
15
|
+
|
|
16
|
+
**Data is your most valuable asset. Database bugs cause data loss/corruption.**
|
|
17
|
+
|
|
18
|
+
Database testing ensures schema correctness, data integrity, transaction safety, and query performance. Critical for preventing catastrophic data issues.
|
|
19
|
+
|
|
20
|
+
## Schema Testing
|
|
21
|
+
|
|
22
|
+
**Validate database structure:**
|
|
23
|
+
```sql
|
|
24
|
+
-- Test schema exists
|
|
25
|
+
SELECT table_name FROM information_schema.tables
|
|
26
|
+
WHERE table_schema = 'public' AND table_name = 'users';
|
|
27
|
+
|
|
28
|
+
-- Test column types
|
|
29
|
+
SELECT column_name, data_type
|
|
30
|
+
FROM information_schema.columns
|
|
31
|
+
WHERE table_name = 'users';
|
|
32
|
+
|
|
33
|
+
-- Test constraints
|
|
34
|
+
SELECT constraint_name, constraint_type
|
|
35
|
+
FROM information_schema.table_constraints
|
|
36
|
+
WHERE table_name = 'users';
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Test with code:**
|
|
40
|
+
```javascript
|
|
41
|
+
test('users table has correct schema', async () => {
|
|
42
|
+
const schema = await db.raw(`
|
|
43
|
+
SELECT column_name, data_type, is_nullable
|
|
44
|
+
FROM information_schema.columns
|
|
45
|
+
WHERE table_name = 'users'
|
|
46
|
+
`);
|
|
47
|
+
|
|
48
|
+
expect(schema).toContainEqual({
|
|
49
|
+
column_name: 'id',
|
|
50
|
+
data_type: 'integer',
|
|
51
|
+
is_nullable: 'NO'
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
expect(schema).toContainEqual({
|
|
55
|
+
column_name: 'email',
|
|
56
|
+
data_type: 'character varying',
|
|
57
|
+
is_nullable: 'NO'
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Data Integrity Testing
|
|
63
|
+
|
|
64
|
+
**Test constraints:**
|
|
65
|
+
```javascript
|
|
66
|
+
test('email must be unique', async () => {
|
|
67
|
+
await db.users.create({ email: 'test@example.com' });
|
|
68
|
+
|
|
69
|
+
// Duplicate should fail
|
|
70
|
+
await expect(
|
|
71
|
+
db.users.create({ email: 'test@example.com' })
|
|
72
|
+
).rejects.toThrow('unique constraint violation');
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test('foreign key prevents orphaned records', async () => {
|
|
76
|
+
const user = await db.users.create({ email: 'test@example.com' });
|
|
77
|
+
await db.orders.create({ userId: user.id, total: 100 });
|
|
78
|
+
|
|
79
|
+
// Cannot delete user with orders
|
|
80
|
+
await expect(
|
|
81
|
+
db.users.delete({ id: user.id })
|
|
82
|
+
).rejects.toThrow('foreign key constraint');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('check constraint validates data', async () => {
|
|
86
|
+
// Age must be ≥ 18
|
|
87
|
+
await expect(
|
|
88
|
+
db.users.create({ email: 'minor@example.com', age: 17 })
|
|
89
|
+
).rejects.toThrow('check constraint violation');
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Migration Testing
|
|
94
|
+
|
|
95
|
+
**Test database migrations:**
|
|
96
|
+
```javascript
|
|
97
|
+
import { migrate, rollback } from './migrations';
|
|
98
|
+
|
|
99
|
+
test('migration adds users table', async () => {
|
|
100
|
+
// Start fresh
|
|
101
|
+
await rollback();
|
|
102
|
+
|
|
103
|
+
// Run migration
|
|
104
|
+
await migrate();
|
|
105
|
+
|
|
106
|
+
// Verify table exists
|
|
107
|
+
const tables = await db.raw(`
|
|
108
|
+
SELECT table_name FROM information_schema.tables
|
|
109
|
+
WHERE table_schema = 'public'
|
|
110
|
+
`);
|
|
111
|
+
|
|
112
|
+
expect(tables.map(t => t.table_name)).toContain('users');
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test('migration is reversible', async () => {
|
|
116
|
+
await migrate();
|
|
117
|
+
await rollback();
|
|
118
|
+
|
|
119
|
+
// Table should be gone
|
|
120
|
+
const tables = await db.raw(`
|
|
121
|
+
SELECT table_name FROM information_schema.tables
|
|
122
|
+
WHERE table_schema = 'public'
|
|
123
|
+
`);
|
|
124
|
+
|
|
125
|
+
expect(tables.map(t => t.table_name)).not.toContain('users');
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test('migration preserves existing data', async () => {
|
|
129
|
+
// Create data before migration
|
|
130
|
+
await db.users.create({ email: 'test@example.com' });
|
|
131
|
+
|
|
132
|
+
// Run migration that adds 'age' column
|
|
133
|
+
await migrate('add-age-column');
|
|
134
|
+
|
|
135
|
+
// Data should still exist
|
|
136
|
+
const user = await db.users.findOne({ email: 'test@example.com' });
|
|
137
|
+
expect(user).toBeDefined();
|
|
138
|
+
expect(user.age).toBeNull(); // New column, null default
|
|
139
|
+
});
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Transaction Isolation Testing
|
|
143
|
+
|
|
144
|
+
**Test ACID properties:**
|
|
145
|
+
```javascript
|
|
146
|
+
test('transaction rolls back on error', async () => {
|
|
147
|
+
const initialCount = await db.users.count();
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
await db.transaction(async (trx) => {
|
|
151
|
+
await trx('users').insert({ email: 'user1@example.com' });
|
|
152
|
+
await trx('users').insert({ email: 'user2@example.com' });
|
|
153
|
+
|
|
154
|
+
// Force error
|
|
155
|
+
throw new Error('Rollback test');
|
|
156
|
+
});
|
|
157
|
+
} catch (error) {
|
|
158
|
+
// Expected
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// No users should be inserted
|
|
162
|
+
const finalCount = await db.users.count();
|
|
163
|
+
expect(finalCount).toBe(initialCount);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('concurrent transactions are isolated', async () => {
|
|
167
|
+
const user = await db.users.create({ email: 'test@example.com', balance: 100 });
|
|
168
|
+
|
|
169
|
+
// Two concurrent withdrawals
|
|
170
|
+
const withdraw1 = db.transaction(async (trx) => {
|
|
171
|
+
const current = await trx('users').where({ id: user.id }).first();
|
|
172
|
+
await sleep(100); // Simulate delay
|
|
173
|
+
await trx('users').where({ id: user.id }).update({
|
|
174
|
+
balance: current.balance - 50
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
const withdraw2 = db.transaction(async (trx) => {
|
|
179
|
+
const current = await trx('users').where({ id: user.id }).first();
|
|
180
|
+
await sleep(100);
|
|
181
|
+
await trx('users').where({ id: user.id }).update({
|
|
182
|
+
balance: current.balance - 50
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
await Promise.all([withdraw1, withdraw2]);
|
|
187
|
+
|
|
188
|
+
// With proper isolation, balance should be 0, not 50
|
|
189
|
+
const final = await db.users.findOne({ id: user.id });
|
|
190
|
+
expect(final.balance).toBe(0); // Not 50!
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Query Performance Testing
|
|
195
|
+
|
|
196
|
+
**Test slow queries:**
|
|
197
|
+
```javascript
|
|
198
|
+
test('user lookup by email is fast', async () => {
|
|
199
|
+
// Seed 10,000 users
|
|
200
|
+
await seedUsers(10000);
|
|
201
|
+
|
|
202
|
+
const start = Date.now();
|
|
203
|
+
await db.users.findOne({ email: 'user5000@example.com' });
|
|
204
|
+
const duration = Date.now() - start;
|
|
205
|
+
|
|
206
|
+
// Should use index on email
|
|
207
|
+
expect(duration).toBeLessThan(10); // < 10ms
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
test('EXPLAIN shows index usage', async () => {
|
|
211
|
+
const explain = await db.raw(`
|
|
212
|
+
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com'
|
|
213
|
+
`);
|
|
214
|
+
|
|
215
|
+
// Should show index scan, not sequential scan
|
|
216
|
+
const plan = explain.rows[0]['QUERY PLAN'];
|
|
217
|
+
expect(plan).toContain('Index Scan');
|
|
218
|
+
expect(plan).not.toContain('Seq Scan');
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Related Skills
|
|
223
|
+
|
|
224
|
+
- [test-data-management](../test-data-management/) - Generate test data for DB
|
|
225
|
+
- [performance-testing](../performance-testing/) - DB performance testing
|
|
226
|
+
- [test-automation-strategy](../test-automation-strategy/) - Automate DB tests
|
|
227
|
+
|
|
228
|
+
## Remember
|
|
229
|
+
|
|
230
|
+
**Database bugs are catastrophic.**
|
|
231
|
+
|
|
232
|
+
- Data loss is unrecoverable
|
|
233
|
+
- Corruption spreads silently
|
|
234
|
+
- Performance issues compound
|
|
235
|
+
- Migrations must be reversible
|
|
236
|
+
|
|
237
|
+
**Test migrations before production:**
|
|
238
|
+
- Forward migration works
|
|
239
|
+
- Backward rollback works
|
|
240
|
+
- Data preserved/migrated correctly
|
|
241
|
+
- Performance acceptable
|
|
242
|
+
|
|
243
|
+
**With Agents:** `qe-test-data-architect` generates realistic test data with referential integrity. `qe-test-executor` runs DB migration tests automatically in CI/CD.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: localization-testing
|
|
3
|
+
description: Internationalization (i18n) and localization (l10n) testing for global products including translations, locale formats, RTL languages, and cultural appropriateness. Use when launching in new markets or building multi-language products.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
category: specialized-testing
|
|
6
|
+
tags: [i18n, l10n, localization, internationalization, translations, rtl, locale]
|
|
7
|
+
difficulty: intermediate
|
|
8
|
+
estimated_time: 60 minutes
|
|
9
|
+
author: agentic-qe
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Localization & Internationalization Testing
|
|
13
|
+
|
|
14
|
+
## Core Principle
|
|
15
|
+
|
|
16
|
+
**Global products must work globally.**
|
|
17
|
+
|
|
18
|
+
i18n testing ensures software supports multiple languages, regions, and cultures without code changes.
|
|
19
|
+
|
|
20
|
+
## i18n vs l10n
|
|
21
|
+
|
|
22
|
+
**Internationalization (i18n):** Building software to support localization
|
|
23
|
+
**Localization (l10n):** Adapting software for specific locale
|
|
24
|
+
|
|
25
|
+
## Testing Translation Coverage
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
test('all strings are translated', () => {
|
|
29
|
+
const enKeys = Object.keys(translations.en);
|
|
30
|
+
const frKeys = Object.keys(translations.fr);
|
|
31
|
+
const esKeys = Object.keys(translations.es);
|
|
32
|
+
|
|
33
|
+
// All locales have same keys
|
|
34
|
+
expect(frKeys).toEqual(enKeys);
|
|
35
|
+
expect(esKeys).toEqual(enKeys);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('no missing translation placeholders', () => {
|
|
39
|
+
const text = await page.locator('button').textContent();
|
|
40
|
+
|
|
41
|
+
// Should not see placeholder keys
|
|
42
|
+
expect(text).not.toContain('translation.missing');
|
|
43
|
+
expect(text).not.toMatch(/\{\{.*\}\}/); // {{key}} format
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Date/Time/Currency Formats
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
test('date formats by locale', () => {
|
|
51
|
+
const date = new Date('2025-10-24');
|
|
52
|
+
|
|
53
|
+
expect(formatDate(date, 'en-US')).toBe('10/24/2025');
|
|
54
|
+
expect(formatDate(date, 'en-GB')).toBe('24/10/2025');
|
|
55
|
+
expect(formatDate(date, 'ja-JP')).toBe('2025/10/24');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('currency formats by locale', () => {
|
|
59
|
+
const amount = 1234.56;
|
|
60
|
+
|
|
61
|
+
expect(formatCurrency(amount, 'USD')).toBe('$1,234.56');
|
|
62
|
+
expect(formatCurrency(amount, 'EUR')).toBe('€1.234,56');
|
|
63
|
+
expect(formatCurrency(amount, 'JPY')).toBe('¥1,235'); // No decimals
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## RTL (Right-to-Left) Testing
|
|
68
|
+
|
|
69
|
+
```javascript
|
|
70
|
+
test('layout flips for RTL languages', async () => {
|
|
71
|
+
await page.goto('/?lang=ar'); // Arabic
|
|
72
|
+
|
|
73
|
+
const dir = await page.locator('html').getAttribute('dir');
|
|
74
|
+
expect(dir).toBe('rtl');
|
|
75
|
+
|
|
76
|
+
// Navigation should be on right
|
|
77
|
+
const nav = await page.locator('nav');
|
|
78
|
+
const styles = await nav.evaluate((el) =>
|
|
79
|
+
window.getComputedStyle(el)
|
|
80
|
+
);
|
|
81
|
+
expect(styles.direction).toBe('rtl');
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Character Encoding
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
test('supports unicode characters', async () => {
|
|
89
|
+
// Japanese
|
|
90
|
+
await page.fill('#name', '山田太郎');
|
|
91
|
+
|
|
92
|
+
// Arabic
|
|
93
|
+
await page.fill('#name', 'محمد');
|
|
94
|
+
|
|
95
|
+
// Emoji
|
|
96
|
+
await page.fill('#name', '👋🌍');
|
|
97
|
+
|
|
98
|
+
// Verify saved correctly
|
|
99
|
+
const saved = await db.users.findOne({ id: userId });
|
|
100
|
+
expect(saved.name).toBe('👋🌍');
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Remember
|
|
105
|
+
|
|
106
|
+
**Don't hardcode. Externalize all user-facing strings.**
|
|
107
|
+
|
|
108
|
+
Test:
|
|
109
|
+
- Translation completeness
|
|
110
|
+
- Locale-specific formats (date, time, currency)
|
|
111
|
+
- RTL layout (Arabic, Hebrew)
|
|
112
|
+
- Character encoding (UTF-8)
|
|
113
|
+
- Cultural appropriateness
|
|
114
|
+
|
|
115
|
+
**With Agents:** Agents validate translation coverage, detect hardcoded strings, and test locale-specific formatting automatically across all supported languages.
|