. */ declare(strict_types=1); namespace Tests\Unit\TransactionRules\Triggers; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\TransactionRules\Triggers\HasAnyBudget; use Tests\TestCase; /** * Class HasAnyBudgetTest */ class HasAnyBudgetTest extends TestCase { /** * @covers \FireflyIII\TransactionRules\Triggers\HasAnyBudget::triggered */ public function testTriggered(): void { $journal = TransactionJournal::inRandomOrder()->whereNull('deleted_at')->first(); $budget = $journal->user->budgets()->first(); $journal->budgets()->detach(); $journal->budgets()->save($budget); $this->assertEquals(1, $journal->budgets()->count()); $trigger = HasAnyBudget::makeFromStrings('', false); $result = $trigger->triggered($journal); $this->assertTrue($result); } /** * @covers \FireflyIII\TransactionRules\Triggers\HasAnyBudget::triggered */ public function testTriggeredNot(): void { do { /** @var TransactionJournal $journal */ $journal = TransactionJournal::inRandomOrder()->whereNull('deleted_at')->first(); $count = $journal->transactions()->count(); } while ($count !== 0); $journal->budgets()->detach(); $this->assertEquals(0, $journal->budgets()->count()); // also detach all transactions: /** @var Transaction $transaction */ foreach ($journal->transactions()->get() as $transaction) { $transaction->budgets()->detach(); } $trigger = HasAnyBudget::makeFromStrings('', false); $result = $trigger->triggered($journal); $this->assertFalse($result); } /** * @covers \FireflyIII\TransactionRules\Triggers\HasAnyBudget::triggered */ public function testTriggeredTransactions(): void { $journal = TransactionJournal::inRandomOrder()->whereNull('deleted_at')->first(); $budget = $journal->user->budgets()->first(); $journal->budgets()->detach(); $this->assertEquals(0, $journal->budgets()->count()); // append to transaction foreach ($journal->transactions()->get() as $index => $transaction) { $transaction->budgets()->detach(); if (0 === $index) { $transaction->budgets()->save($budget); } } $trigger = HasAnyBudget::makeFromStrings('', false); $result = $trigger->triggered($journal); $this->assertTrue($result); } /** * @covers \FireflyIII\TransactionRules\Triggers\HasAnyBudget::willMatchEverything */ public function testWillMatchEverything(): void { $value = ''; $result = HasAnyBudget::willMatchEverything($value); $this->assertFalse($result); } }