. */ declare(strict_types=1); namespace Tests\Unit\Factory; use FireflyIII\Factory\PiggyBankEventFactory; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Models\PiggyBankRepetition; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use Log; use Tests\TestCase; /** * Class PiggyBankEventFactoryTest * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.TooManyPublicMethods) */ class PiggyBankEventFactoryTest extends TestCase { /** * */ public function setUp(): void { parent::setUp(); Log::info(sprintf('Now in %s.', get_class($this))); } /** * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateAmountZero(): void { $transfer = $this->getRandomTransfer(); $piggy = $this->user()->piggyBanks()->inRandomOrder()->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 { $this->mock(PiggyBankRepositoryInterface::class); $transfer = $this->getRandomTransfer(); /** @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 { $transfer = $this->getRandomTransfer(); $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'); Log::warning('The following error is part of a test.'); $this->assertNull($factory->create($transfer, $piggy)); } /** * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateNotTransfer(): void { $this->mock(PiggyBankRepositoryInterface::class); $deposit = $this->getRandomDeposit(); $piggy = $this->user()->piggyBanks()->first(); /** @var PiggyBankEventFactory $factory */ $factory = app(PiggyBankEventFactory::class); Log::warning('The following error is part of a test.'); $this->assertNull($factory->create($deposit, $piggy)); } /** * @covers \FireflyIII\Factory\PiggyBankEventFactory */ public function testCreateSuccess(): void { $transfer = $this->getRandomTransfer(); $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->assertNotnull($result); $this->assertEquals($result->id, $event->id); } }