Add the auth token request

References #1
This commit is contained in:
Oliver Davies 2020-05-30 02:29:54 +01:00
parent 1c6a7c2ee4
commit 352ef9d14f
4 changed files with 110 additions and 1 deletions

View file

@ -9,7 +9,9 @@
}
],
"minimum-stability": "stable",
"require": {},
"require": {
"symfony/http-client": "^5.0"
},
"autoload": {
"psr-4": {
"Opdavies\\Glassboxx\\": "src/Glassboxx/"

View file

@ -0,0 +1,8 @@
<?php
namespace Opdavies\Glassboxx\Request;
abstract class AbstractRequest
{
public const BASE_URL = 'https://server.glassboxx.co.uk/rest/V1';
}

View file

@ -0,0 +1,47 @@
<?php
namespace Opdavies\Glassboxx\Request;
use Opdavies\Glassboxx\Config;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Contracts\HttpClient\HttpClientInterface;
final class AuthTokenAbstractRequest extends AbstractRequest
{
public const ENDPOINT = '/integration/admin/token';
/** @var Config */
private $config;
/** @var HttpClient */
private $client;
public function __construct(HttpClientInterface $client)
{
$this->client = $client;
}
public function withConfig(Config $config): self
{
$this->config = $config;
return $this;
}
public function getToken(): string
{
$response = $this->client
->request(
'POST',
self::BASE_URL.self::ENDPOINT,
[
'query' => [
'password' => $this->config->getPassword(),
'username' => $this->config->getUsername(),
],
]
);
return json_decode($response->getContent());
}
}

View file

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