diff --git a/app/Transformers/AttachmentTransformer.php b/app/Transformers/AttachmentTransformer.php index f8d521adf1..322c206a89 100644 --- a/app/Transformers/AttachmentTransformer.php +++ b/app/Transformers/AttachmentTransformer.php @@ -73,8 +73,8 @@ class AttachmentTransformer extends AbstractTransformer 'download_uri' => route('api.v1.attachments.download', [$attachment->id]), 'upload_uri' => route('api.v1.attachments.upload', [$attachment->id]), 'title' => $attachment->title, - 'mime' => $attachment->mime, 'notes' => $this->repository->getNoteText($attachment), + 'mime' => $attachment->mime, 'size' => (int)$attachment->size, 'links' => [ [ diff --git a/app/Transformers/AvailableBudgetTransformer.php b/app/Transformers/AvailableBudgetTransformer.php index 882fc81694..193ea716f4 100644 --- a/app/Transformers/AvailableBudgetTransformer.php +++ b/app/Transformers/AvailableBudgetTransformer.php @@ -25,9 +25,7 @@ namespace FireflyIII\Transformers; use FireflyIII\Models\AvailableBudget; -use League\Fractal\TransformerAbstract; use Log; -use Symfony\Component\HttpFoundation\ParameterBag; /** * Class AvailableBudgetTransformer @@ -57,17 +55,18 @@ class AvailableBudgetTransformer extends AbstractTransformer { $currency = $availableBudget->transactionCurrency; $data = [ - 'id' => (int)$availableBudget->id, - 'created_at' => $availableBudget->created_at->toAtomString(), - 'updated_at' => $availableBudget->updated_at->toAtomString(), - 'currency_id' => $currency->id, - 'currency_code' => $currency->code, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, - 'start' => $availableBudget->start_date->format('Y-m-d'), - 'end' => $availableBudget->end_date->format('Y-m-d'), - 'amount' => round($availableBudget->amount, $currency->decimal_places), - 'links' => [ + 'id' => (int)$availableBudget->id, + 'created_at' => $availableBudget->created_at->toAtomString(), + 'updated_at' => $availableBudget->updated_at->toAtomString(), + 'currency_id' => $currency->id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + 'amount' => round($availableBudget->amount, $currency->decimal_places), + 'start' => $availableBudget->start_date->format('Y-m-d'), + 'end' => $availableBudget->end_date->format('Y-m-d'), + + 'links' => [ [ 'rel' => 'self', 'uri' => '/available_budgets/' . $availableBudget->id, diff --git a/app/Transformers/BillTransformer.php b/app/Transformers/BillTransformer.php index 21387e9840..b9428efed8 100644 --- a/app/Transformers/BillTransformer.php +++ b/app/Transformers/BillTransformer.php @@ -24,15 +24,10 @@ declare(strict_types=1); namespace FireflyIII\Transformers; use Carbon\Carbon; -use FireflyIII\Helpers\Collector\TransactionCollectorInterface; use FireflyIII\Models\Bill; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use Illuminate\Support\Collection; -use League\Fractal\Resource\Collection as FractalCollection; -use League\Fractal\Resource\Item; -use League\Fractal\TransformerAbstract; use Log; -use Symfony\Component\HttpFoundation\ParameterBag; /** * Class BillTransformer @@ -66,28 +61,30 @@ class BillTransformer extends AbstractTransformer { $paidData = $this->paidData($bill); $payDates = $this->payDates($bill); + $currency = $bill->transactionCurrency; + $notes = $this->repository->getNoteText($bill); + $notes = '' === $notes ? null : $notes; $this->repository->setUser($bill->user); $data = [ - 'id' => (int)$bill->id, - 'created_at' => $bill->created_at->toAtomString(), - 'updated_at' => $bill->updated_at->toAtomString(), - 'currency_id' => $bill->transaction_currency_id, - 'currency_code' => $bill->transactionCurrency->code, - 'currency_symbol' => $bill->transactionCurrency->symbol, - 'currency_decimal_places' => $bill->transactionCurrency->decimal_places, - 'name' => $bill->name, - 'amount_min' => round((float)$bill->amount_min, 2), - 'amount_max' => round((float)$bill->amount_max, 2), - 'date' => $bill->date->format('Y-m-d'), - 'repeat_freq' => $bill->repeat_freq, - 'skip' => (int)$bill->skip, - 'active' => $bill->active, - 'notes' => $this->repository->getNoteText($bill), - 'next_expected_match' => $paidData['next_expected_match'], - 'pay_dates' => $payDates, - 'paid_dates' => $paidData['paid_dates'], - - 'links' => [ + 'id' => (int)$bill->id, + 'created_at' => $bill->created_at->toAtomString(), + 'updated_at' => $bill->updated_at->toAtomString(), + 'currency_id' => $bill->transaction_currency_id, + 'currency_code' => $currency->code, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + 'name' => $bill->name, + 'amount_min' => round((float)$bill->amount_min, $currency->decimal_places), + 'amount_max' => round((float)$bill->amount_max, $currency->decimal_places), + 'date' => $bill->date->format('Y-m-d'), + 'repeat_freq' => $bill->repeat_freq, + 'skip' => (int)$bill->skip, + 'active' => $bill->active, + 'notes' => $notes, + 'next_expected_match' => $paidData['next_expected_match'], + 'pay_dates' => $payDates, + 'paid_dates' => $paidData['paid_dates'], + 'links' => [ [ 'rel' => 'self', 'uri' => '/bills/' . $bill->id, @@ -161,10 +158,7 @@ class BillTransformer extends AbstractTransformer ]; } - /** @var BillRepositoryInterface $repository */ - $repository = app(BillRepositoryInterface::class); - $repository->setUser($bill->user); - $set = $repository->getPaidDatesInRange($bill, $this->parameters->get('start'), $this->parameters->get('end')); + $set = $this->repository->getPaidDatesInRange($bill, $this->parameters->get('start'), $this->parameters->get('end')); Log::debug(sprintf('Count %d entries in getPaidDatesInRange()', $set->count())); $simple = $set->map( function (Carbon $date) { @@ -179,7 +173,7 @@ class BillTransformer extends AbstractTransformer $nextMatch = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); } $end = app('navigation')->addPeriod($nextMatch, $bill->repeat_freq, $bill->skip); - $journalCount = $repository->getPaidDatesInRange($bill, $nextMatch, $end)->count(); + $journalCount = $this->repository->getPaidDatesInRange($bill, $nextMatch, $end)->count(); if ($journalCount > 0) { $nextMatch = clone $end; } diff --git a/tests/Unit/Transformers/AvailableBudgetTransformerTest.php b/tests/Unit/Transformers/AvailableBudgetTransformerTest.php new file mode 100644 index 0000000000..d25643820e --- /dev/null +++ b/tests/Unit/Transformers/AvailableBudgetTransformerTest.php @@ -0,0 +1,59 @@ +. + */ + +declare(strict_types=1); + +namespace Tests\Unit\Transformers; + +use FireflyIII\Models\AvailableBudget; +use FireflyIII\Transformers\AvailableBudgetTransformer; +use Symfony\Component\HttpFoundation\ParameterBag; +use Tests\TestCase; + +/** + * Class AvailableBudgetTransformerTest + */ +class AvailableBudgetTransformerTest extends TestCase +{ + /** + * Test basic transformer + * + * @covers \FireflyIII\Transformers\AvailableBudgetTransformer + */ + public function testBasic(): void + { + /** @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']); + + } + +} diff --git a/tests/Unit/Transformers/BillTransformerTest.php b/tests/Unit/Transformers/BillTransformerTest.php index 5adf47d49b..4367edccff 100644 --- a/tests/Unit/Transformers/BillTransformerTest.php +++ b/tests/Unit/Transformers/BillTransformerTest.php @@ -43,66 +43,65 @@ class BillTransformerTest extends TestCase */ public function testBasic(): void { + $repository = $this->mock(BillRepositoryInterface::class); + $repository->shouldReceive('setUser')->atLeast()->once(); + $repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn(''); - $bill = Bill::create( - [ - 'user_id' => $this->user()->id, - 'name' => 'Some bill ' . random_int(1, 10000), - 'match' => 'word,' . random_int(1, 10000), - 'amount_min' => 12.34, - 'amount_max' => 45.67, - 'transaction_currency_id' => 1, - 'date' => '2018-01-02', - 'repeat_freq' => 'weekly', - 'skip' => 0, - 'active' => 1, - ] - ); - $transformer = new BillTransformer(new ParameterBag); - $result = $transformer->transform($bill); + /** @var Bill $bill */ + $bill = Bill::first(); + $transformer = app(BillTransformer::class); + $transformer->setParameters(new ParameterBag); + $result = $transformer->transform($bill); + + // assert fields. $this->assertEquals($bill->name, $result['name']); - $this->assertTrue($result['active']); + $this->assertEquals($bill->transactionCurrency->decimal_places, $result['currency_decimal_places']); + $this->assertEquals($bill->active, $result['active']); + $this->assertNull($result['notes']); } /** - * Coverage for dates. + * Basic coverage * * @covers \FireflyIII\Transformers\BillTransformer */ public function testWithDates(): void { - // mock stuff $repository = $this->mock(BillRepositoryInterface::class); - $repository->shouldReceive('setUser')->andReturnSelf(); - $repository->shouldReceive('getNoteText')->andReturn('Hi there'); - $repository->shouldReceive('getPaidDatesInRange')->andReturn(new Collection([new Carbon('2018-01-02')])); - $bill = Bill::create( - [ - 'user_id' => $this->user()->id, - 'name' => 'Some bill ' . random_int(1, 10000), - 'match' => 'word,' . random_int(1, 10000), - 'amount_min' => 12.34, - 'amount_max' => 45.67, - 'date' => '2018-01-02', - 'transaction_currency_id' => 1, - 'repeat_freq' => 'monthly', - 'skip' => 0, - 'active' => 1, + $repository->shouldReceive('setUser')->atLeast()->once(); + $repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn(''); + + // repos should also receive call for dates: + $list = new Collection( + [new Carbon('2018-01-02'), new Carbon('2018-01-09'), new Carbon('2018-01-16'), + new Carbon('2018-01-21'), new Carbon('2018-01-30'), ] ); - $parameters = new ParameterBag(); + $repository->shouldReceive('getPaidDatesInRange')->atLeast()->once()->andReturn($list); + + $parameters = new ParameterBag; $parameters->set('start', new Carbon('2018-01-01')); $parameters->set('end', new Carbon('2018-01-31')); - $transformer = new BillTransformer($parameters); - $result = $transformer->transform($bill); + /** @var Bill $bill */ + $bill = Bill::first(); + $transformer = app(BillTransformer::class); + $transformer->setParameters($parameters); + $result = $transformer->transform($bill); + + // assert fields. $this->assertEquals($bill->name, $result['name']); - $this->assertTrue($result['active']); - $this->assertCount(1, $result['pay_dates']); - $this->assertEquals('2018-01-02', $result['pay_dates'][0]); - $this->assertCount(1, $result['paid_dates']); - $this->assertEquals('2018-01-02', $result['paid_dates'][0]); + $this->assertEquals($bill->transactionCurrency->decimal_places, $result['currency_decimal_places']); + $this->assertEquals($bill->active, $result['active']); + $this->assertNull($result['notes']); + + $this->assertEquals('2018-03-01', $result['next_expected_match']); + $this->assertEquals(['2018-01-01'], $result['pay_dates']); + $this->assertEquals( + ['2018-01-02', '2018-01-09', '2018-01-16', '2018-01-21', '2018-01-30',] + , $result['paid_dates'] + ); } }