- Implemented the customer portal workflow progress component with detailed service progress tracking, including current status, workflow steps, and contact information. - Developed a management workflow analytics dashboard featuring key performance indicators, charts for revenue by branch, labor utilization, and recent quality issues. - Created tests for admin-only middleware to ensure proper access control for admin routes. - Added tests for customer portal view rendering and workflow integration, ensuring the workflow service operates correctly through various stages. - Introduced a .gitignore file for the debugbar storage directory to prevent unnecessary files from being tracked.
216 lines
7.2 KiB
Markdown
216 lines
7.2 KiB
Markdown
# Manual Testing Guide for Automotive Repair Workflow
|
|
|
|
## Quick Smoke Tests
|
|
|
|
### Test 1: Basic Service Instantiation
|
|
```bash
|
|
cd /home/dev/car-repairs-shop
|
|
php artisan tinker --execute="
|
|
\$workflowService = app(App\Services\WorkflowService::class);
|
|
echo 'WorkflowService: OK\n';
|
|
\$inspectionService = app(App\Services\InspectionChecklistService::class);
|
|
echo 'InspectionChecklistService: OK\n';
|
|
echo 'Services instantiated successfully.';
|
|
"
|
|
```
|
|
|
|
### Test 2: JobCard Status Constants
|
|
```bash
|
|
php artisan tinker --execute="
|
|
\$statuses = App\Models\JobCard::getStatusOptions();
|
|
echo 'Available statuses: ' . count(\$statuses) . '\n';
|
|
foreach(\$statuses as \$key => \$label) {
|
|
echo '- ' . \$key . ': ' . \$label . '\n';
|
|
}
|
|
"
|
|
```
|
|
|
|
### Test 3: Inspection Checklist
|
|
```bash
|
|
php artisan tinker --execute="
|
|
\$service = app(App\Services\InspectionChecklistService::class);
|
|
\$checklist = \$service->getStandardChecklistItems();
|
|
echo 'Checklist categories: ' . count(\$checklist) . '\n';
|
|
foreach(array_keys(\$checklist) as \$category) {
|
|
echo '- ' . \$category . '\n';
|
|
}
|
|
"
|
|
```
|
|
|
|
### Test 4: Create Sample JobCard
|
|
```bash
|
|
php artisan tinker --execute="
|
|
// Create sample data
|
|
\$customer = App\Models\Customer::factory()->create();
|
|
\$vehicle = App\Models\Vehicle::factory()->create(['customer_id' => \$customer->id]);
|
|
\$advisor = App\Models\User::factory()->create(['role' => 'service_advisor']);
|
|
|
|
// Create job card through workflow
|
|
\$workflow = app(App\Services\WorkflowService::class);
|
|
\$jobCard = \$workflow->createJobCard([
|
|
'customer_id' => \$customer->id,
|
|
'vehicle_id' => \$vehicle->id,
|
|
'branch_code' => 'ACC',
|
|
'customer_reported_issues' => 'Test issue',
|
|
'service_advisor_id' => \$advisor->id,
|
|
]);
|
|
|
|
echo 'Job Card Created: ' . \$jobCard->job_card_number . '\n';
|
|
echo 'Status: ' . \$jobCard->status . '\n';
|
|
echo 'Branch: ' . \$jobCard->branch_code . '\n';
|
|
"
|
|
```
|
|
|
|
### Test 5: Complete Workflow Progression
|
|
```bash
|
|
php artisan tinker --execute="
|
|
// Setup
|
|
\$customer = App\Models\Customer::factory()->create(['name' => 'Test Customer']);
|
|
\$vehicle = App\Models\Vehicle::factory()->create(['customer_id' => \$customer->id]);
|
|
\$advisor = App\Models\User::factory()->create(['name' => 'Test Advisor']);
|
|
\$inspector = App\Models\User::factory()->create(['name' => 'Test Inspector']);
|
|
\$coordinator = App\Models\User::factory()->create(['name' => 'Test Coordinator']);
|
|
|
|
\$workflow = app(App\Services\WorkflowService::class);
|
|
|
|
// Step 1: Create Job Card
|
|
\$jobCard = \$workflow->createJobCard([
|
|
'customer_id' => \$customer->id,
|
|
'vehicle_id' => \$vehicle->id,
|
|
'branch_code' => 'ACC',
|
|
'customer_reported_issues' => 'Engine noise during acceleration',
|
|
'service_advisor_id' => \$advisor->id,
|
|
]);
|
|
echo 'Step 1 Complete - Job Card: ' . \$jobCard->job_card_number . ' Status: ' . \$jobCard->status . '\n';
|
|
|
|
// Step 2: Initial Inspection
|
|
\$inspectionData = [
|
|
'engine' => 'fair',
|
|
'brakes' => 'good',
|
|
'tires' => 'excellent',
|
|
'mileage_in' => 75000,
|
|
'fuel_level_in' => 'half',
|
|
'inspection_checklist' => ['engine' => 'fair', 'brakes' => 'good', 'tires' => 'excellent'],
|
|
'overall_condition' => 'Vehicle in good condition, engine requires diagnosis',
|
|
];
|
|
\$updatedJobCard = \$workflow->performInitialInspection(\$jobCard, \$inspectionData, \$inspector->id);
|
|
echo 'Step 2 Complete - Status: ' . \$updatedJobCard->status . ' Mileage: ' . \$updatedJobCard->mileage_in . '\n';
|
|
|
|
// Step 3: Assign to Service Coordinator
|
|
\$diagnosis = \$workflow->assignToServiceCoordinator(\$updatedJobCard, \$coordinator->id);
|
|
\$updatedJobCard->refresh();
|
|
echo 'Step 3 Complete - Status: ' . \$updatedJobCard->status . ' Diagnosis ID: ' . \$diagnosis->id . '\n';
|
|
|
|
echo '\nWorkflow progression test completed successfully!';
|
|
"
|
|
```
|
|
|
|
## Integration Testing with Real Data
|
|
|
|
### Test 6: Branch-Specific Numbering
|
|
```bash
|
|
php artisan tinker --execute="
|
|
\$customer = App\Models\Customer::factory()->create();
|
|
\$vehicle = App\Models\Vehicle::factory()->create(['customer_id' => \$customer->id]);
|
|
\$advisor = App\Models\User::factory()->create();
|
|
\$workflow = app(App\Services\WorkflowService::class);
|
|
|
|
// Test ACC branch
|
|
\$accJob = \$workflow->createJobCard([
|
|
'customer_id' => \$customer->id,
|
|
'vehicle_id' => \$vehicle->id,
|
|
'branch_code' => 'ACC',
|
|
'service_advisor_id' => \$advisor->id,
|
|
]);
|
|
|
|
// Test KSI branch
|
|
\$ksiJob = \$workflow->createJobCard([
|
|
'customer_id' => \$customer->id,
|
|
'vehicle_id' => \$vehicle->id,
|
|
'branch_code' => 'KSI',
|
|
'service_advisor_id' => \$advisor->id,
|
|
]);
|
|
|
|
echo 'ACC Job Card: ' . \$accJob->job_card_number . '\n';
|
|
echo 'KSI Job Card: ' . \$ksiJob->job_card_number . '\n';
|
|
echo 'Branch numbering: ' . (str_starts_with(\$accJob->job_card_number, 'ACC/') ? 'PASS' : 'FAIL') . '\n';
|
|
"
|
|
```
|
|
|
|
### Test 7: Quality Control System
|
|
```bash
|
|
php artisan tinker --execute="
|
|
\$service = app(App\Services\InspectionChecklistService::class);
|
|
|
|
\$incoming = ['engine' => 'fair', 'brakes' => 'poor', 'tires' => 'good'];
|
|
\$outgoing = ['engine' => 'excellent', 'brakes' => 'good', 'tires' => 'good'];
|
|
|
|
\$comparison = \$service->compareInspections(\$incoming, \$outgoing);
|
|
echo 'Quality Comparison Results:\n';
|
|
echo 'Improvements: ' . implode(', ', \$comparison['improvements']) . '\n';
|
|
echo 'Quality Score: ' . \$comparison['overall_quality_score'] . '\n';
|
|
|
|
\$alert = \$service->generateQualityAlert(\$comparison);
|
|
echo 'Quality Alert: ' . (\$alert ?? 'None') . '\n';
|
|
"
|
|
```
|
|
|
|
## User Interface Testing
|
|
|
|
### Test 8: Livewire Components (Requires UI)
|
|
1. Navigate to customer portal workflow progress page
|
|
2. Create a test job card and verify progress visualization
|
|
3. Check management analytics dashboard
|
|
4. Test export functionality
|
|
|
|
### Test 9: Database Performance
|
|
```bash
|
|
php artisan tinker --execute="
|
|
// Test query performance with indexes
|
|
\$start = microtime(true);
|
|
\$jobs = App\Models\JobCard::where('status', 'received')
|
|
->where('branch_code', 'ACC')
|
|
->limit(100)
|
|
->get();
|
|
\$time = (microtime(true) - \$start) * 1000;
|
|
echo 'Query time: ' . round(\$time, 2) . 'ms for ' . \$jobs->count() . ' results\n';
|
|
"
|
|
```
|
|
|
|
## Error Handling Tests
|
|
|
|
### Test 10: Workflow Validation
|
|
```bash
|
|
php artisan tinker --execute="
|
|
\$jobCard = App\Models\JobCard::factory()->create(['status' => 'received']);
|
|
\$coordinator = App\Models\User::factory()->create();
|
|
\$workflow = app(App\Services\WorkflowService::class);
|
|
|
|
try {
|
|
\$workflow->assignToServiceCoordinator(\$jobCard, \$coordinator->id);
|
|
echo 'ERROR: Should have thrown validation exception\n';
|
|
} catch (InvalidArgumentException \$e) {
|
|
echo 'PASS: Validation working - ' . \$e->getMessage() . '\n';
|
|
}
|
|
"
|
|
```
|
|
|
|
## Cleanup Test Data
|
|
```bash
|
|
php artisan tinker --execute="
|
|
// Clean up test data
|
|
App\Models\JobCard::where('job_card_number', 'like', 'ACC/%')->delete();
|
|
App\Models\JobCard::where('job_card_number', 'like', 'KSI/%')->delete();
|
|
echo 'Test data cleaned up.\n';
|
|
"
|
|
```
|
|
|
|
## Expected Results Summary
|
|
- ✅ All services instantiate correctly
|
|
- ✅ JobCard workflow progression follows 11-step process
|
|
- ✅ Branch-specific numbering works (ACC/, KSI/, etc.)
|
|
- ✅ Quality control system detects improvements/issues
|
|
- ✅ Validation prevents workflow step skipping
|
|
- ✅ Database queries perform well with proper indexes
|
|
- ✅ Error handling catches invalid operations
|