Re-organise the src and tests directories

This commit is contained in:
Oliver Davies 2020-06-11 20:21:51 +01:00
parent ae766763b2
commit b238e6655a
26 changed files with 13 additions and 13 deletions

View file

@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace Opdavies\Glassboxx\Tests\Request;
use Opdavies\Glassboxx\Request\AuthTokenRequest;
use Opdavies\Glassboxx\Tests\TestCase;
use Symfony\Component\HttpClient\MockHttpClient;
use Symfony\Contracts\HttpClient\ResponseInterface;
class AuthTokenRequestTest extends TestCase
{
public function testThatItGetsAnAuthCode(): void
{
$response = $this->getMockBuilder(ResponseInterface::class)
->getMock();
$response->method('getContent')->willReturn('"abc123"');
$client = $this->getMockBuilder(MockHttpClient::class)->getMock();
$client->expects($this->once())
->method('request')
->with(
'POST',
AuthTokenRequest::ENDPOINT,
[
'query' => [
'password' => 'secret',
'username' => 'opdavies',
],
]
)
->willReturn($response);
$token = (new AuthTokenRequest($client))
->withConfig($this->config)
->getToken();
$this->assertSame('abc123', $token);
}
}

View file

@ -0,0 +1,55 @@
<?php
declare(strict_types=1);
namespace Opdavies\Glassboxx\Tests\Request;
use Opdavies\Glassboxx\Request\AuthTokenRequestInterface;
use Opdavies\Glassboxx\Request\CustomerRequest;
use Opdavies\Glassboxx\Tests\TestCase;
use Opdavies\Glassboxx\Traits\UsesCreatedAtTrait;
use Opdavies\Glassboxx\ValueObject\CustomerInterface;
use Symfony\Component\HttpClient\MockHttpClient;
use Symfony\Contracts\HttpClient\ResponseInterface;
final class CustomerRequestTest extends TestCase
{
public function testThatItCreatesACustomer(): void
{
$authTokenRequest = $this->getMockAuthTokenRequest();
$response = $this->getMockBuilder(ResponseInterface::class)
->getMock();
$response->method('getContent')->willReturn('"Success"');
$client = $this->getMockBuilder(MockHttpClient::class)->getMock();
$client->expects($this->once())
->method('request')
->with(
'POST',
CustomerRequest::ENDPOINT,
[
'auth_bearer' => $authTokenRequest->getToken(),
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode([
'customer' => [
'created_in' => 123,
'email' => 'oliver@oliverdavies.uk',
'firstname' => 'Oliver',
'lastname' => 'Davies',
],
]),
]
)
->willReturn($response);
$request = (new CustomerRequest($client))
->forCustomer($this->getMockCustomer())
->withAuthToken($authTokenRequest->getToken())
->withConfig($this->config);
$this->assertSame('Success', $request->execute());
}
}

View file

@ -0,0 +1,78 @@
<?php
declare(strict_types=1);
namespace Opdavies\Glassboxx\Tests\Request;
use DateTime;
use Opdavies\Glassboxx\Request\OrderRequest;
use Opdavies\Glassboxx\Tests\TestCase;
use Opdavies\Glassboxx\ValueObject\OrderItemInterface;
use Symfony\Component\HttpClient\MockHttpClient;
use Symfony\Contracts\HttpClient\ResponseInterface;
final class OrderRequestTest extends TestCase
{
public function testThatItCreatesAnOrder(): void
{
$body = [
'items' => [
[
'created_at' => '2020-06-04 12:00:00',
'currency_code' => 'GBP',
'customer_email' => 'oliver@oliverdavies.uk',
'customer_firstname' => 'Oliver',
'customer_lastname' => 'Davies',
'discount_amount' => 0,
'duration_for_loan' => 0,
'hostname' => 123,
'original_order_number' => 'abc123',
'price_incl_tax' => 7.99,
'sku' => 'this-is-the-first-sku',
'type_of_interaction' => 'purchase',
],
],
];
$response = $this->getMockBuilder(ResponseInterface::class)->getMock();
$response->method('getContent')->willReturn(json_encode($body));
$authTokenRequest = $this->getMockAuthTokenRequest();
$client = $this->getMockBuilder(MockHttpClient::class)->getMock();
$client->expects($this->once())
->method('request')
->with(
'POST',
OrderRequest::ENDPOINT,
[
'auth_bearer' => $authTokenRequest->getToken(),
'headers' => [
'Content-Type' => 'application/json',
],
'body' => json_encode($body),
]
)
->willReturn($response);
$request = (new OrderRequest($client))
->forOrder($this->getMockOrder())
->withOrderItems([$this->getMockOrderItem()])
->withAuthToken($authTokenRequest->getToken())
->withConfig($this->config)
->setCreatedDate('2020-06-04 12:00:00');
// 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;
}
}