Skip to content

Commit 563c314

Browse files
committed
Added voucher endpoint
1 parent 9bfaeaf commit 563c314

4 files changed

Lines changed: 235 additions & 0 deletions

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Fapi\FapiClient\EndPoints;
5+
6+
use Fapi\FapiClient\EndPoints\Traits\Find;
7+
use Fapi\FapiClient\Rest\FapiRestClient;
8+
9+
final class Vouchers
10+
{
11+
12+
use Find;
13+
14+
/** @var FapiRestClient */
15+
private $client;
16+
17+
/** @var string */
18+
private $path;
19+
20+
public function __construct(FapiRestClient $client)
21+
{
22+
$this->client = $client;
23+
$this->path = '/vouchers';
24+
}
25+
26+
/**
27+
* @param mixed[] $data
28+
* @return mixed[]
29+
*/
30+
public function applyVoucher(string $code, array $data = []): array
31+
{
32+
return $this->client->updateResource($this->path, $code . '/apply', $data);
33+
}
34+
35+
}

src/Fapi/FapiClient/FapiClient.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Fapi\FapiClient\EndPoints\Statistics;
2020
use Fapi\FapiClient\EndPoints\User;
2121
use Fapi\FapiClient\EndPoints\UserSettings;
22+
use Fapi\FapiClient\EndPoints\Vouchers;
2223
use Fapi\FapiClient\Rest\FapiRestClient;
2324
use Fapi\HttpClient\IHttpClient;
2425

@@ -124,6 +125,9 @@ class FapiClient implements IFapiClient
124125
*/
125126
public $userSetting;
126127

128+
/** @var Vouchers */
129+
private $vouchers;
130+
127131
public function __construct(string $username, string $password, string $apiUrl, IHttpClient $httpClient)
128132
{
129133
$this->restClient = new FapiRestClient($username, $password, $apiUrl, $httpClient);
@@ -143,6 +147,7 @@ public function __construct(string $username, string $password, string $apiUrl,
143147
$this->periodicInvoices = new PeriodicInvoices($this->restClient);
144148
$this->exchangeRates = new ExchangeRates($this->restClient);
145149
$this->userSetting = new UserSettings($this->restClient);
150+
$this->vouchers = new Vouchers($this->restClient);
146151
}
147152

148153
/**
@@ -238,4 +243,9 @@ public function getUserSetting(): UserSettings
238243
return $this->userSetting;
239244
}
240245

246+
public function getVouchers(): Vouchers
247+
{
248+
return $this->vouchers;
249+
}
250+
241251
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Fapi\FapiClientTests;
5+
6+
use Fapi\FapiClient\FapiClient;
7+
use Fapi\HttpClient\CapturingHttpClient;
8+
use Fapi\HttpClient\GuzzleHttpClient;
9+
use Tester\Assert;
10+
use Tester\Environment;
11+
use Tester\TestCase;
12+
13+
require __DIR__ . '/../../bootstrap.php';
14+
15+
class FapiClientVouchersTest extends TestCase
16+
{
17+
18+
/** @var CapturingHttpClient */
19+
private $httpClient;
20+
21+
/** @var FapiClient */
22+
private $fapiClient;
23+
24+
protected function setUp()
25+
{
26+
Environment::lock('FapiClient', \LOCKS_DIR);
27+
28+
$this->httpClient = new CapturingHttpClient(
29+
new GuzzleHttpClient(),
30+
__DIR__ . '/MockHttpClients/FapiClientVouchersMockHttpClient.php',
31+
'Fapi\FapiClientTests\MockHttpClients\FapiClientVouchersMockHttpClient'
32+
);
33+
34+
$this->fapiClient = new FapiClient(
35+
'slischka@test-fapi.cz',
36+
'AaleYCMwUdSZjgK02NTCiSEVC',
37+
'https://api.fapi.cz/',
38+
$this->httpClient
39+
);
40+
}
41+
42+
protected function tearDown()
43+
{
44+
$this->httpClient->close();
45+
}
46+
47+
public function testDefaults()
48+
{
49+
$voucher = $this->fapiClient->getVouchers()->find(1656);
50+
51+
Assert::type('array', $voucher);
52+
Assert::type('int', $voucher['id']);
53+
Assert::same('ABUCRQ', $voucher['code']);
54+
Assert::same('valid', $voucher['status']);
55+
Assert::same('2021-03-31', $voucher['expiration_date']);
56+
57+
$result = $this->fapiClient->getVouchers()->applyVoucher($voucher['code'], ['applicant' => [
58+
'email' => 'test@fapi.cz',
59+
'form_url' => 'https://xx.fapi.cz',
60+
]]);
61+
62+
Assert::true($result['applied']);
63+
$voucher = $result['voucher'];
64+
65+
Assert::type('array', $voucher);
66+
Assert::type('int', $voucher['id']);
67+
Assert::same('ABUCRQ', $voucher['code']);
68+
Assert::same('applied', $voucher['status']);
69+
Assert::same('2021-03-31', $voucher['expiration_date']);
70+
Assert::same('2021-03-11 17:44:35', $voucher['applied_on']);
71+
}
72+
73+
}
74+
75+
(new FapiClientVouchersTest())->run();
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Fapi\FapiClientTests\MockHttpClients;
5+
6+
use Fapi\HttpClient\HttpRequest;
7+
use Fapi\HttpClient\HttpResponse;
8+
use Fapi\HttpClient\MockHttpClient;
9+
10+
final class FapiClientVouchersMockHttpClient extends MockHttpClient
11+
{
12+
13+
public function __construct()
14+
{
15+
$this->add(
16+
new HttpRequest(
17+
'GET',
18+
'https://api.fapi.cz/vouchers/1656',
19+
[
20+
'Host' => ['api.fapi.cz'],
21+
'verify' => ['1'],
22+
'Content-Type' => ['application/json'],
23+
'Accept' => ['application/json'],
24+
'Authorization' => [
25+
'Basic c2xpc2Noa2FAdGVzdC1mYXBpLmN6OkFhbGVZQ013VWRTWmpnSzAyTlRDaVNFVkM=',
26+
],
27+
],
28+
'',
29+
'1.1'
30+
),
31+
new HttpResponse(
32+
200,
33+
[
34+
'Date' => ['Thu, 11 Mar 2021 16:44:35 GMT'],
35+
'Content-Type' => ['application/json'],
36+
'Content-Length' => ['227'],
37+
'Connection' => ['keep-alive'],
38+
'Set-Cookie' => [
39+
'_nss=1; path=/; HttpOnly; SameSite=Strict',
40+
'_nss=1; path=/; HttpOnly; SameSite=Strict',
41+
],
42+
'Server' => ['nginx'],
43+
'X-Powered-By' => ['Nette Framework 3'],
44+
'X-Frame-Options' => ['SAMEORIGIN', 'sameorigin', 'sameorigin'],
45+
'X-NewRelic-App-Data' => [
46+
'PxQFWFBbCAUIR1BSDgIAU1UEDxFORDQHUjZKA1ZLVVFHDFYPbU5yARBfWA86TFlDWThOFAZtGBALRFVbBxQQPh8ZUQYCYwQfCjgSHBNNA0xUBgdRVk8IHQBWUlcOHQVUUx0UBVJSWlsIBgoDCg4GV1BVAUMdB1IOF1Nq',
47+
],
48+
'Strict-Transport-Security' => [
49+
'max-age=63072000; includeSubDomains; preload',
50+
'max-age=63072000; includeSubDomains; preload',
51+
],
52+
'X-Content-Type-Options' => ['nosniff', 'nosniff'],
53+
'X-Origin-Instance' => ['web3.prod.fapi.cloud', 'web1.prod.fapi.cloud'],
54+
'Access-Control-Allow-Origin' => ['*', '*'],
55+
'Access-Control-Allow-Headers' => [
56+
'Origin, X-Requested-With, Content-Type, Accept',
57+
'Origin, X-Requested-With, Content-Type, Accept',
58+
],
59+
],
60+
'{"id":1656,"user_id":13057,"code":"ABUCRQ","status":"valid","created_on":"2021-03-11 17:36:23","expiration_date":"2021-03-31","applied_on":null,"invoice_id":null,"product_name":"test","item_template_code":null,"applicant":null}'
61+
)
62+
);
63+
$this->add(
64+
new HttpRequest(
65+
'PUT',
66+
'https://api.fapi.cz/vouchers/ABUCRQ/apply',
67+
[
68+
'Host' => ['api.fapi.cz'],
69+
'verify' => ['1'],
70+
'Content-Type' => ['application/json'],
71+
'Accept' => ['application/json'],
72+
'Authorization' => [
73+
'Basic c2xpc2Noa2FAdGVzdC1mYXBpLmN6OkFhbGVZQ013VWRTWmpnSzAyTlRDaVNFVkM=',
74+
],
75+
],
76+
'{"applicant":{"email":"test@fapi.cz","form_url":"https://xx.fapi.cz"}}',
77+
'1.1'
78+
),
79+
new HttpResponse(
80+
200,
81+
[
82+
'Date' => ['Thu, 11 Mar 2021 16:44:35 GMT'],
83+
'Content-Type' => ['application/json'],
84+
'Transfer-Encoding' => ['chunked'],
85+
'Connection' => ['keep-alive'],
86+
'Vary' => ['Accept-Encoding', 'Accept-Encoding'],
87+
'Set-Cookie' => [
88+
'_nss=1; path=/; HttpOnly; SameSite=Strict',
89+
'_nss=1; path=/; HttpOnly; SameSite=Strict',
90+
],
91+
'Server' => ['nginx'],
92+
'X-Powered-By' => ['Nette Framework 3'],
93+
'X-Frame-Options' => ['SAMEORIGIN', 'sameorigin', 'sameorigin'],
94+
'X-NewRelic-App-Data' => [
95+
'PxQFWFBbCAUIR1BSDgIAU1UEDxFORDQHUjZKA1ZLVVFHDFYPbU5yARBfWA86TFlDWThOFAZtGBALRFVbBxQQPh8ZWw1cXQ5pUkhDIBw7A09daxwcOkxZQ0AIGEAbARlWVAEGA05WTVIFUg1WFAsCCh9HDVFTAwdSVgFVVlBbAFFUVENOUVBbFQFs',
96+
],
97+
'Strict-Transport-Security' => [
98+
'max-age=63072000; includeSubDomains; preload',
99+
'max-age=63072000; includeSubDomains; preload',
100+
],
101+
'X-Content-Type-Options' => ['nosniff', 'nosniff'],
102+
'X-Origin-Instance' => ['web1.prod.fapi.cloud', 'web2.prod.fapi.cloud'],
103+
'Access-Control-Allow-Origin' => ['*', '*'],
104+
'Access-Control-Allow-Headers' => [
105+
'Origin, X-Requested-With, Content-Type, Accept',
106+
'Origin, X-Requested-With, Content-Type, Accept',
107+
],
108+
'x-encoded-content-encoding' => ['gzip'],
109+
],
110+
'{"applied":true,"message":"voucherUpdater.apply.success","voucher":{"id":1656,"user_id":13057,"code":"ABUCRQ","status":"applied","created_on":"2021-03-11 17:36:23","expiration_date":"2021-03-31","applied_on":"2021-03-11 17:44:35","invoice_id":null,"product_name":"test","item_template_code":null,"applicant":{"email":"test@fapi.cz","form_url":"https:\\/\\/xx.fapi.cz"}}}'
111+
)
112+
);
113+
}
114+
115+
}

0 commit comments

Comments
 (0)