. */ declare(strict_types=1); namespace Tests\Unit\Factory; use FireflyIII\Factory\PiggyBankEventFactory; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Models\PiggyBankRepetition; use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Tests\TestCase; /** * Class PiggyBankEventFactoryTest */ class PiggyBankEventFactoryTest extends TestCase { /** * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateAmountZero(): void { /** @var TransactionJournal $transfer */ $transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first(); $piggy = $this->user()->piggyBanks()->first(); $repetition = PiggyBankRepetition::first(); $repos = $this->mock(PiggyBankRepositoryInterface::class); /** @var PiggyBankEventFactory $factory */ $factory = app(PiggyBankEventFactory::class); // mock: $repos->shouldReceive('setUser'); $repos->shouldReceive('getRepetition')->andReturn($repetition); $repos->shouldReceive('getExactAmount')->andReturn('0'); $this->assertNull($factory->create($transfer, $piggy)); } /** * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateNoPiggy(): void { /** @var TransactionJournal $transfer */ $transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first(); /** @var PiggyBankEventFactory $factory */ $factory = app(PiggyBankEventFactory::class); $this->assertNull($factory->create($transfer, null)); } /** * Test for withdrawal where piggy has no repetition. * * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateNoRep(): void { /** @var TransactionJournal $transfer */ $transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first(); $piggy = $this->user()->piggyBanks()->first(); $repos = $this->mock(PiggyBankRepositoryInterface::class); /** @var PiggyBankEventFactory $factory */ $factory = app(PiggyBankEventFactory::class); // mock: $repos->shouldReceive('setUser'); $repos->shouldReceive('getRepetition')->andReturn(null); $repos->shouldReceive('getExactAmount')->andReturn('0'); $this->assertNull($factory->create($transfer, $piggy)); } /** * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateNotTransfer(): void { /** @var TransactionJournal $deposit */ $deposit = $this->user()->transactionJournals()->where('transaction_type_id', 2)->first(); $piggy = $this->user()->piggyBanks()->first(); /** @var PiggyBankEventFactory $factory */ $factory = app(PiggyBankEventFactory::class); $this->assertNull($factory->create($deposit, $piggy)); } /** * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateSuccess(): void { /** @var TransactionJournal $transfer */ $transfer = $this->user()->transactionJournals()->where('transaction_type_id', 3)->first(); $piggy = $this->user()->piggyBanks()->first(); $repetition = PiggyBankRepetition::first(); $event = PiggyBankEvent::first(); $repos = $this->mock(PiggyBankRepositoryInterface::class); /** @var PiggyBankEventFactory $factory */ $factory = app(PiggyBankEventFactory::class); // mock: $repos->shouldReceive('setUser'); $repos->shouldReceive('getRepetition')->andReturn($repetition); $repos->shouldReceive('getExactAmount')->andReturn('5'); $repos->shouldReceive('addAmountToRepetition')->once(); $repos->shouldReceive('createEventWithJournal')->once()->andReturn($event); $result = $factory->create($transfer, $piggy); $this->assertEquals($result->id, $event->id); } }