Files
firefly-iii/tests/Unit/Transformers/AvailableBudgetTransformerTest.php

133 lines
5.0 KiB
PHP
Raw Normal View History

2018-12-19 06:06:01 +01:00
<?php
/**
* AvailableBudgetTransformerTest.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
2018-12-19 06:06:01 +01:00
*
* This file is part of Firefly III (https://github.com/firefly-iii).
2018-12-19 06:06:01 +01:00
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
2018-12-19 06:06:01 +01:00
*
* This program is distributed in the hope that it will be useful,
2018-12-19 06:06:01 +01:00
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
2018-12-19 06:06:01 +01:00
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
2018-12-19 06:06:01 +01:00
*/
declare(strict_types=1);
namespace Tests\Unit\Transformers;
2019-08-03 04:46:47 +02:00
use Carbon\Carbon;
2018-12-19 06:06:01 +01:00
use FireflyIII\Models\AvailableBudget;
2019-08-03 04:46:47 +02:00
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
2019-09-06 17:19:21 +02:00
use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
2018-12-19 06:06:01 +01:00
use FireflyIII\Transformers\AvailableBudgetTransformer;
2019-08-03 04:46:47 +02:00
use Illuminate\Support\Collection;
use Log;
2018-12-19 06:06:01 +01:00
use Symfony\Component\HttpFoundation\ParameterBag;
use Tests\TestCase;
/**
* Class AvailableBudgetTransformerTest
2019-08-17 10:48:28 +02:00
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
2018-12-19 06:06:01 +01:00
*/
class AvailableBudgetTransformerTest extends TestCase
{
/**
*
*/
public function setUp(): void
{
parent::setUp();
2019-04-09 20:05:20 +02:00
Log::info(sprintf('Now in %s.', get_class($this)));
}
2018-12-19 06:06:01 +01:00
/**
* Test basic transformer
*
* @covers \FireflyIII\Transformers\AvailableBudgetTransformer
*/
public function testBasic(): void
{
2019-09-06 17:19:21 +02:00
$repository = $this->mock(BudgetRepositoryInterface::class);
$opsRepository = $this->mock(OperationsRepositoryInterface::class);
$nbRepos = $this->mock(NoBudgetRepositoryInterface::class);
2019-08-03 04:46:47 +02:00
$repository->shouldReceive('setUser')->atLeast()->once();
2018-12-19 06:06:01 +01:00
/** @var AvailableBudget $availableBudget */
$availableBudget = AvailableBudget::first();
$currency = $availableBudget->transactionCurrency;
// make transformer
$transformer = app(AvailableBudgetTransformer::class);
$transformer->setParameters(new ParameterBag);
$result = $transformer->transform($availableBudget);
// test results
$this->assertEquals($availableBudget->id, $result['id']);
$this->assertEquals($currency->id, $result['currency_id']);
$this->assertEquals($availableBudget->start_date->format('Y-m-d'), $result['start']);
$this->assertEquals(round($availableBudget->amount, 2), $result['amount']);
2019-08-03 04:46:47 +02:00
}
/**
* Test basic transformer
*
* @covers \FireflyIII\Transformers\AvailableBudgetTransformer
*/
public function testBasicDates(): void
{
$euro = $this->getEuro();
$data= [
[
'currency_id' => $euro->id,
'currency_code' => $euro->code,
'currency_symbol' => $euro->symbol,
'currency_decimal_places' => $euro->decimal_places,
'amount' => '12.45',
]
];
2019-09-06 17:19:21 +02:00
$budget = $this->getRandomBudget();
$repository = $this->mock(BudgetRepositoryInterface::class);
$opsRepository = $this->mock(OperationsRepositoryInterface::class);
$nbRepos = $this->mock(NoBudgetRepositoryInterface::class);
2019-08-03 04:46:47 +02:00
$repository->shouldReceive('setUser')->atLeast()->once();
$repository->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget]));
2019-09-06 17:19:21 +02:00
$opsRepository->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn($data);
$nbRepos->shouldReceive('spentInPeriodWoBudgetMc')->atLeast()->once()->andReturn($data);
2019-08-03 04:46:47 +02:00
// spentInPeriodWoBudgetMc
$start = new Carbon;
$end = new Carbon;
$parameterBag = new ParameterBag;
$parameterBag->set('start', $start);
$parameterBag->set('end', $end);
2018-12-19 06:06:01 +01:00
2019-08-03 04:46:47 +02:00
/** @var AvailableBudget $availableBudget */
$availableBudget = AvailableBudget::first();
$currency = $availableBudget->transactionCurrency;
// make transformer
$transformer = app(AvailableBudgetTransformer::class);
$transformer->setParameters($parameterBag);
$result = $transformer->transform($availableBudget);
// test results
$this->assertEquals($availableBudget->id, $result['id']);
$this->assertEquals($currency->id, $result['currency_id']);
$this->assertEquals($availableBudget->start_date->format('Y-m-d'), $result['start']);
$this->assertEquals(round($availableBudget->amount, 2), $result['amount']);
2018-12-19 06:06:01 +01:00
}
}