|
5 | 5 | use Brick\Money\Money; |
6 | 6 | use Elegantly\Invoices\Enums\InvoiceState; |
7 | 7 | use Elegantly\Invoices\Enums\InvoiceType; |
| 8 | +use Elegantly\Invoices\InvoiceDiscount; |
8 | 9 | use Elegantly\Invoices\Pdf\PdfInvoice; |
9 | 10 | use Elegantly\Invoices\Pdf\PdfInvoiceItem; |
10 | 11 |
|
11 | | -it('computes the right subTotalAmount, totalTaxAmount and totalAmount', function () { |
| 12 | +it('computes the right amounts', function ($items, $taxPercentage, $discounPercentage, $subtotalAmount, $totalDiscountAmount, $totalTaxAmount, $totalAmount) { |
12 | 13 | $pdfInvoice = new PdfInvoice( |
13 | 14 | type: InvoiceType::Invoice, |
14 | 15 | state: InvoiceState::Paid, |
15 | 16 | serial_number: 'FAKE-INVOICE-01', |
16 | 17 | due_at: now(), |
17 | 18 | created_at: now(), |
18 | | - ); |
19 | | - |
20 | | - $pdfInvoice->items = [ |
21 | | - new PdfInvoiceItem( |
22 | | - label: 'Item 1', |
23 | | - unit_price: Money::of(110, 'USD'), |
24 | | - unit_tax: Money::of(10, 'USD') |
| 19 | + items: array_map( |
| 20 | + fn ($item) => new PdfInvoiceItem( |
| 21 | + label: 'Item 1', |
| 22 | + unit_price: Money::of($item, 'USD'), |
| 23 | + tax_percentage: $taxPercentage |
| 24 | + ), |
| 25 | + $items |
25 | 26 | ), |
26 | | - new PdfInvoiceItem( |
27 | | - label: 'Item 1', |
28 | | - unit_price: Money::of(234, 'USD'), |
29 | | - unit_tax: Money::of(12, 'USD') |
30 | | - ), |
31 | | - ]; |
| 27 | + discounts: [ |
| 28 | + new InvoiceDiscount( |
| 29 | + percent_off: $discounPercentage |
| 30 | + ), |
| 31 | + ] |
| 32 | + ); |
32 | 33 |
|
33 | | - expect($pdfInvoice->subTotalAmount()->getAmount()->toFloat())->toEqual(344); |
34 | | - expect($pdfInvoice->totalTaxAmount()->getAmount()->toFloat())->toEqual(22); |
35 | | - expect($pdfInvoice->totalAmount()->getAmount()->toFloat())->toEqual(366); |
36 | | -}); |
| 34 | + expect($pdfInvoice->subTotalAmount()->getAmount()->toFloat())->toEqual($subtotalAmount); |
| 35 | + expect($pdfInvoice->totalDiscountAmount()->getAmount()->toFloat())->toEqual($totalDiscountAmount); |
| 36 | + expect($pdfInvoice->totalTaxAmount()->getAmount()->toFloat())->toEqual($totalTaxAmount); |
| 37 | + expect($pdfInvoice->totalAmount()->getAmount()->toFloat())->toEqual($totalAmount); |
| 38 | +})->with([ |
| 39 | + [[100.0], 0.0, 0.0, 100.0, 0.0, 0.0, 100.0], |
| 40 | + [[100.0], 20.0, 0.0, 100.0, 0.0, 20.0, 120.0], |
| 41 | + [[100.0], 0.0, 10.0, 100.0, 10.0, 0.0, 90.0], |
| 42 | + [[100.0], 20.0, 10.0, 100.0, 10.0, 18.0, 108.0], |
| 43 | + [[100.0, 50.0], 0.0, 0.0, 150.0, 0.0, 0.0, 150.0], |
| 44 | + [[100.0, 50.0], 20.0, 0.0, 150.0, 0.0, 30.0, 180.0], |
| 45 | + [[100.0, 50.0], 20.0, 10.0, 150.0, 15.0, 27.0, 162.0], |
| 46 | +]); |
0 commit comments