10], ['requestId' => 20], ['idRequest' => 30], ]; } public function getExportTags( $requestId, string $moduleTag, string $authToken, string $username, string $exportGroup = 'API' ): array { if ($exportGroup !== 'CUSTOM') { throw new \RuntimeException('exportGroup non inoltrato al client.'); } $values = [ 10 => 'Nessuna corrispondenza', 20 => 'Il contratto ABC-123 รจ presente', 30 => 'Altro valore', ]; return [[ 'name' => 'contratto.id', 'value' => $values[$requestId], ]]; } }; $config = new class extends Config { public function secret($key, $default = null) { return $key === 'elixforms_api_username' ? 'user' : 'password'; } }; $request = new class extends Request { public function query() { return [ 'moduleTag' => 'MODULO', 'fieldName' => 'contratto.id', 'fieldValue' => 'abc-123', 'exportGroup' => ' CUSTOM ', ]; } }; $response = new CapturingResponse(); $controller = new ElixFormsController($authenticationClient, $apiClient, $config); try { $controller->searchInstances($request, $response); self::fail('La risposta avrebbe dovuto interrompere il flusso del test.'); } catch (CapturedResponseException $exception) { self::assertSame(200, $exception->status); self::assertSame([['requestId' => 20]], $exception->payload); } } public function testSearchInstancesRejectsMissingParameters(): void { $authenticationClient = new class extends ElixFormsAuthenticationClient { public function __construct() { } }; $apiClient = new class extends ElixFormsApiClient { public function __construct() { } }; $config = new Config(); $request = new class extends Request { public function query() { return ['moduleTag' => 'MODULO']; } }; $controller = new ElixFormsController($authenticationClient, $apiClient, $config); try { $controller->searchInstances($request, new CapturingResponse()); self::fail('La risposta avrebbe dovuto interrompere il flusso del test.'); } catch (CapturedResponseException $exception) { self::assertSame(400, $exception->status); } } } final class CapturingResponse extends Response { public function json($data, $status = 200) { throw new CapturedResponseException($data, $status); } } final class CapturedResponseException extends \RuntimeException { public $payload; public int $status; public function __construct($payload, int $status) { parent::__construct('Response captured'); $this->payload = $payload; $this->status = $status; } }