Files
michaelschiemer/tests/Unit/Application/LiveComponents/Dashboard/QueueStatsStateTest.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

136 lines
4.2 KiB
PHP

<?php
declare(strict_types=1);
use App\Application\LiveComponents\Dashboard\QueueStatsState;
describe('QueueStatsState', function () {
it('creates empty state with default values', function () {
$state = QueueStatsState::empty();
expect($state->currentQueueSize)->toBe(0);
expect($state->totalJobs)->toBe(0);
expect($state->successfulJobs)->toBe(0);
expect($state->failedJobs)->toBe(0);
expect($state->successRate)->toBe(0.0);
expect($state->avgExecutionTimeMs)->toBe(0.0);
expect($state->lastUpdated)->toBeString();
});
it('creates state from array', function () {
$data = [
'currentQueueSize' => 42,
'totalJobs' => 1000,
'successfulJobs' => 950,
'failedJobs' => 50,
'successRate' => 95.0,
'avgExecutionTimeMs' => 123.45,
'lastUpdated' => '2024-01-15 12:00:00',
];
$state = QueueStatsState::fromArray($data);
expect($state->currentQueueSize)->toBe(42);
expect($state->totalJobs)->toBe(1000);
expect($state->successfulJobs)->toBe(950);
expect($state->failedJobs)->toBe(50);
expect($state->successRate)->toBe(95.0);
expect($state->avgExecutionTimeMs)->toBe(123.45);
expect($state->lastUpdated)->toBe('2024-01-15 12:00:00');
});
it('converts state to array', function () {
$state = new QueueStatsState(
currentQueueSize: 10,
totalJobs: 100,
successfulJobs: 90,
failedJobs: 10,
successRate: 90.0,
avgExecutionTimeMs: 50.5,
lastUpdated: '2024-01-15 12:00:00'
);
$array = $state->toArray();
expect($array)->toBe([
'currentQueueSize' => 10,
'totalJobs' => 100,
'successfulJobs' => 90,
'failedJobs' => 10,
'successRate' => 90.0,
'avgExecutionTimeMs' => 50.5,
'lastUpdated' => '2024-01-15 12:00:00',
]);
});
it('creates new state with updated stats', function () {
$state = QueueStatsState::empty();
$updatedState = $state->withStats(
currentQueueSize: 5,
totalJobs: 50,
successfulJobs: 45,
failedJobs: 5,
successRate: 90.0,
avgExecutionTimeMs: 75.0
);
// Original state unchanged (immutable)
expect($state->currentQueueSize)->toBe(0);
expect($state->totalJobs)->toBe(0);
// New state has updated values
expect($updatedState->currentQueueSize)->toBe(5);
expect($updatedState->totalJobs)->toBe(50);
expect($updatedState->successfulJobs)->toBe(45);
expect($updatedState->failedJobs)->toBe(5);
expect($updatedState->successRate)->toBe(90.0);
expect($updatedState->avgExecutionTimeMs)->toBe(75.0);
expect($updatedState->lastUpdated)->not->toBe($state->lastUpdated);
});
it('handles zero division in success rate gracefully', function () {
$state = new QueueStatsState(
currentQueueSize: 0,
totalJobs: 0,
successfulJobs: 0,
failedJobs: 0,
successRate: 0.0,
avgExecutionTimeMs: 0.0,
lastUpdated: '2024-01-15 12:00:00'
);
expect($state->successRate)->toBe(0.0);
});
it('is immutable', function () {
$state = new QueueStatsState(
currentQueueSize: 10,
totalJobs: 100,
successfulJobs: 90,
failedJobs: 10,
successRate: 90.0,
avgExecutionTimeMs: 50.0,
lastUpdated: '2024-01-15 12:00:00'
);
$newState = $state->withStats(
currentQueueSize: 20,
totalJobs: 200,
successfulJobs: 180,
failedJobs: 20,
successRate: 90.0,
avgExecutionTimeMs: 60.0
);
// Original unchanged
expect($state->currentQueueSize)->toBe(10);
expect($state->totalJobs)->toBe(100);
// New instance created
expect($newState)->not->toBe($state);
expect($newState->currentQueueSize)->toBe(20);
expect($newState->totalJobs)->toBe(200);
});
});