123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- <?php
-
- use App\Enums\Accounting\InvoiceStatus;
- use App\Models\Accounting\Invoice;
- use App\Utilities\Currency\CurrencyAccessor;
-
- beforeEach(function () {
- $this->defaultCurrency = CurrencyAccessor::getDefaultCurrency();
- $this->withOfferings();
- });
-
- it('creates a basic invoice with line items and calculates totals correctly', function () {
- $invoice = Invoice::factory()
- ->withLineItems()
- ->create();
-
- $invoice->refresh();
-
- expect($invoice)
- ->hasLineItems()->toBeTrue()
- ->lineItems->count()->toBe(3)
- ->subtotal->toBeGreaterThan(0)
- ->total->toBeGreaterThan(0)
- ->amount_due->toBe($invoice->total);
- });
-
- test('approved invoices are marked as Unsent when not Overdue', function () {
- $invoice = Invoice::factory()
- ->withLineItems()
- ->state([
- 'due_date' => now()->addDays(30),
- ])
- ->create();
-
- $invoice->refresh();
-
- $invoice->approveDraft();
-
- expect($invoice)
- ->hasLineItems()->toBeTrue()
- ->status->toBe(InvoiceStatus::Unsent)
- ->wasApproved()->toBeTrue()
- ->approvalTransaction->not->toBeNull();
- });
-
- test('approved invoices are marked as Overdue when Overdue', function () {
- $invoice = Invoice::factory()
- ->withLineItems()
- ->state([
- 'due_date' => now()->subDays(30),
- ])
- ->create();
-
- $invoice->refresh();
-
- $invoice->approveDraft();
-
- expect($invoice)
- ->hasLineItems()->toBeTrue()
- ->status->toBe(InvoiceStatus::Overdue)
- ->wasApproved()->toBeTrue()
- ->approvalTransaction->not->toBeNull();
- });
|