Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

AccountBalancesReportTest.php 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. use App\Facades\Accounting;
  3. use App\Facades\Reporting;
  4. use App\Factories\ReportDateFactory;
  5. use App\Filament\Company\Pages\Reports\AccountBalances;
  6. use App\Models\Accounting\Transaction;
  7. use function Pest\Livewire\livewire;
  8. it('correctly builds an account balances report for the current fiscal year', function () {
  9. $testCompany = $this->testCompany;
  10. $reportDates = ReportDateFactory::create($testCompany);
  11. $defaultDateRange = $reportDates->defaultDateRange;
  12. $defaultStartDate = $reportDates->defaultStartDate->toImmutable();
  13. $defaultEndDate = $reportDates->defaultEndDate->toImmutable();
  14. $depositAmount = 1000;
  15. $withdrawalAmount = 1000;
  16. $depositCount = 10;
  17. $withdrawalCount = 10;
  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. $defaultBankAccountAccount = $testCompany->default->bankAccount->account;
  37. $expectedBalances = Accounting::getBalances(
  38. $defaultBankAccountAccount,
  39. $defaultStartDate->toDateString(),
  40. $defaultEndDate->toDateString(),
  41. );
  42. $formattedExpectedBalances = Reporting::formatBalances($expectedBalances);
  43. livewire(AccountBalances::class)
  44. ->assertFormSet([
  45. 'deferredFilters.dateRange' => $defaultDateRange,
  46. 'deferredFilters.startDate' => $defaultStartDate->toDateString(),
  47. 'deferredFilters.endDate' => $defaultEndDate->toDateString(),
  48. ])
  49. ->assertSet('filters', [
  50. 'dateRange' => $defaultDateRange,
  51. 'startDate' => $defaultStartDate->toDateString(),
  52. 'endDate' => $defaultEndDate->toDateString(),
  53. ])
  54. ->call('applyFilters')
  55. ->assertSeeTextInOrder([
  56. $defaultBankAccountAccount->name,
  57. $formattedExpectedBalances->startingBalance,
  58. $formattedExpectedBalances->debitBalance,
  59. $formattedExpectedBalances->creditBalance,
  60. $formattedExpectedBalances->netMovement,
  61. $formattedExpectedBalances->endingBalance,
  62. ])
  63. ->assertReportTableData();
  64. });
  65. it('correctly builds an account balances report for the previous fiscal year', function () {
  66. $testCompany = $this->testCompany;
  67. $reportDatesDTO = ReportDateFactory::create($testCompany);
  68. $defaultDateRange = $reportDatesDTO->defaultDateRange;
  69. $defaultStartDate = $reportDatesDTO->defaultStartDate->toImmutable();
  70. $defaultEndDate = $reportDatesDTO->defaultEndDate->toImmutable();
  71. $depositAmount = 1000;
  72. $withdrawalAmount = 1000;
  73. $depositCount = 10;
  74. $withdrawalCount = 10;
  75. Transaction::factory()
  76. ->forDefaultBankAccount()
  77. ->forUncategorizedRevenue()
  78. ->asDeposit($depositAmount)
  79. ->count($depositCount)
  80. ->state([
  81. 'posted_at' => $defaultStartDate->subWeek(),
  82. ])
  83. ->create();
  84. Transaction::factory()
  85. ->forDefaultBankAccount()
  86. ->forUncategorizedExpense()
  87. ->asWithdrawal($withdrawalAmount)
  88. ->count($withdrawalCount)
  89. ->state([
  90. 'posted_at' => $defaultEndDate,
  91. ])
  92. ->create();
  93. $defaultBankAccountAccount = $testCompany->default->bankAccount->account;
  94. $expectedBalancesSubYear = Accounting::getBalances(
  95. $defaultBankAccountAccount,
  96. $defaultStartDate->subYear()->startOfYear()->toDateString(),
  97. $defaultEndDate->subYear()->endOfYear()->toDateString(),
  98. );
  99. $formattedExpectedBalancesSubYear = Reporting::formatBalances($expectedBalancesSubYear);
  100. livewire(AccountBalances::class)
  101. ->assertFormSet([
  102. 'deferredFilters.dateRange' => $defaultDateRange,
  103. 'deferredFilters.startDate' => $defaultStartDate->toDateString(),
  104. 'deferredFilters.endDate' => $defaultEndDate->toDateString(),
  105. ])
  106. ->assertSet('filters', [
  107. 'dateRange' => $defaultDateRange,
  108. 'startDate' => $defaultStartDate->toDateString(),
  109. 'endDate' => $defaultEndDate->toDateString(),
  110. ])
  111. ->set('deferredFilters', [
  112. 'startDate' => $defaultStartDate->subYear()->startOfYear()->toDateString(),
  113. 'endDate' => $defaultEndDate->subYear()->endOfYear()->toDateString(),
  114. ])
  115. ->call('applyFilters')
  116. ->assertSeeTextInOrder([
  117. $defaultBankAccountAccount->name,
  118. $formattedExpectedBalancesSubYear->startingBalance,
  119. $formattedExpectedBalancesSubYear->debitBalance,
  120. $formattedExpectedBalancesSubYear->creditBalance,
  121. $formattedExpectedBalancesSubYear->netMovement,
  122. $formattedExpectedBalancesSubYear->endingBalance,
  123. ])
  124. ->assertReportTableData();
  125. });