Skip to content

Commit ffe189e

Browse files
authored
Update retrieve to accept query params (#154)
* Update retrieve to accept query params * Add errors, edit_history_summary, disabled, disabled_at and disabled_by to Invoice
1 parent ddf9e2c commit ffe189e

5 files changed

Lines changed: 239 additions & 22 deletions

File tree

src/DataSource.php

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use ChartMogul\Service\CreateTrait;
88
use ChartMogul\Service\AllTrait;
99
use ChartMogul\Service\DestroyTrait;
10-
use ChartMogul\Service\RequestService;
10+
use ChartMogul\Service\GetTrait;
1111

1212
/**
1313
* @codeCoverageIgnore
@@ -24,6 +24,7 @@ class DataSource extends AbstractResource
2424
use CreateTrait;
2525
use AllTrait;
2626
use DestroyTrait;
27+
use GetTrait;
2728

2829
/**
2930
* @ignore
@@ -49,16 +50,4 @@ class DataSource extends AbstractResource
4950
protected $invoice_handling_setting;
5051

5152
public $name;
52-
53-
public static function retrieve($uuid, $query = [], ?ClientInterface $client = null)
54-
{
55-
return (new RequestService($client))
56-
->setResourceClass(static::class)
57-
->getWithQuery($uuid, $query);
58-
}
59-
60-
public static function get($uuid, $query = [], ?ClientInterface $client = null)
61-
{
62-
return static::retrieve($uuid, $query, $client);
63-
}
6453
}

src/Invoice.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@
1717

1818
/**
1919
* @property-read string $uuid
20+
* @property-read string $customer_uuid
21+
* @property-read string $external_id
22+
* @property-read string $data_source_uuid
23+
* @property-read string $customer_external_id
24+
* @property-read string $currency
25+
* @property-read string $date
26+
* @property-read string $due_date
27+
* @property-read bool $disabled
28+
* @property-read string $disabled_at
29+
* @property-read string $disabled_by
30+
* @property-read array $edit_history_summary
31+
* @property-read array $errors
32+
* @property-read ArrayCollection $line_items
33+
* @property-read ArrayCollection $transactions
2034
*/
2135
class Invoice extends AbstractResource
2236
{
@@ -48,6 +62,12 @@ class Invoice extends AbstractResource
4862
public $date;
4963
public $due_date;
5064

65+
public $disabled;
66+
public $disabled_at;
67+
public $disabled_by;
68+
public $edit_history_summary;
69+
public $errors;
70+
5171
public $line_items = [];
5272
public $transactions = [];
5373

src/Service/GetTrait.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,20 @@ trait GetTrait
1414
*
1515
* @return resource
1616
*/
17-
public static function retrieve($uuid, ?ClientInterface $client = null)
17+
public static function retrieve($uuid, ?ClientInterface $client = null, array $query = [])
1818
{
19-
return (new RequestService($client))
20-
->setResourceClass(static::class)
21-
->get($uuid);
19+
$requestService = (new RequestService($client))
20+
->setResourceClass(static::class);
21+
22+
if (empty($query)) {
23+
return $requestService->get($uuid);
24+
}
25+
26+
return $requestService->getWithQuery($uuid, $query);
2227
}
2328

24-
public static function get($uuid, ?ClientInterface $client = null)
29+
public static function get($uuid, ?ClientInterface $client = null, array $query = [])
2530
{
26-
return static::retrieve($uuid, $client);
31+
return static::retrieve($uuid, $client, $query);
2732
}
2833
}

tests/Unit/DataSourceTest.php

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,11 @@ public function testRetrieveDataSource()
139139

140140
$uuid = 'ds_fef05d54-47b4-431b-aed2-eb6b9e545430';
141141

142-
$result = DataSource::retrieve($uuid, [
142+
$result = DataSource::retrieve($uuid, $cmClient, [
143143
'with_processing_status' => true,
144144
'with_auto_churn_subscription_setting' => true,
145145
'with_invoice_handling_setting' => true
146-
], $cmClient);
146+
]);
147147
$request = $mockClient->getRequests()[0];
148148

149149
$this->assertEquals("GET", $request->getMethod());
@@ -174,7 +174,7 @@ public function testGetDataSource()
174174
$uuid = 'ds_fef05d54-47b4-431b-aed2-eb6b9e545430';
175175

176176
// Test the alias method get()
177-
$result = DataSource::get($uuid, [], $cmClient);
177+
$result = DataSource::get($uuid, $cmClient);
178178
$request = $mockClient->getRequests()[0];
179179

180180
$this->assertEquals("GET", $request->getMethod());
@@ -186,6 +186,70 @@ public function testGetDataSource()
186186
$this->assertEquals($uuid, $result->uuid);
187187
}
188188

189+
public function testRetrieveDataSourceWithProcessingStatus()
190+
{
191+
$stream = Psr7\stream_for(DataSourceTest::RETRIEVE_DATA_SOURCE_JSON);
192+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
193+
194+
$uuid = 'ds_fef05d54-47b4-431b-aed2-eb6b9e545430';
195+
196+
$result = DataSource::retrieve($uuid, $cmClient, ['with_processing_status' => true]);
197+
$request = $mockClient->getRequests()[0];
198+
199+
$this->assertEquals("GET", $request->getMethod());
200+
$uri = $request->getUri();
201+
$this->assertEquals("with_processing_status=1", $uri->getQuery());
202+
$this->assertEquals("/v1/data_sources/".$uuid, $uri->getPath());
203+
}
204+
205+
public function testRetrieveDataSourceWithAutoChurnSubscriptionSetting()
206+
{
207+
$stream = Psr7\stream_for(DataSourceTest::RETRIEVE_DATA_SOURCE_JSON);
208+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
209+
210+
$uuid = 'ds_fef05d54-47b4-431b-aed2-eb6b9e545430';
211+
212+
$result = DataSource::retrieve($uuid, $cmClient, ['with_auto_churn_subscription_setting' => true]);
213+
$request = $mockClient->getRequests()[0];
214+
215+
$this->assertEquals("GET", $request->getMethod());
216+
$uri = $request->getUri();
217+
$this->assertEquals("with_auto_churn_subscription_setting=1", $uri->getQuery());
218+
$this->assertEquals("/v1/data_sources/".$uuid, $uri->getPath());
219+
}
220+
221+
public function testRetrieveDataSourceWithInvoiceHandlingSetting()
222+
{
223+
$stream = Psr7\stream_for(DataSourceTest::RETRIEVE_DATA_SOURCE_JSON);
224+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
225+
226+
$uuid = 'ds_fef05d54-47b4-431b-aed2-eb6b9e545430';
227+
228+
$result = DataSource::retrieve($uuid, $cmClient, ['with_invoice_handling_setting' => true]);
229+
$request = $mockClient->getRequests()[0];
230+
231+
$this->assertEquals("GET", $request->getMethod());
232+
$uri = $request->getUri();
233+
$this->assertEquals("with_invoice_handling_setting=1", $uri->getQuery());
234+
$this->assertEquals("/v1/data_sources/".$uuid, $uri->getPath());
235+
}
236+
237+
public function testRetrieveDataSourceWithProcessingStatusFalse()
238+
{
239+
$stream = Psr7\stream_for(DataSourceTest::RETRIEVE_DATA_SOURCE_JSON);
240+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
241+
242+
$uuid = 'ds_fef05d54-47b4-431b-aed2-eb6b9e545430';
243+
244+
$result = DataSource::retrieve($uuid, $cmClient, ['with_processing_status' => false]);
245+
$request = $mockClient->getRequests()[0];
246+
247+
$this->assertEquals("GET", $request->getMethod());
248+
$uri = $request->getUri();
249+
$this->assertEquals("with_processing_status=0", $uri->getQuery());
250+
$this->assertEquals("/v1/data_sources/".$uuid, $uri->getPath());
251+
}
252+
189253
public function testListDataSources()
190254
{
191255
$stream = Psr7\stream_for(DataSourceTest::LIST_DATA_SOURCES_JSON);

tests/Unit/InvoiceTest.php

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@ class InvoiceTest extends TestCase
2020
"date": "2015-11-01T00:00:00.000Z",
2121
"due_date": "2015-11-15T00:00:00.000Z",
2222
"currency": "USD",
23+
"disabled": false,
24+
"disabled_at": null,
25+
"disabled_by": null,
26+
"edit_history_summary": {
27+
"values_changed": {
28+
"amount_in_cents": {
29+
"original_value": 4500,
30+
"edited_value": 5000
31+
}
32+
},
33+
"latest_edit_author": "admin@example.com",
34+
"latest_edit_performed_at": "2024-01-10T12:00:00.000Z"
35+
},
36+
"errors": null,
2337
"line_items": [
2438
{
2539
"uuid": "li_d72e6843-5793-41d0-bfdf-0269514c9c56",
@@ -75,6 +89,27 @@ class InvoiceTest extends TestCase
7589
"date": "2015-11-01T00:00:00.000Z",
7690
"due_date": "2015-11-15T00:00:00.000Z",
7791
"currency": "USD",
92+
"disabled": true,
93+
"disabled_at": "2024-01-15T10:30:00.000Z",
94+
"disabled_by": "user@example.com",
95+
"edit_history_summary": {
96+
"values_changed": {
97+
"currency": {
98+
"original_value": "EUR",
99+
"edited_value": "USD"
100+
},
101+
"date": {
102+
"original_value": "2024-01-01T00:00:00.000Z",
103+
"edited_value": "2024-01-02T00:00:00.000Z"
104+
}
105+
},
106+
"latest_edit_author": "editor@example.com",
107+
"latest_edit_performed_at": "2024-01-20T15:45:00.000Z"
108+
},
109+
"errors": {
110+
"currency": ["Currency is invalid", "Currency must be supported"],
111+
"date": ["Date is in the future"]
112+
},
78113
"line_items": [
79114
{
80115
"uuid": "li_d72e6843-5793-41d0-bfdf-0269514c9c56",
@@ -206,4 +241,108 @@ public function testRetrieveInvoice()
206241
$this->assertTrue($result instanceof Invoice);
207242
$this->assertEquals($uuid, $result->uuid);
208243
}
244+
245+
public function testRetrieveInvoiceWithValidationType()
246+
{
247+
$stream = Psr7\stream_for(InvoiceTest::RETRIEVE_INVOICE_JSON);
248+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
249+
250+
$uuid = 'inv_565c73b2-85b9-49c9-a25e-2b7df6a677c9';
251+
252+
$result = Invoice::retrieve($uuid, $cmClient, ['validation_type' => 'all']);
253+
$request = $mockClient->getRequests()[0];
254+
255+
$this->assertEquals("GET", $request->getMethod());
256+
$uri = $request->getUri();
257+
$this->assertEquals("validation_type=all", $uri->getQuery());
258+
$this->assertEquals("/v1/invoices/".$uuid, $uri->getPath());
259+
260+
$this->assertTrue($result instanceof Invoice);
261+
$this->assertEquals($uuid, $result->uuid);
262+
}
263+
264+
public function testRetrieveInvoiceWithAllParams()
265+
{
266+
$stream = Psr7\stream_for(InvoiceTest::RETRIEVE_INVOICE_JSON);
267+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
268+
269+
$uuid = 'inv_565c73b2-85b9-49c9-a25e-2b7df6a677c9';
270+
271+
$result = Invoice::retrieve($uuid, $cmClient, [
272+
'validation_type' => 'invalid',
273+
'include_edit_histories' => true,
274+
'with_disabled' => true
275+
]);
276+
$request = $mockClient->getRequests()[0];
277+
278+
$this->assertEquals("GET", $request->getMethod());
279+
$uri = $request->getUri();
280+
parse_str($uri->getQuery(), $queryParams);
281+
$this->assertEquals('invalid', $queryParams['validation_type']);
282+
$this->assertEquals('1', $queryParams['include_edit_histories']);
283+
$this->assertEquals('1', $queryParams['with_disabled']);
284+
$this->assertEquals("/v1/invoices/".$uuid, $uri->getPath());
285+
286+
$this->assertTrue($result instanceof Invoice);
287+
$this->assertEquals($uuid, $result->uuid);
288+
289+
// Verify new fields are present
290+
$this->assertTrue($result->disabled);
291+
$this->assertEquals('2024-01-15T10:30:00.000Z', $result->disabled_at);
292+
$this->assertEquals('user@example.com', $result->disabled_by);
293+
$this->assertNotNull($result->edit_history_summary);
294+
$this->assertIsArray($result->edit_history_summary);
295+
$this->assertArrayHasKey('values_changed', $result->edit_history_summary);
296+
$this->assertArrayHasKey('currency', $result->edit_history_summary['values_changed']);
297+
$this->assertEquals('EUR', $result->edit_history_summary['values_changed']['currency']['original_value']);
298+
$this->assertEquals('USD', $result->edit_history_summary['values_changed']['currency']['edited_value']);
299+
$this->assertEquals('editor@example.com', $result->edit_history_summary['latest_edit_author']);
300+
$this->assertEquals('2024-01-20T15:45:00.000Z', $result->edit_history_summary['latest_edit_performed_at']);
301+
$this->assertNotNull($result->errors);
302+
$this->assertIsArray($result->errors);
303+
$this->assertArrayHasKey('currency', $result->errors);
304+
$this->assertIsArray($result->errors['currency']);
305+
$this->assertCount(2, $result->errors['currency']);
306+
$this->assertEquals('Currency is invalid', $result->errors['currency'][0]);
307+
$this->assertEquals('Currency must be supported', $result->errors['currency'][1]);
308+
$this->assertArrayHasKey('date', $result->errors);
309+
$this->assertIsArray($result->errors['date']);
310+
$this->assertCount(1, $result->errors['date']);
311+
$this->assertEquals('Date is in the future', $result->errors['date'][0]);
312+
}
313+
314+
public function testAllInvoicesWithValidationType()
315+
{
316+
$stream = Psr7\stream_for(InvoiceTest::ALL_INVOICES_JSON);
317+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
318+
319+
$result = Invoice::all(['validation_type' => 'all'], $cmClient);
320+
$request = $mockClient->getRequests()[0];
321+
322+
$this->assertEquals("GET", $request->getMethod());
323+
$uri = $request->getUri();
324+
$this->assertEquals("validation_type=all", $uri->getQuery());
325+
$this->assertEquals("/v1/invoices", $uri->getPath());
326+
}
327+
328+
public function testAllInvoicesWithAllParams()
329+
{
330+
$stream = Psr7\stream_for(InvoiceTest::ALL_INVOICES_JSON);
331+
list($cmClient, $mockClient) = $this->getMockClient(0, [200], $stream);
332+
333+
$result = Invoice::all([
334+
'validation_type' => 'valid',
335+
'include_edit_histories' => false,
336+
'with_disabled' => true
337+
], $cmClient);
338+
$request = $mockClient->getRequests()[0];
339+
340+
$this->assertEquals("GET", $request->getMethod());
341+
$uri = $request->getUri();
342+
parse_str($uri->getQuery(), $queryParams);
343+
$this->assertEquals('valid', $queryParams['validation_type']);
344+
$this->assertEquals('0', $queryParams['include_edit_histories']);
345+
$this->assertEquals('1', $queryParams['with_disabled']);
346+
$this->assertEquals("/v1/invoices", $uri->getPath());
347+
}
209348
}

0 commit comments

Comments
 (0)