| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | 
							- <?php
 - 
 - use App\Facades\Accounting;
 - use App\Facades\Reporting;
 - use App\Factories\ReportDateFactory;
 - use App\Filament\Company\Pages\Reports\TrialBalance;
 - use App\Models\Accounting\Transaction;
 - 
 - use function Pest\Livewire\livewire;
 - 
 - it('correctly builds a standard trial balance report', function () {
 -     $testCompany = $this->testCompany;
 - 
 -     $reportDates = ReportDateFactory::create($testCompany);
 -     $defaultDateRange = $reportDates->defaultDateRange;
 -     $defaultStartDate = $reportDates->defaultStartDate->toImmutable();
 -     $defaultEndDate = $reportDates->defaultEndDate->toImmutable();
 - 
 -     $defaultReportType = 'standard';
 - 
 -     $depositAmount = 1000;
 -     $withdrawalAmount = 1000;
 -     $depositCount = 10;
 -     $withdrawalCount = 10;
 - 
 -     Transaction::factory()
 -         ->forDefaultBankAccount()
 -         ->forUncategorizedRevenue()
 -         ->asDeposit($depositAmount)
 -         ->count($depositCount)
 -         ->state([
 -             'posted_at' => $defaultStartDate->subWeek(),
 -         ])
 -         ->create();
 - 
 -     Transaction::factory()
 -         ->forDefaultBankAccount()
 -         ->forUncategorizedExpense()
 -         ->asWithdrawal($withdrawalAmount)
 -         ->count($withdrawalCount)
 -         ->state([
 -             'posted_at' => now()->subWeek(),
 -         ])
 -         ->create();
 - 
 -     $defaultBankAccountAccount = $testCompany->default->bankAccount->account;
 -     $earliestTransactionDate = $reportDates->refresh()->earliestTransactionDate;
 - 
 -     $expectedBalances = Accounting::getBalances(
 -         $defaultBankAccountAccount,
 -         $earliestTransactionDate->toDateString(),
 -         $defaultEndDate->toDateString(),
 -     );
 - 
 -     $calculatedTrialBalances = Reporting::calculateTrialBalances($defaultBankAccountAccount->category, $expectedBalances['ending_balance']);
 - 
 -     $formattedExpectedBalances = Reporting::formatBalances($calculatedTrialBalances);
 - 
 -     livewire(TrialBalance::class)
 -         ->assertFormSet([
 -             'deferredFilters.reportType' => $defaultReportType,
 -             'deferredFilters.dateRange' => $defaultDateRange,
 -             'deferredFilters.asOfDate' => $defaultEndDate->toDateString(),
 -         ])
 -         ->assertSet('filters', [
 -             'reportType' => $defaultReportType,
 -             'dateRange' => $defaultDateRange,
 -             'asOfDate' => $defaultEndDate->toDateString(),
 -         ])
 -         ->call('applyFilters')
 -         ->assertDontSeeText('Retained Earnings')
 -         ->assertSeeTextInOrder([
 -             $defaultBankAccountAccount->name,
 -             $formattedExpectedBalances->debitBalance,
 -             $formattedExpectedBalances->creditBalance,
 -         ])
 -         ->assertReportTableData();
 - });
 - 
 - it('correctly builds a post-closing trial balance report', function () {
 -     $testCompany = $this->testCompany;
 - 
 -     $reportDates = ReportDateFactory::create($testCompany);
 -     $defaultDateRange = $reportDates->defaultDateRange;
 -     $defaultStartDate = $reportDates->defaultStartDate->toImmutable();
 -     $defaultEndDate = $reportDates->defaultEndDate->toImmutable();
 - 
 -     $defaultReportType = 'postClosing';
 - 
 -     $depositAmount = 2000;
 -     $withdrawalAmount = 1000;
 -     $depositCount = 5;
 -     $withdrawalCount = 5;
 - 
 -     Transaction::factory()
 -         ->forDefaultBankAccount()
 -         ->forUncategorizedRevenue()
 -         ->asDeposit($depositAmount)
 -         ->count($depositCount)
 -         ->state([
 -             'posted_at' => $defaultStartDate->subWeek(),
 -         ])
 -         ->create();
 - 
 -     Transaction::factory()
 -         ->forDefaultBankAccount()
 -         ->forUncategorizedExpense()
 -         ->asWithdrawal($withdrawalAmount)
 -         ->count($withdrawalCount)
 -         ->state([
 -             'posted_at' => now()->subWeek(),
 -         ])
 -         ->create();
 - 
 -     $defaultBankAccountAccount = $testCompany->default->bankAccount->account;
 -     $earliestTransactionDate = $reportDates->refresh()->earliestTransactionDate;
 - 
 -     $expectedBalances = Accounting::getBalances(
 -         $defaultBankAccountAccount,
 -         $earliestTransactionDate->toDateString(),
 -         $defaultEndDate->toDateString(),
 -     );
 - 
 -     $calculatedTrialBalances = Reporting::calculateTrialBalances($defaultBankAccountAccount->category, $expectedBalances['ending_balance']);
 - 
 -     $formattedExpectedBalances = Reporting::formatBalances($calculatedTrialBalances);
 - 
 -     $formattedRetainedEarningsBalances = Reporting::getRetainedEarningsBalances($earliestTransactionDate->toDateString(), $defaultEndDate->toDateString());
 - 
 -     // Use Livewire to assert the report's filters and displayed data
 -     livewire(TrialBalance::class)
 -         ->set('deferredFilters.reportType', $defaultReportType)
 -         ->assertFormSet([
 -             'deferredFilters.reportType' => $defaultReportType,
 -             'deferredFilters.dateRange' => $defaultDateRange,
 -             'deferredFilters.asOfDate' => $defaultEndDate->toDateString(),
 -         ])
 -         ->call('applyFilters')
 -         ->assertSet('filters', [
 -             'reportType' => $defaultReportType,
 -             'dateRange' => $defaultDateRange,
 -             'asOfDate' => $defaultEndDate->toDateString(),
 -         ])
 -         ->assertSeeTextInOrder([
 -             $defaultBankAccountAccount->name,
 -             $formattedExpectedBalances->debitBalance,
 -             $formattedExpectedBalances->creditBalance,
 -         ])
 -         ->assertSeeText('Retained Earnings')
 -         ->assertSeeTextInOrder([
 -             'RE',
 -             'Retained Earnings',
 -             $formattedRetainedEarningsBalances->debitBalance,
 -             $formattedRetainedEarningsBalances->creditBalance,
 -         ])
 -         ->assertSeeTextInOrder([
 -             'Total Revenue',
 -             '$0.00',
 -             '$0.00',
 -         ])
 -         ->assertSeeTextInOrder([
 -             'Total Expenses',
 -             '$0.00',
 -             '$0.00',
 -         ])
 -         ->assertReportTableData();
 - });
 
 
  |