- add request status to search instance API - use JSend-type response in elixForms clients - readjust namespaces - add more unit tests (manual HTTP requests too)
209 lines
6.9 KiB
PHP
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);
|
|
}
|
|
}
|