Allow for easily sending multiple order items

This allows for the sending of multiple items in a single order, by
adding a new `OrderItem` class and moving all of the order item specific
fields from the `Order` to an individual item.

These can then be assigned to an order using the `withOrderItems()`
method as an array of order items.

Fixes #19
This commit is contained in:
Oliver Davies 2020-06-08 19:33:49 +01:00
parent 0ed99797f5
commit ae766763b2
9 changed files with 86 additions and 53 deletions

View file

@ -7,6 +7,7 @@ namespace Opdavies\Glassboxx\Tests\Glassboxx\Request;
use DateTime;
use Opdavies\Glassboxx\Request\OrderRequest;
use Opdavies\Glassboxx\Tests\Glassboxx\TestCase;
use Opdavies\Glassboxx\ValueObject\OrderItemInterface;
use Symfony\Component\HttpClient\MockHttpClient;
use Symfony\Contracts\HttpClient\ResponseInterface;
@ -56,6 +57,7 @@ final class OrderRequestTest extends TestCase
$request = (new OrderRequest($client))
->forOrder($this->getMockOrder())
->withOrderItems([$this->getMockOrderItem()])
->withAuthToken($authTokenRequest->getToken())
->withConfig($this->config)
->setCreatedDate('2020-06-04 12:00:00');
@ -63,4 +65,14 @@ final class OrderRequestTest extends TestCase
// A successful response returns the original body.
$this->assertSame(json_encode($body), $request->execute());
}
private function getMockOrderItem(): OrderItemInterface
{
$orderItem = $this->getMockBuilder(OrderItemInterface::class)
->getMock();
$orderItem->method('getPrice')->willReturn(7.99);
$orderItem->method('getSku')->willReturn('this-is-the-first-sku');
return $orderItem;
}
}

View file

@ -60,8 +60,6 @@ class TestCase extends \PHPUnit\Framework\TestCase
$order->method('getCurrencyCode')->willReturn('GBP');
$order->method('getCustomer')->willReturn($this->getMockCustomer());
$order->method('getOrderNumber')->willReturn('abc123');
$order->method('getPrice')->willReturn(7.99);
$order->method('getSku')->willReturn('this-is-the-first-sku');
return $order;
}

View file

@ -19,16 +19,12 @@ class OrderTest extends TestCase
$order = new Order(
$customer,
'this-is-the-sku',
'123',
'GBP',
10.00
'GBP'
);
$this->assertSame('GBP', $order->getCurrencyCode());
$this->assertSame($customer, $order->getCustomer());
$this->assertSame('123', $order->getOrderNumber());
$this->assertSame(10.0, $order->getPrice());
$this->assertSame('this-is-the-sku', $order->getSku());
}
}