Skip to content

Commit aed17be

Browse files
authored
Merge pull request hkulekci#40 from hkulekci/test-improvement
ServerException changed as extending RuntimeException. And test impro…
2 parents 0d6c4fe + 76f1df1 commit aed17be

5 files changed

Lines changed: 90 additions & 22 deletions

File tree

src/Exception/ServerException.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
namespace Qdrant\Exception;
1010

1111
use Qdrant\Response;
12+
use RuntimeException;
1213

13-
class ServerException extends \Exception
14+
class ServerException extends RuntimeException
1415
{
1516
protected Response $response;
1617

src/Http/GuzzleClient.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
namespace Qdrant\Http;
77

88
use GuzzleHttp\Client;
9-
use GuzzleHttp\Exception\ClientException;
10-
use GuzzleHttp\Exception\GuzzleException;
9+
use GuzzleHttp\Exception\RequestException;
1110
use JsonException;
1211
use Psr\Http\Client\ClientExceptionInterface;
1312
use Psr\Http\Message\RequestInterface;
@@ -52,15 +51,19 @@ public function execute(RequestInterface $request): Response
5251
{
5352
$request = $this->prepareHeaders($request);
5453
try {
55-
$res = $this->client->sendRequest($request);
54+
$res = $this->client->send($request);
5655

5756
return new Response($res);
58-
} catch (ClientException $e) {
57+
} catch (RequestException $e) {
5958
$statusCode = $e->getResponse()->getStatusCode();
6059
if ($statusCode >= 400 && $statusCode < 500) {
61-
throw new InvalidArgumentException($e->getMessage());
60+
$errorResponse = new Response($e->getResponse());
61+
throw (new InvalidArgumentException($e->getMessage(), $statusCode))
62+
->setResponse($errorResponse);
6263
} elseif ($statusCode >= 500) {
63-
throw new ServerException($e->getMessage());
64+
$errorResponse = new Response($e->getResponse());
65+
throw (new ServerException($e->getMessage(), $statusCode))
66+
->setResponse($errorResponse);
6467
}
6568
}
6669
}

src/Response.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,6 @@ public function __construct(protected ResponseInterface $response)
3131
'content' => $response->getBody()->getContents()
3232
];
3333
}
34-
35-
if ($this->response->getStatusCode() >= 400 && $this->response->getStatusCode() < 500) {
36-
throw (new InvalidArgumentException($this->raw['status']['error'] ?? 'Invalid argument exception'))->setResponse($this);
37-
}
38-
39-
if ($this->response->getStatusCode() >= 500 && $this->response->getStatusCode() < 500) {
40-
throw (new ServerException())->setResponse($this);
41-
}
4234
}
4335

4436
public function __toArray(): array

tests/Integration/Endpoints/ClusterTest.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
use Qdrant\Endpoints\Cluster;
1010
use Qdrant\Exception\InvalidArgumentException;
11+
use Qdrant\Exception\ServerException;
1112
use Qdrant\Tests\Integration\AbstractIntegration;
1213

1314
class ClusterTest extends AbstractIntegration
@@ -29,15 +30,12 @@ public function testClusterInfo(): void
2930
*/
3031
public function testClusterRecover(): void
3132
{
33+
$this->expectException(ServerException::class);
34+
$this->expectExceptionMessage('500 Internal Server Error');
35+
$this->expectExceptionCode(500);
36+
3237
$cluster = new Cluster($this->client);
3338
$response = $cluster->recover();
34-
35-
$this->assertArrayHasKey('status', $response);
36-
$this->assertArrayHasKey('time', $response);
37-
$this->assertEquals(
38-
'Service internal error: Qdrant is running in standalone mode',
39-
$response['status']['error']
40-
);
4139
}
4240

4341
/**

tests/Unit/ResponseTest.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
/**
3+
* @since Mar 2023
4+
* @author Haydar KULEKCI <haydarkulekci@gmail.com>
5+
*/
6+
7+
namespace Qdrant\Tests\Unit;
8+
9+
use GuzzleHttp\Psr7\Response as HttpResponse;
10+
use GuzzleHttp\Psr7\Utils;
11+
use PHPUnit\Framework\TestCase;
12+
use Psr\Http\Message\ResponseInterface;
13+
use Qdrant\Exception\InvalidArgumentException;
14+
use Qdrant\Exception\ServerException;
15+
use Qdrant\Response;
16+
17+
class ResponseTest extends TestCase
18+
{
19+
public function testConstructResponse(): void
20+
{
21+
$httpResponse = new HttpResponse(
22+
200,
23+
[
24+
'content-type' => 'application/json'
25+
],
26+
Utils::streamFor(json_encode(['foo' => 'bar']))
27+
);
28+
29+
$response = new Response($httpResponse);
30+
31+
$this->assertEquals('bar', $response['foo']);
32+
}
33+
34+
public function testConstructResponse2(): void
35+
{
36+
$httpResponse = new HttpResponse(
37+
200,
38+
[
39+
'content-type' => 'text/html'
40+
],
41+
Utils::streamFor(json_encode(['foo' => 'bar']))
42+
);
43+
44+
$response = new Response($httpResponse);
45+
46+
$this->assertEquals('{"foo":"bar"}', $response['content']);
47+
}
48+
49+
public function testConstructResponseWith4xxHttpCode(): void
50+
{
51+
$httpResponse = new HttpResponse(
52+
418,
53+
[
54+
'content-type' => 'application/json'
55+
],
56+
Utils::streamFor(json_encode(['foo' => 'bar']))
57+
);
58+
59+
$response = new Response($httpResponse);
60+
$this->assertEquals('bar', $response['foo']);
61+
}
62+
63+
public function testConstructResponseWith5xxHttpCode(): void
64+
{
65+
$httpResponse = new HttpResponse(
66+
510,
67+
[],
68+
Utils::streamFor(json_encode(['foo' => 'bar']))
69+
);
70+
71+
$response = new Response($httpResponse);
72+
$this->assertEquals('{"foo":"bar"}', $response['content']);
73+
}
74+
}

0 commit comments

Comments
 (0)