Skip to content
This repository has been archived by the owner on May 21, 2021. It is now read-only.

Commit

Permalink
Improve tests
Browse files Browse the repository at this point in the history
  • Loading branch information
sanmai committed Nov 1, 2020
1 parent 8b8c783 commit 31719a8
Show file tree
Hide file tree
Showing 13 changed files with 113 additions and 16 deletions.
3 changes: 3 additions & 0 deletions examples/140_GetOrder.php
Expand Up @@ -40,6 +40,9 @@

$order = $client->getOrder((int) $argv[1]);

$logger->addFile('order-status-request.json');
$logger->addFile('order-status-response.json');

$statuses = $client->getOrderStatuses($order->id);

echo "Order ID: {$statuses->id}\n";
Expand Down
3 changes: 3 additions & 0 deletions examples/150_OrdersStatus.php
Expand Up @@ -48,6 +48,9 @@
$order = $request->addOrder();
$order->externalId = '100';

$logger->addFile('orders-status-request.json');
$logger->addFile('orders-status-response.json');

$response = $client->sendOrdersStatusRequest($request);

if ($response->hasErrors()) {
Expand Down
4 changes: 4 additions & 0 deletions src/Responses/Bad/BadRequestResponse/ValidationError.php
Expand Up @@ -151,6 +151,10 @@ public function getMessage(): string
return \sprintf('%s->%s %s', $this->objectName, $this->field, $this->message);
}

if ($this->message !== null) {
return $this->message;
}

foreach (\get_object_vars($this) as $key => $value) {
if (!\is_string($value)) {
continue;
Expand Down
4 changes: 2 additions & 2 deletions tests/Deserialization/OrderStatusesResponseTest.php
Expand Up @@ -33,11 +33,11 @@

/**
* @covers \YDeliverySDK\Responses\OrderStatusesResponse
* @covers \YDeliverySDK\Responses\Types\Order
* @covers \YDeliverySDK\Responses\Types\Status
*/
class OrderStatusesResponseTest extends TestCase
{
public function test_empty_order()
public function test_regular_order()
{
$response = $this->loadFixture('statuses.json');

Expand Down
16 changes: 16 additions & 0 deletions tests/Deserialization/OrdersStatusResponseTest.php
Expand Up @@ -34,6 +34,7 @@
/**
* @covers \YDeliverySDK\Responses\OrdersStatusResponse
* @covers \YDeliverySDK\Responses\Types\OrderStatus
* @covers \YDeliverySDK\Responses\Types\Status
*/
class OrdersStatusResponseTest extends TestCase
{
Expand All @@ -60,6 +61,21 @@ public function test_successful_request()
}
}

public function test_invalid_order()
{
$response = $this->loadFixture('orders-status-empty.json');

$this->assertFalse($response->hasErrors());

$this->assertCount(2, $response);

foreach ($response as $item) {
/** @var $item OrderStatus */
$this->assertNull($item->status->datetime);
$this->assertGreaterThan(0, $item->status->timestamp->getTimestamp());
}
}

private function loadFixture(string $filename): OrdersStatusResponse
{
return $this->loadFixtureWithType($filename, OrdersStatusResponse::class);
Expand Down
9 changes: 9 additions & 0 deletions tests/Deserialization/SubmitOrderResponseTest.php
Expand Up @@ -37,6 +37,7 @@
/**
* @covers \YDeliverySDK\Responses\SubmitOrderResponse
* @covers \YDeliverySDK\Responses\Types\SubmittedOrder
* @covers \YDeliverySDK\Responses\Types\SubmittedOrder\Error
*/
class SubmitOrderResponseTest extends TestCase
{
Expand Down Expand Up @@ -93,6 +94,14 @@ public function test_with_validation_error()
);
}

public function test_empty()
{
$response = $this->loadFixture('empty.json');

$this->assertCount(0, $response);
$this->assertFalse($response->hasErrors());
}

private function toErrorsArray(Response $response): array
{
return take($response->getMessages())->map(function (HasErrorCode $message) {
Expand Down
48 changes: 34 additions & 14 deletions tests/Deserialization/ValidationErrorTest.php
Expand Up @@ -31,27 +31,47 @@
use YDeliverySDK\Responses\Bad\BadRequestResponse\ValidationError;

/**
* @covers \YDeliverySDK\Responses\PostalCodeResponse
* @covers \YDeliverySDK\Responses\Types\PostalCode
* @covers \YDeliverySDK\Responses\Bad\BadRequestResponse\ValidationError
*/
class ValidationErrorTest extends TestCase
{
private const EXAMPLE_ERROR = '{
"objectName": "senderOrderDraft",
"field": "deliveryType",
"message": "must not be null",
"conditionCode": "NotNull",
"arguments": {},
"errorCode": "FIELD_NOT_VALID"
}';

public function test_it_deserializes()
public function test_it_deserializes_simple_type()
{
/** @var ValidationError $error */
$error = $this->getSerializer()->deserialize(self::EXAMPLE_ERROR, ValidationError::class);
$error = $this->loadFixture('validation-error-simple.json');

$this->assertSame('BOO_ERROR', $error->getErrorCode());
$this->assertSame('Boo', $error->getMessage());
}

public function test_it_deserializes_standard_type()
{
$error = $this->loadFixture('validation-error.json');

$this->assertSame('FIELD_NOT_VALID', $error->getErrorCode());
$this->assertSame('senderOrderDraft->deliveryType must not be null', $error->getMessage());
$this->assertSame('NotNull', $error->conditionCode);
}

public function test_it_deserializes_rare_type()
{
$error = $this->loadFixture('validation-error2.json');

$this->assertSame('OPTION_CALCULATED_DATE_MIN_MISMATCH', $error->getErrorCode());
$this->assertSame('2020-10-31', $error->getMessage());
$this->assertNull($error->currentValue);
}

public function test_it_deserializes_even_rare_type()
{
$error = $this->loadFixture('validation-error-code.json');

$this->assertSame('FATAL_ERROR', $error->getErrorCode());
$this->assertSame('FATAL_ERROR', $error->getMessage());
$this->assertSame('FATAL_ERROR', $error->message);
}

private function loadFixture(string $filename): ValidationError
{
return $this->loadFixtureWithType($filename, ValidationError::class);
}
}
1 change: 1 addition & 0 deletions tests/Fixtures/responses/empty.json
@@ -0,0 +1 @@
[]
20 changes: 20 additions & 0 deletions tests/Fixtures/responses/orders-status-empty.json
@@ -0,0 +1,20 @@
[
{
"id": 111,
"externalId": null,
"status": {
"code": "NOT_FOUND",
"description": "Заказ не найден.",
"datetime": null
}
},
{
"id": null,
"externalId": "100",
"status": {
"code": "NOT_FOUND",
"description": "Заказ не найден.",
"datetime": null
}
}
]
4 changes: 4 additions & 0 deletions tests/Fixtures/responses/validation-error-code.json
@@ -0,0 +1,4 @@
{
"errorCode": "FATAL_ERROR",
"message": null
}
4 changes: 4 additions & 0 deletions tests/Fixtures/responses/validation-error-simple.json
@@ -0,0 +1,4 @@
{
"errorCode": "BOO_ERROR",
"message": "Boo"
}
8 changes: 8 additions & 0 deletions tests/Fixtures/responses/validation-error.json
@@ -0,0 +1,8 @@
{
"objectName": "senderOrderDraft",
"field": "deliveryType",
"message": "must not be null",
"conditionCode": "NotNull",
"arguments": {},
"errorCode": "FIELD_NOT_VALID"
}
5 changes: 5 additions & 0 deletions tests/Fixtures/responses/validation-error2.json
@@ -0,0 +1,5 @@
{
"errorCode": "OPTION_CALCULATED_DATE_MIN_MISMATCH",
"currentValue": null,
"actualValue": "2020-10-31"
}

0 comments on commit 31719a8

Please sign in to comment.