diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index f91c99a4b0..6d2cfa8088 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -79,6 +79,7 @@ class BudgetController extends Controller public function budget(Budget $budget): JsonResponse { $start = $this->repository->firstUseDate($budget); + /** @var Carbon $end */ $end = session('end', new Carbon); $cache = new CacheProperties(); $cache->addProperty($start); diff --git a/tests/Unit/TransactionRules/Triggers/ToAccountEndsTest.php b/tests/Unit/TransactionRules/Triggers/ToAccountEndsTest.php index 022d4fdaf0..32617ec83d 100644 --- a/tests/Unit/TransactionRules/Triggers/ToAccountEndsTest.php +++ b/tests/Unit/TransactionRules/Triggers/ToAccountEndsTest.php @@ -24,6 +24,7 @@ namespace Tests\Unit\TransactionRules\Triggers; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Triggers\ToAccountEnds; +use Log; use Tests\TestCase; /** @@ -36,14 +37,26 @@ class ToAccountEndsTest extends TestCase */ public function testTriggered(): void { - $count = 0; - $account = null; - while ($count === 0 && $account === null) { - $journal = TransactionJournal::inRandomOrder()->whereNull('deleted_at')->first(); - $count = $journal->transactions()->where('amount', '>', 0)->count(); + $loops = 0; // FINAL LOOP METHOD. + do { + /** @var TransactionJournal $journal */ + $journal = $this->user()->transactionJournals()->inRandomOrder()->whereNull('deleted_at')->first(); $transaction = $journal->transactions()->where('amount', '>', 0)->first(); $account = $transaction->account; - } + $count = $journal->transactions()->count(); + $name = $account->name ?? ''; + + Log::debug(sprintf('Loop: %d, transaction count: %d, account is null: %d, name = "%s"', $loops, $count, (int)null === $account, $name)); + + $loops++; + + // do this while the following is untrue: + // 1) account is not null, + // 2) journal has two transactions + // 3) loops is less than 30 + // 4) $name is longer than 3 + } while (!(null !== $account && 2 === $count && $loops < 30 && \strlen($name) > 3)); + $trigger = ToAccountEnds::makeFromStrings(substr($account->name, -3), false); $result = $trigger->triggered($journal); @@ -55,13 +68,25 @@ class ToAccountEndsTest extends TestCase */ public function testTriggeredLonger(): void { - $count = 0; - while ($count === 0) { - $journal = TransactionJournal::inRandomOrder()->whereNull('deleted_at')->first(); - $count = $journal->transactions()->where('amount', '>', 0)->count(); + $loops = 0; // FINAL LOOP METHOD. + do { + /** @var TransactionJournal $journal */ + $journal = $this->user()->transactionJournals()->inRandomOrder()->whereNull('deleted_at')->first(); $transaction = $journal->transactions()->where('amount', '>', 0)->first(); - } - $account = $transaction->account; + $account = $transaction->account; + $count = $journal->transactions()->count(); + $name = $account->name ?? ''; + + Log::debug(sprintf('Loop: %d, transaction count: %d, account is null: %d, name = "%s"', $loops, $count, (int)null === $account, $name)); + + $loops++; + + // do this while the following is untrue: + // 1) account is not null, + // 2) journal has two transactions + // 3) loops is less than 30 + // 4) $name is longer than 3 + } while (!(null !== $account && 2 === $count && $loops < 30 && \strlen($name) > 3)); $trigger = ToAccountEnds::makeFromStrings('bla-bla-bla' . $account->name, false); $result = $trigger->triggered($journal); @@ -73,11 +98,25 @@ class ToAccountEndsTest extends TestCase */ public function testTriggeredNot(): void { - $count = 0; - while ($count === 0) { - $journal = TransactionJournal::inRandomOrder()->whereNull('deleted_at')->first(); - $count = $journal->transactions()->where('amount', '>', 0)->count(); - } + $loops = 0; // FINAL LOOP METHOD. + do { + /** @var TransactionJournal $journal */ + $journal = $this->user()->transactionJournals()->inRandomOrder()->whereNull('deleted_at')->first(); + $transaction = $journal->transactions()->where('amount', '>', 0)->first(); + $account = $transaction->account; + $count = $journal->transactions()->count(); + $name = $account->name ?? ''; + + Log::debug(sprintf('Loop: %d, transaction count: %d, account is null: %d, name = "%s"', $loops, $count, (int)null === $account, $name)); + + $loops++; + + // do this while the following is untrue: + // 1) account is not null, + // 2) journal has two transactions + // 3) loops is less than 30 + // 4) $name is longer than 3 + } while (!(null !== $account && 2 === $count && $loops < 30 && \strlen($name) > 3)); $trigger = ToAccountEnds::makeFromStrings((string)random_int(1, 1234), false); $result = $trigger->triggered($journal);