switch to Guzzle module for HTTP calls
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use ElixForms\Common\HttpClient;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Handler\MockHandler;
|
||||
use GuzzleHttp\HandlerStack;
|
||||
use GuzzleHttp\Middleware;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class HttpClientTest extends TestCase
|
||||
{
|
||||
public function testGetUsesQueryHeadersAuthenticationAndTimeout(): void
|
||||
{
|
||||
$history = [];
|
||||
$stack = HandlerStack::create(new MockHandler([new Response(200, [], '{"ok":true}')]));
|
||||
$stack->push(Middleware::history($history));
|
||||
|
||||
$client = new HttpClient(
|
||||
['Accept' => 'application/json', 'X-Default' => 'default'],
|
||||
new Client(['handler' => $stack])
|
||||
);
|
||||
$client->setBasicAuth('user', 'secret')->setTimeout(5);
|
||||
|
||||
$result = $client->get(
|
||||
'https://example.test/resource',
|
||||
['term' => 'Mario Rossi'],
|
||||
['X-Default' => 'override']
|
||||
);
|
||||
|
||||
self::assertSame('{"ok":true}', $result);
|
||||
self::assertCount(1, $history);
|
||||
self::assertSame('GET', $history[0]['request']->getMethod());
|
||||
self::assertSame('term=Mario%20Rossi', $history[0]['request']->getUri()->getQuery());
|
||||
self::assertSame('application/json', $history[0]['request']->getHeaderLine('Accept'));
|
||||
self::assertSame('override', $history[0]['request']->getHeaderLine('X-Default'));
|
||||
self::assertSame(['user', 'secret'], $history[0]['options']['auth']);
|
||||
self::assertSame(5, $history[0]['options']['timeout']);
|
||||
self::assertSame(5, $history[0]['options']['connect_timeout']);
|
||||
}
|
||||
|
||||
public function testPostEncodesArrayAsFormData(): void
|
||||
{
|
||||
$history = [];
|
||||
$stack = HandlerStack::create(new MockHandler([new Response(200, [], 'saved')]));
|
||||
$stack->push(Middleware::history($history));
|
||||
$client = new HttpClient([], new Client(['handler' => $stack]));
|
||||
|
||||
self::assertSame('saved', $client->post('https://example.test/resource', ['name' => 'Mario Rossi']));
|
||||
self::assertSame('POST', $history[0]['request']->getMethod());
|
||||
self::assertSame('name=Mario+Rossi', (string)$history[0]['request']->getBody());
|
||||
}
|
||||
|
||||
public function testHttpErrorsAreExposedWithoutResponseBody(): void
|
||||
{
|
||||
$client = new HttpClient([], new Client([
|
||||
'handler' => HandlerStack::create(new MockHandler([
|
||||
new Response(503, [], 'sensitive upstream response'),
|
||||
])),
|
||||
]));
|
||||
|
||||
$this->expectException(\RuntimeException::class);
|
||||
$this->expectExceptionMessage('Richiesta fallita con codice di stato HTTP 503.');
|
||||
|
||||
$client->get('https://example.test/resource');
|
||||
}
|
||||
|
||||
public function testTimeoutMustBePositive(): void
|
||||
{
|
||||
$this->expectException(\InvalidArgumentException::class);
|
||||
(new HttpClient())->setTimeout(0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user