Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

AccountBalancesReportTest.php 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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 an account balances report for the current fiscal year', function () {
  8. $testCompany = $this->testCompany;
  9. $reportDates = ReportDateFactory::create($testCompany);
  10. $defaultDateRange = $reportDates->defaultDateRange;
  11. $defaultStartDate = $reportDates->defaultStartDate->toImmutable();
  12. $defaultEndDate = $reportDates->defaultEndDate->toImmutable();
  13. $depositAmount = 1000;
  14. $withdrawalAmount = 1000;
  15. $depositCount = 10;
  16. $withdrawalCount = 10;
  17. Transaction::factory()
  18. ->forDefaultBankAccount()
  19. ->forUncategorizedRevenue()
  20. ->asDeposit($depositAmount)
  21. ->count($depositCount)
  22. ->state([
  23. 'posted_at' => $defaultStartDate->subWeek(),
  24. ])
  25. ->create();
  26. Transaction::factory()
  27. ->forDefaultBankAccount()
  28. ->forUncategorizedExpense()
  29. ->asWithdrawal($withdrawalAmount)
  30. ->count($withdrawalCount)
  31. ->state([
  32. 'posted_at' => $defaultEndDate,
  33. ])
  34. ->create();
  35. $defaultBankAccountAccount = $testCompany->default->bankAccount->account;
  36. $fields = $defaultBankAccountAccount->category->getRelevantBalanceFields();
  37. $expectedBalances = Accounting::getBalances(
  38. $defaultBankAccountAccount,
  39. $defaultStartDate->toDateString(),
  40. $defaultEndDate->toDateString(),
  41. $fields
  42. );
  43. $formattedExpectedBalances = formatReportBalances($expectedBalances);
  44. livewire(AccountBalances::class)
  45. ->assertFormSet([
  46. 'deferredFilters.dateRange' => $defaultDateRange,
  47. 'deferredFilters.startDate' => $defaultStartDate->toDateTimeString(),
  48. 'deferredFilters.endDate' => $defaultEndDate->toDateTimeString(),
  49. ])
  50. ->assertSet('filters', [
  51. 'dateRange' => $defaultDateRange,
  52. 'startDate' => $defaultStartDate->toDateString(),
  53. 'endDate' => $defaultEndDate->toDateString(),
  54. ])
  55. ->call('applyFilters')
  56. ->assertSeeTextInOrder([
  57. $defaultBankAccountAccount->name,
  58. $formattedExpectedBalances->startingBalance,
  59. $formattedExpectedBalances->debitBalance,
  60. $formattedExpectedBalances->creditBalance,
  61. $formattedExpectedBalances->netMovement,
  62. $formattedExpectedBalances->endingBalance,
  63. ])
  64. ->assertReportTableData();
  65. });
  66. it('correctly builds an account balances report for the previous fiscal year', function () {
  67. $testCompany = $this->testCompany;
  68. $reportDatesDTO = ReportDateFactory::create($testCompany);
  69. $defaultDateRange = $reportDatesDTO->defaultDateRange;
  70. $defaultStartDate = $reportDatesDTO->defaultStartDate->toImmutable();
  71. $defaultEndDate = $reportDatesDTO->defaultEndDate->toImmutable();
  72. $depositAmount = 1000;
  73. $withdrawalAmount = 1000;
  74. $depositCount = 10;
  75. $withdrawalCount = 10;
  76. Transaction::factory()
  77. ->forDefaultBankAccount()
  78. ->forUncategorizedRevenue()
  79. ->asDeposit($depositAmount)
  80. ->count($depositCount)
  81. ->state([
  82. 'posted_at' => $defaultStartDate->subWeek(),
  83. ])
  84. ->create();
  85. Transaction::factory()
  86. ->forDefaultBankAccount()
  87. ->forUncategorizedExpense()
  88. ->asWithdrawal($withdrawalAmount)
  89. ->count($withdrawalCount)
  90. ->state([
  91. 'posted_at' => $defaultEndDate,
  92. ])
  93. ->create();
  94. $defaultBankAccountAccount = $testCompany->default->bankAccount->account;
  95. $fields = $defaultBankAccountAccount->category->getRelevantBalanceFields();
  96. $expectedBalancesSubYear = Accounting::getBalances(
  97. $defaultBankAccountAccount,
  98. $defaultStartDate->subYear()->startOfYear()->toDateString(),
  99. $defaultEndDate->subYear()->endOfYear()->toDateString(),
  100. $fields
  101. );
  102. $formattedExpectedBalancesSubYear = formatReportBalances($expectedBalancesSubYear);
  103. livewire(AccountBalances::class)
  104. ->assertFormSet([
  105. 'deferredFilters.dateRange' => $defaultDateRange,
  106. 'deferredFilters.startDate' => $defaultStartDate->toDateTimeString(),
  107. 'deferredFilters.endDate' => $defaultEndDate->toDateTimeString(),
  108. ])
  109. ->assertSet('filters', [
  110. 'dateRange' => $defaultDateRange,
  111. 'startDate' => $defaultStartDate->toDateString(),
  112. 'endDate' => $defaultEndDate->toDateString(),
  113. ])
  114. ->set('deferredFilters', [
  115. 'startDate' => $defaultStartDate->subYear()->startOfYear()->toDateTimeString(),
  116. 'endDate' => $defaultEndDate->subYear()->endOfYear()->toDateTimeString(),
  117. ])
  118. ->call('applyFilters')
  119. ->assertSeeTextInOrder([
  120. $defaultBankAccountAccount->name,
  121. $formattedExpectedBalancesSubYear->startingBalance,
  122. $formattedExpectedBalancesSubYear->debitBalance,
  123. $formattedExpectedBalancesSubYear->creditBalance,
  124. $formattedExpectedBalancesSubYear->netMovement,
  125. $formattedExpectedBalancesSubYear->endingBalance,
  126. ])
  127. ->assertReportTableData();
  128. });