@@ -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