Files
michaelschiemer/tests/Framework/LiveComponents/Batch/BatchResponseTest.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

176 lines
6.2 KiB
PHP

<?php
declare(strict_types=1);
use App\Framework\LiveComponents\Batch\BatchResponse;
use App\Framework\LiveComponents\Batch\BatchResult;
describe('BatchResponse', function () {
it('creates response with variadic constructor', function () {
$result1 = BatchResult::success(operationId: 'op-1', html: '<div>Test</div>');
$result2 = BatchResult::failure(error: 'Failed', operationId: 'op-2');
$response = new BatchResponse($result1, $result2);
expect($response->results)->toHaveCount(2);
expect($response->totalOperations)->toBe(2);
expect($response->successCount)->toBe(1);
expect($response->failureCount)->toBe(1);
});
it('calculates statistics correctly', function () {
$results = [
BatchResult::success(operationId: 'op-1'),
BatchResult::success(operationId: 'op-2'),
BatchResult::success(operationId: 'op-3'),
BatchResult::failure(error: 'Error', operationId: 'op-4'),
];
$response = new BatchResponse(...$results);
expect($response->totalOperations)->toBe(4);
expect($response->successCount)->toBe(3);
expect($response->failureCount)->toBe(1);
});
it('creates from results array', function () {
$results = [
BatchResult::success(operationId: 'op-1'),
BatchResult::success(operationId: 'op-2'),
];
$response = BatchResponse::fromResults($results);
expect($response->results)->toHaveCount(2);
expect($response->totalOperations)->toBe(2);
});
it('gets result by index', function () {
$result1 = BatchResult::success(operationId: 'op-1');
$result2 = BatchResult::success(operationId: 'op-2');
$response = new BatchResponse($result1, $result2);
expect($response->getResult(0))->toBe($result1);
expect($response->getResult(1))->toBe($result2);
expect($response->getResult(2))->toBeNull();
});
it('gets all results', function () {
$result1 = BatchResult::success(operationId: 'op-1');
$result2 = BatchResult::failure(error: 'Error', operationId: 'op-2');
$response = new BatchResponse($result1, $result2);
expect($response->getResults())->toBe([$result1, $result2]);
});
it('gets successful results only', function () {
$success1 = BatchResult::success(operationId: 'op-1');
$success2 = BatchResult::success(operationId: 'op-2');
$failure = BatchResult::failure(error: 'Error', operationId: 'op-3');
$response = new BatchResponse($success1, $failure, $success2);
$successfulResults = $response->getSuccessfulResults();
expect($successfulResults)->toHaveCount(2);
expect($successfulResults)->toContain($success1);
expect($successfulResults)->toContain($success2);
expect($successfulResults)->not->toContain($failure);
});
it('gets failed results only', function () {
$success = BatchResult::success(operationId: 'op-1');
$failure1 = BatchResult::failure(error: 'Error 1', operationId: 'op-2');
$failure2 = BatchResult::failure(error: 'Error 2', operationId: 'op-3');
$response = new BatchResponse($success, $failure1, $failure2);
$failedResults = $response->getFailedResults();
expect($failedResults)->toHaveCount(2);
expect($failedResults)->toContain($failure1);
expect($failedResults)->toContain($failure2);
expect($failedResults)->not->toContain($success);
});
it('checks if full success', function () {
$allSuccess = new BatchResponse(
BatchResult::success(operationId: 'op-1'),
BatchResult::success(operationId: 'op-2')
);
expect($allSuccess->isFullSuccess())->toBeTrue();
$partial = new BatchResponse(
BatchResult::success(operationId: 'op-1'),
BatchResult::failure(error: 'Error', operationId: 'op-2')
);
expect($partial->isFullSuccess())->toBeFalse();
});
it('checks if full failure', function () {
$allFailed = new BatchResponse(
BatchResult::failure(error: 'Error 1', operationId: 'op-1'),
BatchResult::failure(error: 'Error 2', operationId: 'op-2')
);
expect($allFailed->isFullFailure())->toBeTrue();
$partial = new BatchResponse(
BatchResult::success(operationId: 'op-1'),
BatchResult::failure(error: 'Error', operationId: 'op-2')
);
expect($partial->isFullFailure())->toBeFalse();
});
it('checks if has partial failure', function () {
$partial = new BatchResponse(
BatchResult::success(operationId: 'op-1'),
BatchResult::success(operationId: 'op-2'),
BatchResult::failure(error: 'Error', operationId: 'op-3')
);
expect($partial->hasPartialFailure())->toBeTrue();
$allSuccess = new BatchResponse(
BatchResult::success(operationId: 'op-1'),
BatchResult::success(operationId: 'op-2')
);
expect($allSuccess->hasPartialFailure())->toBeFalse();
$allFailed = new BatchResponse(
BatchResult::failure(error: 'Error 1', operationId: 'op-1'),
BatchResult::failure(error: 'Error 2', operationId: 'op-2')
);
expect($allFailed->hasPartialFailure())->toBeFalse();
});
it('converts to array', function () {
$response = new BatchResponse(
BatchResult::success(operationId: 'op-1', html: '<div>Test</div>', state: ['value' => 1]),
BatchResult::failure(error: 'Error', errorCode: 'TEST_ERROR', operationId: 'op-2')
);
$array = $response->toArray();
expect($array)->toHaveKey('results');
expect($array)->toHaveKey('total_operations');
expect($array)->toHaveKey('success_count');
expect($array)->toHaveKey('failure_count');
expect($array['results'])->toHaveCount(2);
expect($array['total_operations'])->toBe(2);
expect($array['success_count'])->toBe(1);
expect($array['failure_count'])->toBe(1);
expect($array['results'][0]['success'])->toBeTrue();
expect($array['results'][1]['success'])->toBeFalse();
});
});