Files
gh-ninthspace-claude-code-m…/commands/story-test-integration.md
2025-11-30 08:44:27 +08:00

510 lines
13 KiB
Markdown

# /sdd:story-test-integration
Execute comprehensive integration and end-to-end tests for story validation.
---
## Meta
**Category**: Testing & Validation
**Format**: Imperative (Comprehensive)
**Execution Time**: 3-8 minutes
**Prerequisites**: Active story in `/docs/stories/development/` or `/docs/stories/review/`
**Destructive**: No (read-only with test execution)
**Related Commands**:
- `/sdd:story-quick-check` - Fast validation before integration tests
- `/sdd:story-full-check` - Comprehensive validation suite (includes this + more)
- `/sdd:story-validate` - Final story validation (runs after this)
**Context Requirements**:
- `/docs/project-context/technical-stack.md` (testing tools, frameworks, database)
- `/docs/project-context/coding-standards.md` (test patterns, coverage requirements)
- `/docs/project-context/development-process.md` (integration testing criteria)
---
## Parameters
**Story Parameters**:
```bash
# Auto-detect from current active story or specify:
--story-id=STORY-XXX-NNN # Specific story ID
--scope=api|db|e2e|all # Test scope (default: all)
--performance # Include performance profiling
```
**Test Configuration**:
```bash
--browser=chrome|firefox|safari # Browser for e2e tests (default: chrome)
--parallel=N # Parallel test execution (default: 4)
--coverage # Generate coverage report
--verbose # Detailed test output
```
---
## Process
### Phase 1: Test Scope Discovery (30s)
**Load Context**:
```bash
# Verify project context exists
if ! [ -d /docs/project-context/ ]; then
echo "⚠️ Missing /docs/project-context/ - run /sdd:project-init first"
exit 1
fi
# Load testing requirements
source /docs/project-context/technical-stack.md # Testing tools
source /docs/project-context/coding-standards.md # Test patterns
source /docs/project-context/development-process.md # Integration criteria
```
**Identify Test Scope**:
1. Read active story acceptance criteria
2. Extract integration points (API, database, external services)
3. Identify dependent services and components
4. Determine required test types (API, DB, E2E, performance)
**Output**:
```
🎯 INTEGRATION TEST SCOPE
========================
Story: STORY-XXX-NNN - [Title]
Integration Points:
✓ API: POST /api/tasks, GET /api/tasks/{id}
✓ Database: tasks, categories, task_category pivot
✓ Livewire: TaskManager component
✓ Browser: Task creation workflow
Test Types: API, Database, E2E, Performance
Estimated Duration: ~5 minutes
```
---
### Phase 2: API Integration Tests (1-2 min)
**Execute API Tests**:
```bash
# Laravel/Pest example
php artisan test --filter=Api --coverage
# Check:
✓ Endpoint functionality (CRUD operations)
✓ Request/response formats (JSON, validation)
✓ Authentication/authorization (gates, policies)
✓ Error responses (422, 404, 403, 500)
✓ Rate limiting (if configured)
```
**Output**:
```
🔗 API INTEGRATION TESTS
=======================
✅ POST /api/tasks creates task (24ms)
✅ GET /api/tasks returns all tasks (18ms)
✅ PUT /api/tasks/{id} updates task (22ms)
✅ DELETE /api/tasks/{id} removes task (19ms)
❌ POST /api/tasks validates input (FAILED)
Expected 422, got 500
Error: Column 'order' cannot be null
Passed: 4/5 (80%)
Failed: 1
Duration: 0.8s
```
---
### Phase 3: Database Integration Tests (1-2 min)
**Execute Database Tests**:
```bash
# Test database operations
php artisan test --filter=Database
# Check:
✓ CRUD operations (create, read, update, delete)
✓ Transactions (rollback, commit)
✓ Data integrity (constraints, foreign keys)
✓ Migrations (up, down, fresh)
✓ Relationships (eager loading, N+1 prevention)
```
**Output**:
```
💾 DATABASE INTEGRATION
======================
✅ Task model creates records (12ms)
✅ Categories relationship loads (8ms)
✅ Soft deletes work correctly (10ms)
✅ Order column maintains sequence (15ms)
✅ Transaction rollback on error (18ms)
Passed: 5/5 (100%)
Duration: 0.6s
Query Performance:
Average: 8ms
Slowest: Task::with('categories') - 15ms
```
---
### Phase 4: End-to-End Tests (2-4 min)
**Execute Browser Tests**:
```bash
# Pest v4 Browser Testing
php artisan test --filter=Browser --browser=chrome
# Test workflows:
✓ Complete user workflows (login → create → edit → delete)
✓ Multi-step processes (task creation with categories)
✓ Cross-feature interactions (filtering + sorting)
✓ Data flow validation (form → server → database → UI)
```
**Output**:
```
🌐 END-TO-END TESTS (Chrome)
===========================
✅ User can create task with category (2.4s)
✅ Task displays in correct order (1.8s)
✅ Drag-and-drop reorders tasks (3.1s)
❌ Mobile touch gestures work (FAILED)
Element not found: [wire:sortable]
Screenshot: /tmp/mobile-touch-fail.png
Passed: 3/4 (75%)
Failed: 1
Duration: 8.2s
Console Errors: None
Network Errors: None
```
---
### Phase 5: Performance Testing (1-2 min, optional)
**Execute Performance Tests** (if `--performance` flag):
```bash
# Load testing
ab -n 100 -c 10 https://ccs-todo.test/api/tasks
# Check:
✓ API response times (< 200ms p95)
✓ Database query performance (< 50ms avg)
✓ Memory usage (< 128MB)
✓ Stress test critical paths (100 concurrent users)
```
**Output**:
```
⚡ PERFORMANCE PROFILING
=======================
API Endpoints:
GET /api/tasks avg: 45ms p95: 120ms ✓
POST /api/tasks avg: 68ms p95: 180ms ✓
PUT /api/tasks/{id} avg: 52ms p95: 150ms ✓
Database Queries:
Average: 12ms
Slowest: Task::with('categories', 'tags') - 48ms
Memory Usage: 64MB (peak: 82MB) ✓
Bottlenecks: None detected
```
---
### Phase 6: Test Report Generation (10s)
**Generate Comprehensive Report**:
```
📊 INTEGRATION TEST RESULTS
===========================
Story: STORY-XXX-NNN - [Title]
Executed: 2025-10-01 14:32:15
Duration: 5m 12s
OVERALL: 🟡 PASSING WITH WARNINGS
┌─────────────────────┬────────┬────────┬─────────┬──────────┐
│ Test Suite │ Passed │ Failed │ Skipped │ Coverage │
├─────────────────────┼────────┼────────┼─────────┼──────────┤
│ API Integration │ 4 │ 1 │ 0 │ 92% │
│ Database Integration│ 5 │ 0 │ 0 │ 88% │
│ E2E Browser │ 3 │ 1 │ 0 │ 76% │
│ Performance │ N/A │ N/A │ N/A │ N/A │
├─────────────────────┼────────┼────────┼─────────┼──────────┤
│ TOTAL │ 12 │ 2 │ 0 │ 85% │
└─────────────────────┴────────┴────────┴─────────┴──────────┘
❌ FAILED TESTS (2):
1. POST /api/tasks validates input
Error: Column 'order' cannot be null
Fix: Add default value to 'order' column in migration
2. Mobile touch gestures work
Error: Element not found: [wire:sortable]
Fix: Ensure SortableJS loads on mobile viewport
Screenshot: /tmp/mobile-touch-fail.png
⚠️ WARNINGS (1):
- Slowest query: Task::with('categories', 'tags') - 48ms
Consider adding indexes or reducing eager loading
✅ HIGHLIGHTS:
✓ All database operations working correctly
✓ API authentication/authorization passing
✓ Desktop E2E workflows functional
✓ Performance within acceptable ranges
📈 COVERAGE: 85% (target: 80%+)
Lines: 342/402
Branches: 28/35
Functions: 45/48
🎯 NEXT STEPS:
1. Fix: Add default order value in migration
2. Fix: Debug mobile touch gesture handling
3. Re-run: php artisan test --filter="failed"
4. Then run: /sdd:story-validate
```
---
### Phase 7: Failure Handling & Auto-Fix (if failures)
**Interactive Failure Resolution**:
```
❌ 2 TEST FAILURES DETECTED
Would you like me to:
[1] Show detailed error logs
[2] Suggest fixes for each failure
[3] Implement fixes automatically
[4] Re-run failed tests only
[5] Exit (fix manually)
Choose option [1-5]:
```
**If Option 2 (Suggest Fixes)**:
```
🔧 SUGGESTED FIXES
==================
Failure 1: POST /api/tasks validates input
Problem: Column 'order' has no default value
Location: database/migrations/xxx_create_tasks_table.php
Fix:
$table->integer('order')->default(0);
Confidence: HIGH (common pattern)
Failure 2: Mobile touch gestures
Problem: SortableJS not loading on mobile
Location: resources/js/app.js
Fix: Check Alpine.js device detection:
if (window.isDevice('mobile') || window.isDevice('tablet')) {
loadSortable();
}
Confidence: MEDIUM (requires investigation)
Apply fixes? [y/n]:
```
**If Option 3 (Auto-fix)**:
- Apply suggested fixes
- Run Pint formatting
- Re-run failed tests
- Show updated results
---
### Phase 8: Story Update (10s)
**Update Story Documentation**:
```bash
# Append to story's progress log
echo "$(date): Integration tests executed" >> /docs/stories/development/STORY-XXX-NNN.md
# Add test results section
cat >> /docs/stories/development/STORY-XXX-NNN.md <<EOF
## Integration Test Results ($(date +%Y-%m-%d))
**Status**: 🟡 Passing with warnings
**Duration**: 5m 12s
**Coverage**: 85%
### Test Summary
- API Integration: 4/5 passed (1 failed)
- Database Integration: 5/5 passed
- E2E Browser: 3/4 passed (1 failed)
### Failed Tests
1. POST /api/tasks validation - Fixed: Added default order value
2. Mobile touch gestures - In Progress: Debugging SortableJS loading
### Next Actions
- Fix remaining mobile touch issue
- Re-run tests
- Proceed to /sdd:story-validate
EOF
```
**Output**:
```
📝 STORY UPDATED
===============
Progress log updated: /docs/stories/development/STORY-XXX-NNN.md
Test results recorded
Timestamp: 2025-10-01 14:37:27
```
---
## Examples
### Example 1: All Tests Pass
```bash
$ /sdd:story-test-integration
🎯 Integration Test Scope: STORY-DUE-002
API + Database + E2E + Performance
[... test execution ...]
📊 INTEGRATION TEST RESULTS
===========================
OVERALL: ✅ ALL TESTS PASSING
Total: 15 tests passed (0 failed)
Coverage: 92%
Duration: 4m 38s
✅ Ready for /sdd:story-validate
```
### Example 2: Failures with Auto-Fix
```bash
$ /sdd:story-test-integration
[... test execution ...]
2 failures detected
Applying auto-fixes...
✓ Fixed migration default value
✓ Updated SortableJS loading
Re-running failed tests...
✅ POST /api/tasks validates input (FIXED)
✅ Mobile touch gestures work (FIXED)
📊 FINAL RESULTS: ✅ ALL TESTS PASSING
```
### Example 3: Scoped to API Only
```bash
$ /sdd:story-test-integration --scope=api
🎯 Integration Test Scope: API only
🔗 API INTEGRATION TESTS
=======================
✅ All 8 API tests passed
Duration: 1m 12s
✅ API integration validated
```
### Example 4: Performance Profiling
```bash
$ /sdd:story-test-integration --performance
[... test execution ...]
⚡ PERFORMANCE PROFILING
=======================
⚠️ Bottleneck detected:
GET /api/tasks with 100+ categories
Response time: 450ms (target: <200ms)
Recommendation:
- Add pagination (limit 25 per page)
- Cache category counts
- Add database indexes
Would you like me to implement optimizations? [y/n]:
```
---
## Success Criteria
**Command succeeds when**:
- All integration tests pass (or auto-fixed)
- Coverage meets project threshold (typically 80%+)
- Performance within acceptable ranges
- Story progress log updated
- Detailed report generated
**Command fails when**:
- Critical test failures cannot be auto-fixed
- Coverage below minimum threshold
- Performance degradation detected
- Context files missing
---
## Output Files
**Generated Reports**:
- Story progress log updated: `/docs/stories/development/STORY-XXX-NNN.md`
- Failure screenshots: `/tmp/test-failure-*.png` (if applicable)
- Coverage reports: `/tests/coverage/` (if `--coverage` flag)
**No New Files Created**: This command only executes tests and updates existing story documentation.
---
## Notes
- **Execution Time**: Varies by test scope (3-8 minutes typical)
- **Auto-Fix**: Attempts common fixes automatically (with confirmation)
- **Mobile Testing**: Tests responsive design on mobile viewports
- **Performance**: Optional profiling with `--performance` flag
- **Parallel Execution**: Use `--parallel=N` for faster execution
- **Browser Choice**: Defaults to Chrome, supports Firefox/Safari
**Best Practices**:
1. Run `/sdd:story-quick-check` first for fast validation
2. Fix obvious issues before integration tests
3. Use `--scope` to test specific areas during development
4. Run full suite before moving to `/sdd:story-validate`
5. Review performance metrics for critical paths
**Next Steps After Success**:
```bash
✅ Integration tests passing → /sdd:story-validate
⚠️ Minor warnings → Fix, re-run, then /sdd:story-validate
❌ Critical failures → Fix issues, re-run this command
```