Test'); $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: '
Test
', 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(); }); });