Car-Repairs-Shop/TESTING_GUIDE.md
sackey a65fee9d75
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
Add customer portal workflow progress component and analytics dashboard
- 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.
2025-08-10 19:41:25 +00:00

7.2 KiB

Manual Testing Guide for Automotive Repair Workflow

Quick Smoke Tests

Test 1: Basic Service Instantiation

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

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

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

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

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

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

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

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

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

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