. */ declare(strict_types=1); namespace Tests\Unit\TransactionRules\Actions; use FireflyIII\Models\RuleAction; use FireflyIII\Models\Transaction; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\TransactionRules\Actions\SetBudget; use Illuminate\Support\Collection; use Tests\TestCase; /** * Class SetBudgetTest */ class SetBudgetTest extends TestCase { /** * @covers \FireflyIII\TransactionRules\Actions\SetBudget */ public function testAct(): void { // get journal, remove all budgets $journal = $this->getRandomWithdrawal(); $budget = $this->getRandomBudget(); $budgetRepos = $this->mock(BudgetRepositoryInterface::class); $budgetRepos->shouldReceive('setUser'); $budgetRepos->shouldReceive('getActiveBudgets')->andReturn(new Collection([$budget])); $journal->budgets()->sync([]); $this->assertEquals(0, $journal->budgets()->count()); // fire the action: $ruleAction = new RuleAction; $ruleAction->action_value = $budget->name; $action = new SetBudget($ruleAction); $result = $action->act($journal); $this->assertTrue($result); $this->assertEquals(1, $journal->budgets()->count()); } /** * @covers \FireflyIII\TransactionRules\Actions\SetBudget */ public function testActNull(): void { // get journal, remove all budgets $journal = $this->getRandomWithdrawal(); $budget = $this->getRandomBudget(); $budgetRepos = $this->mock(BudgetRepositoryInterface::class); $budgetRepos->shouldReceive('setUser'); $budgetRepos->shouldReceive('getActiveBudgets')->andReturn(new Collection); $journal->budgets()->sync([]); $this->assertEquals(0, $journal->budgets()->count()); // fire the action: $ruleAction = new RuleAction; $ruleAction->action_value = $budget->name; $action = new SetBudget($ruleAction); $result = $action->act($journal); $this->assertFalse($result); $this->assertEquals(0, $journal->budgets()->count()); } /** * @covers \FireflyIII\TransactionRules\Actions\SetBudget */ public function testActDeposit(): void { // get journal, remove all budgets $journal = $this->getRandomDeposit(); $budget = $this->getRandomBudget(); $budgetRepos = $this->mock(BudgetRepositoryInterface::class); $budgetRepos->shouldReceive('setUser'); $budgetRepos->shouldReceive('getActiveBudgets')->andReturn(new Collection([$budget])); $journal->budgets()->detach(); $this->assertEquals(0, $journal->budgets()->count()); // fire the action: $ruleAction = new RuleAction; $ruleAction->action_value = $budget->name; $action = new SetBudget($ruleAction); $result = $action->act($journal); $this->assertTrue($result); $this->assertEquals(0, $journal->budgets()->count()); } }