Counter: 5',
state: ['count' => 5],
events: [['type' => 'counter:incremented']]
);
expect($result->success)->toBeTrue();
expect($result->operationId)->toBe('op-1');
expect($result->html)->toBe('
Counter: 5
');
expect($result->state)->toBe(['count' => 5]);
expect($result->events)->toBe([['type' => 'counter:incremented']]);
expect($result->fragments)->toBeNull();
expect($result->error)->toBeNull();
expect($result->errorCode)->toBeNull();
});
it('creates success result with fragments', function () {
$result = BatchResult::success(
operationId: 'op-1',
fragments: ['counter-display' => '5'],
state: ['count' => 5]
);
expect($result->success)->toBeTrue();
expect($result->fragments)->toBe(['counter-display' => '5']);
expect($result->html)->toBeNull();
});
it('creates failure result', function () {
$result = BatchResult::failure(
error: 'Component not found',
errorCode: 'COMPONENT_NOT_FOUND',
operationId: 'op-1'
);
expect($result->success)->toBeFalse();
expect($result->error)->toBe('Component not found');
expect($result->errorCode)->toBe('COMPONENT_NOT_FOUND');
expect($result->operationId)->toBe('op-1');
expect($result->html)->toBeNull();
expect($result->fragments)->toBeNull();
expect($result->state)->toBeNull();
});
it('converts success to array', function () {
$result = BatchResult::success(
operationId: 'op-1',
html: 'Test
',
state: ['value' => 'test'],
events: []
);
$array = $result->toArray();
expect($array)->toBe([
'success' => true,
'operationId' => 'op-1',
'html' => 'Test
',
'state' => ['value' => 'test'],
'events' => [],
]);
});
it('converts failure to array', function () {
$result = BatchResult::failure(
error: 'Action not allowed',
errorCode: 'ACTION_NOT_ALLOWED',
operationId: 'op-2'
);
$array = $result->toArray();
expect($array)->toBe([
'success' => false,
'operationId' => 'op-2',
'error' => 'Action not allowed',
'errorCode' => 'ACTION_NOT_ALLOWED',
]);
});
it('includes fragments in array when present', function () {
$result = BatchResult::success(
operationId: 'op-1',
fragments: ['header' => 'Title
'],
state: ['title' => 'Title']
);
$array = $result->toArray();
expect($array['fragments'])->toBe(['header' => 'Title
']);
expect($array)->not->toHaveKey('html');
});
it('creates minimal success result', function () {
$result = BatchResult::success();
expect($result->success)->toBeTrue();
expect($result->operationId)->toBeNull();
expect($result->html)->toBeNull();
expect($result->state)->toBeNull();
expect($result->events)->toBe([]);
});
});