Files
elixforms-web-services/tests/Unit/ElixFormsApiClientTest.php
T
pierpaolo.mammi 33ff4d9577 major refactor
- add request status to search instance API
- use JSend-type response in elixForms clients
- readjust namespaces
- add more unit tests (manual HTTP requests too)
2026-07-24 14:56:25 +02:00

209 lines
6.9 KiB
PHP

<?php
namespace Tests\Unit;
use Api\Core\HttpClient;
use ElixForms\Clients\ElixFormsApiClient;
use PHPUnit\Framework\TestCase;
final class ElixFormsApiClientTest extends TestCase
{
public function testLookupByStatusOmitsStatusWhenItIsNull(): void
{
$httpClient = new class extends HttpClient {
public string $url = '';
public array $headers = [];
public function get(string $url, array $headers = [])
{
$this->url = $url;
$this->headers = $headers;
return [
'status' => 200,
'json' => [
'value' => [
'globalStatus' => 'OK',
'requests' => [['requestId' => 123]],
],
],
];
}
};
$client = new ElixFormsApiClient('https://example.test', $httpClient);
$response = $client->lookupByStatus('MODULO TEST', 'token', 'user');
self::assertSame('success', $response['status']);
self::assertSame([['requestId' => 123]], $response['data']);
self::assertStringNotContainsString('requestStatus=', $httpClient->url);
self::assertStringContainsString('moduleTag=MODULO%20TEST', $httpClient->url);
self::assertSame('Bearer token', $httpClient->headers['Authorization']);
self::assertSame('user', $httpClient->headers['x-api-username']);
}
public function testLookupByStatusExpandsCommaSeparatedStatuses(): void
{
$httpClient = new class extends HttpClient {
public string $url = '';
public function get(string $url, array $headers = [])
{
$this->url = $url;
return [
'status' => 200,
'json' => [
'value' => [
'globalStatus' => 'OK',
'requests' => [],
],
],
];
}
};
$client = new ElixFormsApiClient('https://example.test', $httpClient);
$client->lookupByStatus(
'MODULO',
'token',
'user',
'IN_PROGRESS, PROCESSED'
);
self::assertStringContainsString('requestStatus=IN_PROGRESS', $httpClient->url);
self::assertStringNotContainsString('requestStatus=SUBMITTED', $httpClient->url);
self::assertStringContainsString('requestStatus=PROCESSED', $httpClient->url);
}
public function testLookupByStatusOmitsStatusesWhenTheValueIsEmpty(): void
{
$httpClient = new class extends HttpClient {
public string $url = '';
public function get(string $url, array $headers = [])
{
$this->url = $url;
return [
'status' => 200,
'json' => ['value' => ['globalStatus' => 'OK', 'requests' => []]],
];
}
};
$client = new ElixFormsApiClient('https://example.test', $httpClient);
$client->lookupByStatus('MODULO', 'token', 'user', ' ');
self::assertStringNotContainsString('requestStatus=', $httpClient->url);
}
public function testLookupByStatusReturnsFailForAnUnknownStatus(): void
{
$httpClient = new HttpClient();
$client = new ElixFormsApiClient('https://example.test', $httpClient);
$response = $client->lookupByStatus('MODULO', 'token', 'user', 'UNKNOWN');
self::assertSame([
'status' => 'fail',
'data' => ['requestStatuses' => 'Lo stato elixForms richiesto non è valido.'],
], $response);
}
public function testGetExportTagsSupportsVendorJsonContentTypeResponses(): void
{
$httpClient = new class extends HttpClient {
public string $url = '';
public function get(string $url, array $headers = [])
{
$this->url = $url;
return [
'status' => 200,
'body' => json_encode([
'value' => [
'globalStatus' => 'OK',
'exportTags' => [
['name' => 'contratto.id', 'value' => 'ABC-123'],
],
],
]),
'json' => null,
];
}
};
$client = new ElixFormsApiClient('https://example.test/', $httpClient);
$response = $client->getExportTags(42, 'MODULO', 'token', 'user');
self::assertSame('success', $response['status']);
self::assertSame(
[['name' => 'contratto.id', 'value' => 'ABC-123']],
$response['data']
);
self::assertSame(
'https://example.test/services/api/request/42/view/_DEFAULT/exportTags/get/v1?moduleTag=MODULO&exportGroup=API',
$httpClient->url
);
}
public function testGetExportTagsUsesTheProvidedExportGroup(): void
{
$httpClient = new class extends HttpClient {
public string $url = '';
public function get(string $url, array $headers = [])
{
$this->url = $url;
return [
'status' => 200,
'json' => [
'value' => [
'globalStatus' => 'OK',
'exportTags' => [],
],
],
];
}
};
$client = new ElixFormsApiClient('https://example.test', $httpClient);
$client->getExportTags(42, 'MODULO', 'token', 'user', 'REPORT ORE');
self::assertStringContainsString('exportGroup=REPORT%20ORE', $httpClient->url);
}
public function testGetExportTagsReturnsFailForAnEmptyExportGroup(): void
{
$httpClient = new HttpClient();
$client = new ElixFormsApiClient('https://example.test', $httpClient);
$response = $client->getExportTags(42, 'MODULO', 'token', 'user', ' ');
self::assertSame([
'status' => 'fail',
'data' => ['exportGroup' => 'deve essere una stringa non vuota.'],
], $response);
}
public function testLookupByStatusReturnsErrorForAnUnsuccessfulHttpResponse(): void
{
$httpClient = new class extends HttpClient {
public function get(string $url, array $headers = [])
{
return ['status' => 503];
}
};
$client = new ElixFormsApiClient('https://example.test', $httpClient);
$response = $client->lookupByStatus('MODULO', 'token', 'user');
self::assertSame([
'status' => 'error',
'message' => 'Errore durante LookupByStatus.',
'code' => 503,
], $response);
}
}