. */ declare(strict_types=1); namespace Tests\Unit\Transformers; use FireflyIII\Models\Account; use FireflyIII\Models\AccountMeta; use FireflyIII\Models\Note; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Transformers\PiggyBankTransformer; use Symfony\Component\HttpFoundation\ParameterBag; use Tests\TestCase; /** * Class PiggyBankTransformerTest */ class PiggyBankTransformerTest extends TestCase { /** * Test basic transformer. * * @covers \FireflyIII\Transformers\PiggyBankTransformer::transform() */ public function testBasic(): void { // mock repository: $repository = $this->mock(PiggyBankRepositoryInterface::class); $repository->shouldReceive('setUser')->once(); $repository->shouldReceive('getCurrentAmount')->andReturn('12.34')->once(); // make new account and piggy $account = Account::create( [ 'user_id' => $this->user()->id, 'account_type_id' => 3, // asset account 'name' => 'Random name #' . random_int(1, 10000), 'virtual_balance' => 12.34, 'iban' => 'NL85ABNA0466812694', 'active' => 1, 'encrypted' => 0, ] ); $piggy = PiggyBank::create( [ 'account_id' => $account->id, 'name' => 'Some random piggy #' . random_int(1, 10000), 'targetamount' => '1000', 'startdate' => '2018-01-01', 'targetdate' => '2018-01-31', 'order' => 1, 'active' => 1, ] ); $transformer = new PiggyBankTransformer(new ParameterBag); $result = $transformer->transform($piggy); $this->assertTrue($result['active']); $this->assertEquals(12.34, $result['current_amount']); $this->assertEquals($piggy->name, $result['name']); $this->assertEquals('', $result['notes']); } /** * Test basic transformer with currency preference * * @covers \FireflyIII\Transformers\PiggyBankTransformer::transform() */ public function testBasicWithCurrency(): void { // mock repository. $currencyRepos = $this->mock(CurrencyRepositoryInterface::class); $currencyRepos->shouldReceive('setUser')->once(); $currencyRepos->shouldReceive('findNull')->withArgs([1])->andReturn(TransactionCurrency::find(1))->once(); // mock repository: $repository = $this->mock(PiggyBankRepositoryInterface::class); $repository->shouldReceive('setUser')->once(); $repository->shouldReceive('getCurrentAmount')->andReturn('12.34')->once(); // make new account and piggy $account = Account::create( [ 'user_id' => $this->user()->id, 'account_type_id' => 3, // asset account 'name' => 'Random name #' . random_int(1, 10000), 'virtual_balance' => 12.34, 'iban' => 'NL85ABNA0466812694', 'active' => 1, 'encrypted' => 0, ] ); // meta $accountMeta = AccountMeta::create( [ 'account_id' => $account->id, 'name' => 'currency_id', 'data' => 1, ] ); $piggy = PiggyBank::create( [ 'account_id' => $account->id, 'name' => 'Some random piggy #' . random_int(1, 10000), 'targetamount' => '1000', 'startdate' => '2018-01-01', 'targetdate' => '2018-01-31', 'order' => 1, 'active' => 1, ] ); $transformer = new PiggyBankTransformer(new ParameterBag); $result = $transformer->transform($piggy); $this->assertTrue($result['active']); $this->assertEquals(12.34, $result['current_amount']); $this->assertEquals($piggy->name, $result['name']); $this->assertEquals('', $result['notes']); } /** * Test basic transformer with currency preference and a note * * @covers \FireflyIII\Transformers\PiggyBankTransformer::transform() */ public function testBasicWithCurrencyAndNote(): void { // mock repository. $currencyRepos = $this->mock(CurrencyRepositoryInterface::class); $currencyRepos->shouldReceive('setUser')->once(); $currencyRepos->shouldReceive('findNull')->withArgs([1])->andReturn(TransactionCurrency::find(1))->once(); // mock repository: $repository = $this->mock(PiggyBankRepositoryInterface::class); $repository->shouldReceive('setUser')->once(); $repository->shouldReceive('getCurrentAmount')->andReturn('12.34')->once(); // make new account and piggy $account = Account::create( [ 'user_id' => $this->user()->id, 'account_type_id' => 3, // asset account 'name' => 'Random name #' . random_int(1, 10000), 'virtual_balance' => 12.34, 'iban' => 'NL85ABNA0466812694', 'active' => 1, 'encrypted' => 0, ] ); // meta $accountMeta = AccountMeta::create( [ 'account_id' => $account->id, 'name' => 'currency_id', 'data' => 1, ] ); $piggy = PiggyBank::create( [ 'account_id' => $account->id, 'name' => 'Some random piggy #' . random_int(1, 10000), 'targetamount' => '1000', 'startdate' => '2018-01-01', 'targetdate' => '2018-01-31', 'order' => 1, 'active' => 1, ] ); // note: Note::create( [ 'noteable_id' => $piggy->id, 'noteable_type' => PiggyBank::class, 'title' => null, 'text' => 'I am a note.', ] ); $transformer = new PiggyBankTransformer(new ParameterBag); $result = $transformer->transform($piggy); $this->assertTrue($result['active']); $this->assertEquals(12.34, $result['current_amount']); $this->assertEquals($piggy->name, $result['name']); $this->assertEquals('I am a note.', $result['notes']); } }