您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

AccountBalancesReportTest.php 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. use App\Facades\Accounting;
  3. use App\Factories\ReportDateFactory;
  4. use App\Filament\Company\Pages\Reports\AccountBalances;
  5. use App\Models\Accounting\Transaction;
  6. use function Pest\Livewire\livewire;
  7. it('correctly builds a account balances report', function () {
  8. $testCompany = $this->testCompany;
  9. $reportDatesDTO = ReportDateFactory::create($testCompany);
  10. $defaultDateRange = $reportDatesDTO->defaultDateRange;
  11. $defaultStartDate = $reportDatesDTO->defaultStartDate->toImmutable();
  12. $defaultEndDate = $reportDatesDTO->defaultEndDate->toImmutable();
  13. $depositAmount = 1000;
  14. $withdrawalAmount = 1000;
  15. $depositCount = 10;
  16. $withdrawalCount = 10;
  17. // Create transactions for the company
  18. Transaction::factory()
  19. ->forDefaultBankAccount()
  20. ->forUncategorizedRevenue()
  21. ->asDeposit($depositAmount)
  22. ->count($depositCount)
  23. ->state([
  24. 'posted_at' => $defaultStartDate->subWeek(),
  25. ])
  26. ->create();
  27. Transaction::factory()
  28. ->forDefaultBankAccount()
  29. ->forUncategorizedExpense()
  30. ->asWithdrawal($withdrawalAmount)
  31. ->count($withdrawalCount)
  32. ->state([
  33. 'posted_at' => $defaultEndDate,
  34. ])
  35. ->create();
  36. $defaultBankAccount = $testCompany->default->bankAccount->account;
  37. $fields = $defaultBankAccount->category->getRelevantBalanceFields();
  38. $expectedBalances = Accounting::getBalances($defaultBankAccount, $defaultStartDate->toDateString(), $defaultEndDate->toDateString(), $fields);
  39. $formattedExpectedBalances = formatReportBalances($expectedBalances);
  40. livewire(AccountBalances::class)
  41. ->assertFormSet([
  42. 'deferredFilters.dateRange' => $defaultDateRange,
  43. 'deferredFilters.startDate' => $defaultStartDate->toDateTimeString(),
  44. 'deferredFilters.endDate' => $defaultEndDate->toDateTimeString(),
  45. ])
  46. ->assertSet('filters', [
  47. 'dateRange' => $defaultDateRange,
  48. 'startDate' => $defaultStartDate->toDateString(),
  49. 'endDate' => $defaultEndDate->toDateString(),
  50. ])
  51. ->call('applyFilters')
  52. ->assertSeeTextInOrder([
  53. 'Cash on Hand',
  54. $formattedExpectedBalances->startingBalance,
  55. $formattedExpectedBalances->debitBalance,
  56. $formattedExpectedBalances->creditBalance,
  57. $formattedExpectedBalances->netMovement,
  58. $formattedExpectedBalances->endingBalance,
  59. ])
  60. ->assertReportTableData();
  61. $expectedBalancesSubYear = Accounting::getBalances($defaultBankAccount, $defaultStartDate->subYear()->startOfYear()->toDateString(), $defaultEndDate->subYear()->endOfYear()->toDateString(), $fields);
  62. $formattedExpectedBalancesSubYear = formatReportBalances($expectedBalancesSubYear);
  63. livewire(AccountBalances::class)
  64. ->assertFormSet([
  65. 'deferredFilters.dateRange' => $defaultDateRange,
  66. 'deferredFilters.startDate' => $defaultStartDate->toDateTimeString(),
  67. 'deferredFilters.endDate' => $defaultEndDate->toDateTimeString(),
  68. ])
  69. ->assertSet('filters', [
  70. 'dateRange' => $defaultDateRange,
  71. 'startDate' => $defaultStartDate->toDateString(),
  72. 'endDate' => $defaultEndDate->toDateString(),
  73. ])
  74. ->set('deferredFilters', [
  75. 'startDate' => $defaultStartDate->subYear()->startOfYear()->toDateTimeString(),
  76. 'endDate' => $defaultEndDate->subYear()->endOfYear()->toDateTimeString(),
  77. ])
  78. ->call('applyFilters')
  79. ->assertSeeTextInOrder([
  80. 'Cash on Hand',
  81. $formattedExpectedBalancesSubYear->startingBalance,
  82. $formattedExpectedBalancesSubYear->debitBalance,
  83. $formattedExpectedBalancesSubYear->creditBalance,
  84. $formattedExpectedBalancesSubYear->netMovement,
  85. $formattedExpectedBalancesSubYear->endingBalance,
  86. ])
  87. ->assertReportTableData();
  88. });