diff --git a/app/Exceptions/GracefulNotFoundHandler.php b/app/Exceptions/GracefulNotFoundHandler.php index 87ab51a811..2866feaf1a 100644 --- a/app/Exceptions/GracefulNotFoundHandler.php +++ b/app/Exceptions/GracefulNotFoundHandler.php @@ -52,6 +52,9 @@ class GracefulNotFoundHandler extends ExceptionHandler public function render($request, Exception $exception) { $route = $request->route(); + if(null === $route) { + return parent::render($request, $exception); + } $name = $route->getName(); if (!auth()->check()) { return parent::render($request, $exception); diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index e18108908d..fbcfdde080 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -431,31 +431,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return $savePerMonth; } - /** - * @param PiggyBankEvent $event - * - * @return int|null - */ - public function getTransactionWithEvent(PiggyBankEvent $event): ?int - { - $journal = $event->transactionJournal; - if (null === $journal) { - return null; - } - if ((float)$event->amount < 0) { - $transaction = $journal->transactions()->where('amount', '<', 0)->first(); - - return $transaction->id ?? null; - } - if ((float)$event->amount > 0) { - $transaction = $journal->transactions()->where('amount', '>', 0)->first(); - - return $transaction->id ?? null; - } - - return null; - } - /** * Get for piggy account what is left to put in piggies. * diff --git a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php index e5d784760f..631d522521 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php +++ b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php @@ -199,13 +199,6 @@ interface PiggyBankRepositoryInterface */ public function getSuggestedMonthlyAmount(PiggyBank $piggyBank): string; - /** - * @param PiggyBankEvent $event - * - * @return int|null - */ - public function getTransactionWithEvent(PiggyBankEvent $event): ?int; - /** * Get for piggy account what is left to put in piggies. * diff --git a/app/Support/Import/Routine/File/ImportableConverter.php b/app/Support/Import/Routine/File/ImportableConverter.php index dd09471b85..c88822811f 100644 --- a/app/Support/Import/Routine/File/ImportableConverter.php +++ b/app/Support/Import/Routine/File/ImportableConverter.php @@ -156,7 +156,7 @@ class ImportableConverter 'transactions' => [ [ 'user' => $this->importJob->user_id, - 'type' => $transactionType, + 'type' => strtolower($transactionType), 'date' => $this->convertDateValue($importable->date) ?? Carbon::now()->format('Y-m-d H:i:s'), 'order' => 0, diff --git a/app/Support/Import/Routine/Spectre/StageImportDataHandler.php b/app/Support/Import/Routine/Spectre/StageImportDataHandler.php index 7bc0552663..e0849fff7d 100644 --- a/app/Support/Import/Routine/Spectre/StageImportDataHandler.php +++ b/app/Support/Import/Routine/Spectre/StageImportDataHandler.php @@ -81,6 +81,7 @@ class StageImportDataHandler } $totalSet = array_merge(...$totalSet); Log::debug(sprintf('Found %d transactions in total.', count($totalSet))); + $this->repository->setTransactions($this->importJob, $totalSet); } diff --git a/app/Transformers/PiggyBankEventTransformer.php b/app/Transformers/PiggyBankEventTransformer.php index 87241602f0..dd9f1d40ab 100644 --- a/app/Transformers/PiggyBankEventTransformer.php +++ b/app/Transformers/PiggyBankEventTransformer.php @@ -82,8 +82,7 @@ class PiggyBankEventTransformer extends AbstractTransformer } // get associated journal and transaction, if any: - $journalId = $event->transaction_journal_id; - $transactionId = $this->piggyRepos->getTransactionWithEvent($event); + $journalId = (int)$event->transaction_journal_id; $data = [ 'id' => (int)$event->id, @@ -94,8 +93,7 @@ class PiggyBankEventTransformer extends AbstractTransformer 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, 'currency_decimal_places' => $currency->decimal_places, - 'journal_id' => $journalId, - 'transaction_id' => $transactionId, + 'transaction_journal_id' => $journalId, 'links' => [ [ 'rel' => 'self', diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php index 2da9fc6955..1248bb81f4 100644 --- a/app/Transformers/TransactionGroupTransformer.php +++ b/app/Transformers/TransactionGroupTransformer.php @@ -101,7 +101,6 @@ class TransactionGroupTransformer extends AbstractTransformer */ public function transformObject(TransactionGroup $group): array { - //$first = $group->transactionJournals->first(); $result = [ 'id' => (int)$group->id, 'created_at' => $group->created_at->toAtomString(), @@ -174,11 +173,13 @@ class TransactionGroupTransformer extends AbstractTransformer // get foreign amount: $foreignAmount = null; + // @codeCoverageIgnoreStart if (null !== $source->foreign_amount) { $foreignAmount = TransactionType::WITHDRAWAL !== $type ? app('steam')->negative($source->foreign_amount) : app('steam')->positive($source->foreign_amount); } + // @codeCoverageIgnoreEnd $metaFieldData = $this->groupRepos->getMetaFields($journal->id, $this->metaFields); $metaDateData = $this->groupRepos->getMetaDateFields($journal->id, $this->metaDateFields); @@ -280,7 +281,7 @@ class TransactionGroupTransformer extends AbstractTransformer } $foreignAmount = null; if (null !== $row['foreign_amount']) { - $foreignAmount = TransactionType::WITHDRAWAL !== $type ? bcmul($row['foreign_amount'], '-1') : $row['foreign_amount']; + $foreignAmount = TransactionType::WITHDRAWAL !== $type ? bcmul($row['foreign_amount'], '-1') : $row['foreign_amount']; // @codeCoverageIgnore } $metaFieldData = $this->groupRepos->getMetaFields((int)$row['transaction_journal_id'], $this->metaFields); diff --git a/app/Transformers/TransactionTransformer.php b/app/Transformers/TransactionTransformer.php deleted file mode 100644 index 4f9ab3f8c5..0000000000 --- a/app/Transformers/TransactionTransformer.php +++ /dev/null @@ -1,214 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace FireflyIII\Transformers; - - -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Models\Transaction; -use FireflyIII\Models\TransactionType; -use FireflyIII\Repositories\Journal\JournalRepositoryInterface; -use Log; - -/** - * Class TransactionTransformer - * @deprecated - */ -class TransactionTransformer extends AbstractTransformer -{ - /** @var JournalRepositoryInterface */ - protected $repository; - - /** - * TransactionTransformer constructor. - * - * @codeCoverageIgnore - */ - public function __construct() - { - $this->repository = app(JournalRepositoryInterface::class); - if ('testing' === config('app.env')) { - Log::warning(sprintf('%s should not be instantiated in the TEST environment!', get_class($this))); - } - } - - /** - * Transform the journal. - * - * @param Transaction $transaction - * - * @return array - * @throws FireflyException - */ - public function transform(Transaction $transaction): array - { - $journal = $transaction->transactionJournal; - $category = $this->getCategory($transaction); - $budget = $this->getBudget($transaction); - - $this->repository->setUser($journal->user); - - $notes = $this->repository->getNoteText($journal); - $tags = implode(',', $this->repository->getTags($journal)); - - $data = [ - 'id' => (int)$transaction->id, - 'created_at' => $transaction->created_at->toAtomString(), - 'updated_at' => $transaction->updated_at->toAtomString(), - 'description' => $transaction->description, - 'journal_description' => $transaction->description, - 'transaction_description' => $transaction->transaction_description, - 'date' => $transaction->date->toAtomString(), - 'type' => $transaction->transaction_type_type, - 'identifier' => $transaction->identifier, - 'journal_id' => (int)$transaction->journal_id, - 'reconciled' => (bool)$transaction->reconciled, - 'amount' => round($transaction->transaction_amount, (int)$transaction->transaction_currency_dp), - 'currency_id' => $transaction->transaction_currency_id, - 'currency_code' => $transaction->transaction_currency_code, - 'currency_symbol' => $transaction->transaction_currency_symbol, - 'currency_decimal_places' => $transaction->transaction_currency_dp, - 'foreign_amount' => null, - 'foreign_currency_id' => $transaction->foreign_currency_id, - 'foreign_currency_code' => $transaction->foreign_currency_code, - 'foreign_currency_symbol' => $transaction->foreign_currency_symbol, - 'foreign_currency_decimal_places' => $transaction->foreign_currency_dp, - 'bill_id' => $transaction->bill_id, - 'bill_name' => $transaction->bill_name, - 'category_id' => $category['category_id'], - 'category_name' => $category['category_name'], - 'budget_id' => $budget['budget_id'], - 'budget_name' => $budget['budget_name'], - 'notes' => $notes, - 'sepa_cc' => $this->repository->getMetaField($journal, 'sepa_cc'), - 'sepa_ct_op' => $this->repository->getMetaField($journal, 'sepa_ct_op'), - 'sepa_ct_id' => $this->repository->getMetaField($journal, 'sepa_ct_ud'), - 'sepa_db' => $this->repository->getMetaField($journal, 'sepa_db'), - 'sepa_country' => $this->repository->getMetaField($journal, 'sepa_country'), - 'sepa_ep' => $this->repository->getMetaField($journal, 'sepa_ep'), - 'sepa_ci' => $this->repository->getMetaField($journal, 'sepa_ci'), - 'sepa_batch_id' => $this->repository->getMetaField($journal, 'sepa_batch_id'), - 'interest_date' => $this->repository->getMetaDateString($journal, 'interest_date'), - 'book_date' => $this->repository->getMetaDateString($journal, 'book_date'), - 'process_date' => $this->repository->getMetaDateString($journal, 'process_date'), - 'due_date' => $this->repository->getMetaDateString($journal, 'due_date'), - 'payment_date' => $this->repository->getMetaDateString($journal, 'payment_date'), - 'invoice_date' => $this->repository->getMetaDateString($journal, 'invoice_date'), - 'internal_reference' => $this->repository->getMetaField($journal, 'internal_reference'), - 'bunq_payment_id' => $this->repository->getMetaField($journal, 'bunq_payment_id'), - 'import_hash_v2' => $this->repository->getMetaField($journal, 'import_hash_v2'), - 'recurrence_id' => (int)$this->repository->getMetaField($journal, 'recurrence_id'), - 'external_id' => $this->repository->getMetaField($journal, 'external_id'), - 'original_source' => $this->repository->getMetaField($journal, 'original-source'), - 'tags' => '' === $tags ? null : $tags, - 'links' => [ - [ - 'rel' => 'self', - 'uri' => '/transactions/' . $transaction->id, - ], - ], - ]; - - // expand foreign amount: - if (null !== $transaction->transaction_foreign_amount) { - $data['foreign_amount'] = round($transaction->transaction_foreign_amount, (int)$transaction->foreign_currency_dp); - } - - // switch on type for consistency - switch ($transaction->transaction_type_type) { - case TransactionType::WITHDRAWAL: - Log::debug(sprintf('%d is a withdrawal', $transaction->journal_id)); - $data['source_id'] = $transaction->account_id; - $data['source_name'] = $transaction->account_name; - $data['source_iban'] = $transaction->account_iban; - $data['source_type'] = $transaction->account_type; - $data['destination_id'] = $transaction->opposing_account_id; - $data['destination_name'] = $transaction->opposing_account_name; - $data['destination_iban'] = $transaction->opposing_account_iban; - $data['destination_type'] = $transaction->opposing_account_type; - Log::debug(sprintf('source_id / account_id is %d', $transaction->account_id)); - Log::debug(sprintf('source_name / account_name is "%s"', $transaction->account_name)); - break; - case TransactionType::DEPOSIT: - case TransactionType::TRANSFER: - case TransactionType::OPENING_BALANCE: - case TransactionType::RECONCILIATION: - $data['source_id'] = $transaction->opposing_account_id; - $data['source_name'] = $transaction->opposing_account_name; - $data['source_iban'] = $transaction->opposing_account_iban; - $data['source_type'] = $transaction->opposing_account_type; - $data['destination_id'] = $transaction->account_id; - $data['destination_name'] = $transaction->account_name; - $data['destination_iban'] = $transaction->account_iban; - $data['destination_type'] = $transaction->account_type; - break; - default: - // @codeCoverageIgnoreStart - throw new FireflyException( - sprintf('Transaction transformer cannot handle transactions of type "%s"!', $transaction->transaction_type_type) - ); - // @codeCoverageIgnoreEnd - - } - - // expand description. - if ('' !== (string)$transaction->transaction_description) { - $data['description'] = $transaction->transaction_description . ' (' . $transaction->description . ')'; - } - - return $data; - } - - /** - * @param Transaction $transaction - * - * @return array - */ - private function getBudget(Transaction $transaction): array - { - if ($transaction->transaction_type_type !== TransactionType::WITHDRAWAL) { - return [ - 'budget_id' => null, - 'budget_name' => null, - ]; - } - - return [ - 'budget_id' => $transaction->transaction_budget_id ?? $transaction->transaction_journal_budget_id, - 'budget_name' => $transaction->transaction_budget_name ?? $transaction->transaction_journal_budget_name, - ]; - } - - /** - * @param Transaction $transaction - * - * @return array - */ - private function getCategory(Transaction $transaction): array - { - return [ - 'category_id' => $transaction->transaction_category_id ?? $transaction->transaction_journal_category_id, - 'category_name' => $transaction->transaction_category_name ?? $transaction->transaction_journal_category_name, - ]; - } -} diff --git a/phpunit.coverage.specific.xml b/phpunit.coverage.specific.xml index 25014c1015..adacd4f17f 100644 --- a/phpunit.coverage.specific.xml +++ b/phpunit.coverage.specific.xml @@ -32,40 +32,15 @@ - ./tests/Api - - - ./tests/Unit/Console - ./tests/Unit/Factory - ./tests/Unit/Generator - ./tests/Unit/Handlers - ./tests/Unit/Helpers - ./tests/Unit/Import - ./tests/Unit/Jobs - ./tests/Unit/Middleware - ./tests/Unit/Rules - ./tests/Unit/Services - ./tests/Unit/Support - ./tests/Unit/TransactionRules - ./tests/Unit/Transformers - - - - ./tests/Feature - - - - + + ./tests/Feature + diff --git a/phpunit.coverage.xml b/phpunit.coverage.xml index 887bb12f54..ef98e08323 100644 --- a/phpunit.coverage.xml +++ b/phpunit.coverage.xml @@ -32,39 +32,15 @@ - ./tests/Api - - - ./tests/Unit/Console - ./tests/Unit/Factory - ./tests/Unit/Generator - ./tests/Unit/Handlers - ./tests/Unit/Helpers - ./tests/Unit/Import - ./tests/Unit/Jobs - ./tests/Unit/Middleware - ./tests/Unit/Rules - ./tests/Unit/Services - ./tests/Unit/Support - ./tests/Unit/TransactionRules - ./tests/Unit/Transformers - - - ./tests/Feature - - - - + + ./tests/Feature + diff --git a/phpunit.xml b/phpunit.xml index c86ba80894..c0781ce0a5 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -32,38 +32,15 @@ - ./tests/Api - - - ./tests/Unit/Transformers + ./tests/Unit ./tests/Feature - - diff --git a/tests/Feature/Controllers/CurrencyControllerTest.php b/tests/Feature/Controllers/CurrencyControllerTest.php index 8826b663a2..5f26da5340 100644 --- a/tests/Feature/Controllers/CurrencyControllerTest.php +++ b/tests/Feature/Controllers/CurrencyControllerTest.php @@ -509,6 +509,7 @@ class CurrencyControllerTest extends TestCase $repository->shouldReceive('update')->andReturn(new TransactionCurrency); $userRepos->shouldReceive('hasRole')->once()->andReturn(true); + $repository->shouldReceive('currencyInUse')->atLeast()->once()->andReturn(true); Preferences::shouldReceive('mark')->atLeast()->once(); $this->session(['currencies.edit.uri' => 'http://localhost']); diff --git a/tests/Feature/Controllers/Transaction/ShowControllerTest.php b/tests/Feature/Controllers/Transaction/ShowControllerTest.php index 324fd08a2d..00d6a28c25 100644 --- a/tests/Feature/Controllers/Transaction/ShowControllerTest.php +++ b/tests/Feature/Controllers/Transaction/ShowControllerTest.php @@ -55,9 +55,9 @@ class ShowControllerTest extends TestCase $withdrawal = $this->getRandomWithdrawalGroup(); $array = $this->getRandomWithdrawalGroupAsArray(); - $array[0]['transactions'][0]['foreign_amount'] = '10'; - $array[0]['transactions'][0]['foreign_currency_symbol'] = 'x'; - $array[0]['transactions'][0]['foreign_currency_decimal_places'] = 2; + $array['transactions'][0]['foreign_amount'] = '10'; + $array['transactions'][0]['foreign_currency_symbol'] = 'x'; + $array['transactions'][0]['foreign_currency_decimal_places'] = 2; $groupRepository = $this->mock(TransactionGroupRepositoryInterface::class); $userRepos = $this->mock(UserRepositoryInterface::class); @@ -65,7 +65,7 @@ class ShowControllerTest extends TestCase // mock for transformer: $transformer->shouldReceive('setParameters')->atLeast()->once(); - $transformer->shouldReceive('transformObject')->atLeast()->once()->andReturn($array[0]); + $transformer->shouldReceive('transformObject')->atLeast()->once()->andReturn($array); // mock for repos $userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true); diff --git a/tests/TestCase.php b/tests/TestCase.php index 7558819bea..5d838e62b8 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -41,6 +41,7 @@ use FireflyIII\Models\Configuration; use FireflyIII\Models\CurrencyExchangeRate; use FireflyIII\Models\ImportJob; use FireflyIII\Models\PiggyBank; +use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Models\Preference; use FireflyIII\Models\Recurrence; use FireflyIII\Models\Rule; @@ -67,6 +68,14 @@ use RuntimeException; abstract class TestCase extends BaseTestCase { + /** + * @return ImportJob + */ + public function getRandomPiggyBankEvent(): PiggyBankEvent + { + return PiggyBankEvent::inRandomOrder()->first(); + } + /** * @return ImportJob */ @@ -347,7 +356,6 @@ abstract class TestCase extends BaseTestCase /** * @return array - * @throws Exception */ public function getRandomWithdrawalGroupAsArray(): array { @@ -360,12 +368,15 @@ abstract class TestCase extends BaseTestCase $e->getMessage(); } - return [ + return [ 'group_title' => null, 'transactions' => [ [ + 'updated_at' => new Carbon, + 'created_at' => new Carbon, 'transaction_journal_id' => $withdrawal->id, + 'transaction_type_type' => 'Withdrawal', 'currency_id' => $euro->id, 'foreign_currency_id' => null, 'date' => $date, @@ -380,8 +391,47 @@ abstract class TestCase extends BaseTestCase 'budget_id' => $budget->id, ], ], - ], - ]; + ]; + } + + /** + * @return array + */ + public function getRandomDepositGroupAsArray(): array + { + $deposit = $this->getRandomDeposit(); + $euro = $this->getEuro(); + $budget = $this->getRandomBudget(); + try { + $date = new Carbon; + } catch (Exception $e) { + $e->getMessage(); + } + + return + [ + 'group_title' => null, + 'transactions' => [ + [ + 'updated_at' => new Carbon, + 'created_at' => new Carbon, + 'transaction_journal_id' => $deposit->id, + 'transaction_type_type' => 'Deposit', + 'currency_id' => $euro->id, + 'foreign_currency_id' => null, + 'date' => $date, + 'source_id' => 1, + 'destination_id' => 4, + 'currency_name' => $euro->name, + 'currency_code' => $euro->code, + 'currency_symbol' => $euro->symbol, + 'currency_decimal_places' => $euro->decimal_places, + 'amount' => '-30', + 'foreign_amount' => null, + 'budget_id' => $budget->id, + ], + ], + ]; } /** diff --git a/tests/Unit/Generator/Report/Audit/MonthReportGeneratorTest.php b/tests/Unit/Generator/Report/Audit/MonthReportGeneratorTest.php index 72a4fa9d21..e01688a6f5 100644 --- a/tests/Unit/Generator/Report/Audit/MonthReportGeneratorTest.php +++ b/tests/Unit/Generator/Report/Audit/MonthReportGeneratorTest.php @@ -65,22 +65,23 @@ class MonthReportGeneratorTest extends TestCase $dollar = $this->getDollar(); $return = [ [ - 'description' => 'Hello', - 'amount' => '10', - 'foreign_currency_id' => null, - 'currency_id' => $euro->id, - 'source_id' => $asset->id, - 'source_name' => $asset->name, - + 'description' => 'Hello', + 'amount' => '10', + 'foreign_currency_id' => null, + 'currency_id' => $euro->id, + 'source_id' => $asset->id, + 'source_name' => $asset->name, + 'transaction_journal_id' => 1, ], [ - 'description' => 'Hello2', - 'amount' => '10', - 'foreign_amount' => '10', - 'foreign_currency_id' => $euro->id, - 'currency_id' => $dollar->id, - 'source_id' => $asset->id, - 'source_name' => $asset->name, + 'description' => 'Hello2', + 'amount' => '10', + 'foreign_amount' => '10', + 'foreign_currency_id' => $euro->id, + 'currency_id' => $dollar->id, + 'source_id' => $asset->id, + 'source_name' => $asset->name, + 'transaction_journal_id' => 1, ], ]; @@ -100,14 +101,15 @@ class MonthReportGeneratorTest extends TestCase // mock calls Steam::shouldReceive('balance')->times(2)->andReturn('100'); $accountRepos->shouldReceive('setUser')->once(); - $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->once(); + //$accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->andReturn('1')->once(); + $accountRepos->shouldReceive('getAccountCurrency')->atLeast()->once()->andReturn($euro); // mock collector: $collector->shouldReceive('setAccounts')->atLeast()->once()->andReturnSelf(); $collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf(); $collector->shouldReceive('withAccountInformation')->atLeast()->once()->andReturnSelf(); $collector->shouldReceive('getExtractedJournals')->atLeast()->once()->andReturn($return); - $currencyRepos->shouldReceive('findNull')->withArgs([1])->andReturn($euro)->once(); + //$currencyRepos->shouldReceive('findNull')->withArgs([1])->andReturn($euro)->once(); try { $result = $generator->getAuditReport($asset, $date); diff --git a/tests/Unit/Middleware/BinderTest.php b/tests/Unit/Middleware/BinderTest.php index 99415f967b..f6c4658271 100644 --- a/tests/Unit/Middleware/BinderTest.php +++ b/tests/Unit/Middleware/BinderTest.php @@ -116,7 +116,7 @@ class BinderTest extends TestCase public function testAccountListEmpty(): void { Route::middleware(Binder::class)->any( - '/_test/binder/{accountList}', function (Collection $accounts) { + '/_test/binder/{accountList}', static function (Collection $accounts) { return 'count: ' . $accounts->count(); } ); diff --git a/tests/Unit/Support/Import/Routine/File/AssetAccountMapperTest.php b/tests/Unit/Support/Import/Routine/File/AssetAccountMapperTest.php index 81a9d49140..a8a7027507 100644 --- a/tests/Unit/Support/Import/Routine/File/AssetAccountMapperTest.php +++ b/tests/Unit/Support/Import/Routine/File/AssetAccountMapperTest.php @@ -144,7 +144,8 @@ class AssetAccountMapperTest extends TestCase // mock repository: $repository = $this->mock(AccountRepositoryInterface::class); $repository->shouldReceive('setUser')->once(); - $repository->shouldReceive('findByIbanNull')->once()->withArgs([$searchValue, [AccountType::ASSET]])->andReturn($expected); + $repository->shouldReceive('findByIbanNull')->once() + ->withArgs([$searchValue, [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]])->andReturn($expected); $mapper = new AssetAccountMapper; $mapper->setUser($this->user()); @@ -164,7 +165,8 @@ class AssetAccountMapperTest extends TestCase // mock repository: $repository = $this->mock(AccountRepositoryInterface::class); $repository->shouldReceive('setUser')->once(); - $repository->shouldReceive('findByName')->once()->withArgs([$searchValue, [AccountType::ASSET]])->andReturn($expected); + $repository->shouldReceive('findByName')->once() + ->withArgs([$searchValue, [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]])->andReturn($expected); $mapper = new AssetAccountMapper; $mapper->setUser($this->user()); @@ -184,7 +186,8 @@ class AssetAccountMapperTest extends TestCase // mock repository: $repository = $this->mock(AccountRepositoryInterface::class); $repository->shouldReceive('setUser')->once(); - $repository->shouldReceive('findByAccountNumber')->once()->withArgs([$searchValue, [AccountType::ASSET]])->andReturn($expected); + $repository->shouldReceive('findByAccountNumber')->once() + ->withArgs([$searchValue, [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE]])->andReturn($expected); $mapper = new AssetAccountMapper; $mapper->setUser($this->user()); diff --git a/tests/Unit/Support/Import/Routine/File/OpposingAccountMapperTest.php b/tests/Unit/Support/Import/Routine/File/OpposingAccountMapperTest.php index 40a032c025..631b071e74 100644 --- a/tests/Unit/Support/Import/Routine/File/OpposingAccountMapperTest.php +++ b/tests/Unit/Support/Import/Routine/File/OpposingAccountMapperTest.php @@ -90,6 +90,9 @@ class OpposingAccountMapperTest extends TestCase $repository->shouldReceive('findNull')->andReturn($expected)->once(); $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::EXPENSE]])->andReturnNull(); $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::ASSET]])->andReturnNull(); + $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::DEBT]])->andReturnNull(); + $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::MORTGAGE]])->andReturnNull(); + $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::LOAN]])->andReturnNull(); $repository->shouldReceive('store')->withArgs([$expectedArgs])->once() ->andReturn(new Account); @@ -127,8 +130,15 @@ class OpposingAccountMapperTest extends TestCase $repository->shouldReceive('findNull')->andReturn($expected)->once(); $repository->shouldReceive('findByIbanNull')->withArgs([$expected->iban, [AccountType::EXPENSE]])->andReturnNull(); $repository->shouldReceive('findByIbanNull')->withArgs([$expected->iban, [AccountType::ASSET]])->andReturnNull(); + $repository->shouldReceive('findByIbanNull')->withArgs([$expected->iban, [AccountType::DEBT]])->andReturnNull(); + $repository->shouldReceive('findByIbanNull')->withArgs([$expected->iban, [AccountType::MORTGAGE]])->andReturnNull(); + $repository->shouldReceive('findByIbanNull')->withArgs([$expected->iban, [AccountType::LOAN]])->andReturnNull(); + $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::EXPENSE]])->andReturnNull(); $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::ASSET]])->andReturnNull(); + $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::DEBT]])->andReturnNull(); + $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::MORTGAGE]])->andReturnNull(); + $repository->shouldReceive('findByName')->withArgs([$expected->name, [AccountType::LOAN]])->andReturnNull(); $repository->shouldReceive('store')->withArgs([$expectedArgs])->once() ->andReturn(new Account); diff --git a/tests/Unit/Support/Import/Routine/Spectre/StageImportDataHandlerTest.php b/tests/Unit/Support/Import/Routine/Spectre/StageImportDataHandlerTest.php index cca0a6c86f..b3a7d33e89 100644 --- a/tests/Unit/Support/Import/Routine/Spectre/StageImportDataHandlerTest.php +++ b/tests/Unit/Support/Import/Routine/Spectre/StageImportDataHandlerTest.php @@ -74,8 +74,8 @@ class StageImportDataHandlerTest extends TestCase $today = new Carbon; // create fake transactions: - $op1 = 'Some opposing account #' . random_int(1, 100); - $op2 = 'Some opposing revenue account #' . random_int(1, 100); + $op1 = 'Some opposing account #' . $this->randomInt(); + $op2 = 'Some opposing revenue account #' . $this->randomInt(); $transactions = [ new SpectreTransaction( [ @@ -85,7 +85,7 @@ class StageImportDataHandlerTest extends TestCase 'made_on' => $today->toW3cString(), 'amount' => -123.45, 'currency_code' => 'EUR', - 'description' => 'Fake description #' . random_int(1, 100), + 'description' => 'Fake description #' . $this->randomInt(), 'category' => 'some-category', 'duplicated' => false, 'extra' => [ @@ -104,7 +104,7 @@ class StageImportDataHandlerTest extends TestCase 'made_on' => $today->toW3cString(), 'amount' => 563.21, 'currency_code' => 'EUR', - 'description' => 'Fake second description #' . random_int(1, 100), + 'description' => 'Fake second description #' . $this->randomInt(), 'category' => 'some-other-category', 'duplicated' => false, 'extra' => [ @@ -142,28 +142,26 @@ class StageImportDataHandlerTest extends TestCase $lrRequest = $this->mock(ListTransactionsRequest::class); $mapper = $this->mock(OpposingAccountMapper::class); - // expected result $expected = [ 0 => [ - 'type' => 'withdrawal', - 'date' => $today->format('Y-m-d'), - 'tags' => ['mode', 'active'], - 'user' => $job->user_id, - 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op1 . " \n", - 'external_id' => '1', - // journal data: - 'description' => $transactions[0]->getDescription(), - 'piggy_bank_id' => null, - 'piggy_bank_name' => null, - 'bill_id' => null, - 'bill_name' => null, - 'original-source' => sprintf('spectre-v%s', config('firefly.version')), - // transaction data: - 'transactions' => [ - [ + 'transactions' => [ + 0 => [ + // transaction here + 'date' => $today->format('Y-m-d'), + 'tags' => ['mode', 'active'], + 'type' => 'withdrawal', + 'user' => $job->user_id, + 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op1 . " \n", + 'external_id' => '1', + // journal data: + 'description' => $transactions[0]->getDescription(), + 'piggy_bank_id' => null, + 'piggy_bank_name' => null, + 'bill_id' => null, + 'bill_name' => null, + 'original-source' => sprintf('spectre-v%s', config('firefly.version')), 'currency_id' => null, 'currency_code' => 'EUR', - 'description' => null, 'amount' => '-123.45', 'budget_id' => null, 'budget_name' => null, @@ -180,28 +178,26 @@ class StageImportDataHandlerTest extends TestCase 'identifier' => 0, ], ], - ], 1 => [ - 'type' => 'deposit', - 'date' => $today->format('Y-m-d'), - 'tags' => ['mode', 'active'], - 'user' => $job->user_id, - 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op2 . " \n", - 'external_id' => '2', - // journal data: - 'description' => $transactions[1]->getDescription(), - 'piggy_bank_id' => null, - 'piggy_bank_name' => null, - 'bill_id' => null, - 'bill_name' => null, - 'original-source' => sprintf('spectre-v%s', config('firefly.version')), - // transaction data: - 'transactions' => [ - [ + 'transactions' => [ + 0 => [ + // transaction here + 'date' => $today->format('Y-m-d'), + 'tags' => ['mode', 'active'], + 'type' => 'deposit', + 'user' => $job->user_id, + 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op2 . " \n", + 'external_id' => '2', + // journal data: + 'description' => $transactions[1]->getDescription(), + 'piggy_bank_id' => null, + 'piggy_bank_name' => null, + 'bill_id' => null, + 'bill_name' => null, + 'original-source' => sprintf('spectre-v%s', config('firefly.version')), 'currency_id' => null, 'currency_code' => 'EUR', - 'description' => null, 'amount' => '563.21', 'budget_id' => null, 'budget_name' => null, @@ -218,14 +214,13 @@ class StageImportDataHandlerTest extends TestCase 'identifier' => 0, ], ], - ], ]; + $accountRepos->shouldReceive('setUser')->once(); $accountRepos->shouldReceive('findNull')->once()->withArgs([322])->andReturn($account); $importRepos->shouldReceive('setUser')->once(); - $importRepos->shouldReceive('setTransactions')->once() - ->withArgs([Mockery::any(), $expected]); + $importRepos->shouldReceive('setTransactions')->once()->withArgs([Mockery::any(), $expected]); $lrRequest->shouldReceive('setUser')->once(); $lrRequest->shouldReceive('setAccount')->once()->withArgs([Mockery::any()]); $lrRequest->shouldReceive('call')->once(); @@ -273,9 +268,9 @@ class StageImportDataHandlerTest extends TestCase $today = new Carbon; // create fake transactions: - $op1 = 'Some opposing account #' . random_int(1, 100); - $op2 = 'Some opposing revenue account #' . random_int(1, 100); - $transactions = [ + $op1 = 'Some opposing account #' . $this->randomInt(); + $op2 = 'Some opposing revenue account #' . $this->randomInt(); + $transactions = [ new SpectreTransaction( [ 'id' => 1, @@ -284,7 +279,7 @@ class StageImportDataHandlerTest extends TestCase 'made_on' => $today->toW3cString(), 'amount' => -123.45, 'currency_code' => 'EUR', - 'description' => 'Fake description #' . random_int(1, 100), + 'description' => 'Fake description #' . $this->randomInt(), 'category' => 'some-category', 'duplicated' => true, 'extra' => [ @@ -304,7 +299,7 @@ class StageImportDataHandlerTest extends TestCase 'made_on' => $today->toW3cString(), 'amount' => 563.21, 'currency_code' => 'EUR', - 'description' => 'Fake second description #' . random_int(1, 100), + 'description' => 'Fake second description #' . $this->randomInt(), 'category' => 'some-other-category', 'duplicated' => false, 'extra' => [ @@ -345,29 +340,26 @@ class StageImportDataHandlerTest extends TestCase $lrRequest = $this->mock(ListTransactionsRequest::class); $mapper = $this->mock(OpposingAccountMapper::class); - // expected result $expected = [ 0 => [ - 'type' => 'withdrawal', - 'date' => $today->format('Y-m-d'), - 'tags' => ['mode', 'active', 'possibly-duplicated'], - 'user' => $job->user_id, - 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op1 . " \n", - 'external_id' => '1', - // journal data: - 'description' => $transactions[0]->getDescription(), - 'piggy_bank_id' => null, - 'piggy_bank_name' => null, - 'bill_id' => null, - 'bill_name' => null, - 'original-source' => sprintf('spectre-v%s', config('firefly.version')), - - // transaction data: - 'transactions' => [ - [ + 'transactions' => [ + 0 => [ + // data here. + 'date' => $today->format('Y-m-d'), + 'type' => 'withdrawal', + 'tags' => ['mode', 'active', 'possibly-duplicated'], + 'user' => $job->user_id, + 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op1 . " \n", + 'external_id' => '1', + // journal data: + 'description' => $transactions[0]->getDescription(), + 'piggy_bank_id' => null, + 'piggy_bank_name' => null, + 'bill_id' => null, + 'bill_name' => null, + 'original-source' => sprintf('spectre-v%s', config('firefly.version')), 'currency_id' => null, 'currency_code' => 'EUR', - 'description' => null, 'amount' => '-123.45', 'budget_id' => null, 'budget_name' => null, @@ -386,26 +378,24 @@ class StageImportDataHandlerTest extends TestCase ], ], 1 => [ - 'type' => 'deposit', - 'date' => $today->format('Y-m-d'), - 'tags' => ['mode', 'active', 'cat-name'], - 'user' => $job->user_id, - 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op2 . " \n", - 'external_id' => '2', - // journal data: - 'description' => $transactions[1]->getDescription(), - 'piggy_bank_id' => null, - 'piggy_bank_name' => null, - 'bill_id' => null, - 'bill_name' => null, - 'original-source' => sprintf('spectre-v%s', config('firefly.version')), - - // transaction data: - 'transactions' => [ - [ + 'transactions' => [ + 0 => [ + // data here. + 'date' => $today->format('Y-m-d'), + 'type' => 'deposit', + 'tags' => ['mode', 'active', 'cat-name'], + 'user' => $job->user_id, + 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op2 . " \n", + 'external_id' => '2', + // journal data: + 'description' => $transactions[1]->getDescription(), + 'piggy_bank_id' => null, + 'piggy_bank_name' => null, + 'bill_id' => null, + 'bill_name' => null, + 'original-source' => sprintf('spectre-v%s', config('firefly.version')), 'currency_id' => null, 'currency_code' => 'EUR', - 'description' => null, 'amount' => '563.21', 'budget_id' => null, 'budget_name' => null, @@ -424,6 +414,7 @@ class StageImportDataHandlerTest extends TestCase ], ], ]; + $accountRepos->shouldReceive('setUser')->once(); $accountRepos->shouldReceive('findNull')->once()->withArgs([322])->andReturn($account); $importRepos->shouldReceive('setUser')->once(); @@ -474,8 +465,8 @@ class StageImportDataHandlerTest extends TestCase $today = new Carbon; // create fake transactions: - $op1 = 'Some opposing account #' . random_int(1, 100); - $op2 = 'Some opposing revenue account #' . random_int(1, 100); + $op1 = 'Some opposing account #' . $this->randomInt(); + $op2 = 'Some opposing revenue account #' . $this->randomInt(); $transactions = [ new SpectreTransaction( [ @@ -485,7 +476,7 @@ class StageImportDataHandlerTest extends TestCase 'made_on' => $today->toW3cString(), 'amount' => -123.45, 'currency_code' => 'EUR', - 'description' => 'Fake description #' . random_int(1, 100), + 'description' => 'Fake description #' . $this->randomInt(), 'category' => 'some-category', 'duplicated' => true, 'extra' => [ @@ -504,7 +495,7 @@ class StageImportDataHandlerTest extends TestCase 'made_on' => $today->toW3cString(), 'amount' => 563.21, 'currency_code' => 'EUR', - 'description' => 'Fake second description #' . random_int(1, 100), + 'description' => 'Fake second description #' . $this->randomInt(), 'category' => 'some-other-category', 'duplicated' => false, 'extra' => [ @@ -543,29 +534,26 @@ class StageImportDataHandlerTest extends TestCase $lrRequest = $this->mock(ListTransactionsRequest::class); $mapper = $this->mock(OpposingAccountMapper::class); - // expected result $expected = [ 0 => [ - 'type' => 'withdrawal', - 'date' => $today->format('Y-m-d'), - 'tags' => ['mode', 'active', 'possibly-duplicated'], - 'user' => $job->user_id, - 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op1 . " \n", - 'external_id' => '1', - // journal data: - 'description' => $transactions[0]->getDescription(), - 'piggy_bank_id' => null, - 'piggy_bank_name' => null, - 'bill_id' => null, - 'bill_name' => null, - 'original-source' => sprintf('spectre-v%s', config('firefly.version')), - - // transaction data: - 'transactions' => [ - [ + 'transactions' => [ + 0 => [ + // data here + 'date' => $today->format('Y-m-d'), + 'type' => 'withdrawal', + 'tags' => ['mode', 'active', 'possibly-duplicated'], + 'user' => $job->user_id, + 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op1 . " \n", + 'external_id' => '1', + // journal data: + 'description' => $transactions[0]->getDescription(), + 'piggy_bank_id' => null, + 'piggy_bank_name' => null, + 'bill_id' => null, + 'bill_name' => null, + 'original-source' => sprintf('spectre-v%s', config('firefly.version')), 'currency_id' => null, 'currency_code' => 'EUR', - 'description' => null, 'amount' => '-123.45', 'budget_id' => null, 'budget_name' => null, @@ -584,26 +572,24 @@ class StageImportDataHandlerTest extends TestCase ], ], 1 => [ - 'type' => 'deposit', - 'date' => $today->format('Y-m-d'), - 'tags' => ['mode', 'active', 'cat-name'], - 'user' => $job->user_id, - 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op2 . " \n", - 'external_id' => '2', - // journal data: - 'description' => $transactions[1]->getDescription(), - 'piggy_bank_id' => null, - 'piggy_bank_name' => null, - 'bill_id' => null, - 'bill_name' => null, - 'original-source' => sprintf('spectre-v%s', config('firefly.version')), - - // transaction data: - 'transactions' => [ - [ + 'transactions' => [ + 0 => [ + // data here + 'date' => $today->format('Y-m-d'), + 'type' => 'deposit', + 'tags' => ['mode', 'active', 'cat-name'], + 'user' => $job->user_id, + 'notes' => "Imported from \"Fake Spectre Account\" \npayee: " . $op2 . " \n", + 'external_id' => '2', + // journal data: + 'description' => $transactions[1]->getDescription(), + 'piggy_bank_id' => null, + 'piggy_bank_name' => null, + 'bill_id' => null, + 'bill_name' => null, + 'original-source' => sprintf('spectre-v%s', config('firefly.version')), 'currency_id' => null, 'currency_code' => 'EUR', - 'description' => null, 'amount' => '563.21', 'budget_id' => null, 'budget_name' => null, @@ -622,6 +608,7 @@ class StageImportDataHandlerTest extends TestCase ], ], ]; + $accountRepos->shouldReceive('setUser')->once(); $accountRepos->shouldReceive('findNull')->once()->withArgs([322])->andReturn($account); $importRepos->shouldReceive('setUser')->once(); diff --git a/tests/Unit/Transformers/BillTransformerTest.php b/tests/Unit/Transformers/BillTransformerTest.php index 148762916a..bd78b724ce 100644 --- a/tests/Unit/Transformers/BillTransformerTest.php +++ b/tests/Unit/Transformers/BillTransformerTest.php @@ -109,10 +109,7 @@ class BillTransformerTest extends TestCase $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'] - ); + $this->assertEquals(['2018-01-02', '2018-01-09', '2018-01-16', '2018-01-21', '2018-01-30',], $result['paid_dates']); } } diff --git a/tests/Unit/Transformers/PiggyBankEventTransformerTest.php b/tests/Unit/Transformers/PiggyBankEventTransformerTest.php index f533ce0c45..6bd8e234b7 100644 --- a/tests/Unit/Transformers/PiggyBankEventTransformerTest.php +++ b/tests/Unit/Transformers/PiggyBankEventTransformerTest.php @@ -68,16 +68,18 @@ class PiggyBankEventTransformerTest extends TestCase // mock calls: $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->atLeast()->once()->andReturn(1); $currencyRepos->shouldReceive('findNull')->withArgs([1])->atLeast()->once()->andReturn($this->getEuro()); - $piggyRepos->shouldReceive('getTransactionWithEvent')->atLeast()->once()->andReturn(123); - $event = PiggyBankEvent::first(); + $event = $this->getRandomPiggyBankEvent(); + + + $transformer = app(PiggyBankEventTransformer::class); $transformer->setParameters(new ParameterBag); $result = $transformer->transform($event); $this->assertEquals($event->id, $result['id']); - $this->assertEquals(245, $result['amount']); - $this->assertEquals(123, $result['transaction_id']); + $this->assertEquals($event->amount, $result['amount']); + $this->assertEquals($event->transaction_journal_id, $result['transaction_journal_id']); } @@ -100,18 +102,17 @@ class PiggyBankEventTransformerTest extends TestCase // mock calls: $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->atLeast()->once()->andReturn(1); $currencyRepos->shouldReceive('findNull')->withArgs([1])->atLeast()->once()->andReturn(null); - $piggyRepos->shouldReceive('getTransactionWithEvent')->atLeast()->once()->andReturn(123); Amount::shouldReceive('getDefaultCurrencyByUser')->andReturn($this->getEuro())->atLeast()->once(); - $event = PiggyBankEvent::first(); + $event = $this->getRandomPiggyBankEvent(); $transformer = app(PiggyBankEventTransformer::class); $transformer->setParameters(new ParameterBag); $result = $transformer->transform($event); $this->assertEquals($event->id, $result['id']); - $this->assertEquals(245, $result['amount']); - $this->assertEquals(123, $result['transaction_id']); + $this->assertEquals($event->amount, $result['amount']); + $this->assertEquals($event->transaction_journal_id, $result['transaction_journal_id']); } } diff --git a/tests/Unit/Transformers/RecurrenceTransformerTest.php b/tests/Unit/Transformers/RecurrenceTransformerTest.php index efe64b7774..5628ab695a 100644 --- a/tests/Unit/Transformers/RecurrenceTransformerTest.php +++ b/tests/Unit/Transformers/RecurrenceTransformerTest.php @@ -25,18 +25,15 @@ namespace Tests\Unit\Transformers; use Carbon\Carbon; use FireflyIII\Factory\CategoryFactory; -use FireflyIII\Models\Bill; -use FireflyIII\Models\Budget; -use FireflyIII\Models\Category; -use FireflyIII\Models\PiggyBank; -use FireflyIII\Models\Recurrence; -use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Models\RecurrenceTransaction; +use FireflyIII\Models\RecurrenceTransactionMeta; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; use FireflyIII\Transformers\RecurrenceTransformer; use Log; +use Mockery; use Symfony\Component\HttpFoundation\ParameterBag; use Tests\TestCase; @@ -56,7 +53,7 @@ class RecurrenceTransformerTest extends TestCase } /** - * + * @covers \FireflyIII\Transformers\RecurrenceTransformer */ public function testBasic(): void { @@ -65,12 +62,13 @@ class RecurrenceTransformerTest extends TestCase $piggyRepos = $this->mock(PiggyBankRepositoryInterface::class); $factory = $this->mock(CategoryFactory::class); $budgetRepos = $this->mock(BudgetRepositoryInterface::class); - $category = Category::first(); - $budget = Budget::first(); - $piggy = PiggyBank::first(); - $bill = Bill::first(); - $foreignCurrency = TransactionCurrency::find(2); + $category = $this->getRandomCategory(); + $budget = $this->getRandomBudget(); + $piggy = $this->getRandomPiggyBank(); + $bill = $this->getRandomBill(); + $foreignCurrency = $this->getDollar(); $ranges = [new Carbon]; + $recurrence = $this->getRandomRecurrence(); // mock calls: $recurrenceRepos->shouldReceive('setUser')->atLeast()->once(); $billRepos->shouldReceive('setUser')->atLeast()->once(); @@ -82,47 +80,21 @@ class RecurrenceTransformerTest extends TestCase $recurrenceRepos->shouldReceive('getNoteText')->once()->andReturn('Hi there'); $recurrenceRepos->shouldReceive('repetitionDescription')->once()->andReturn('Rep descr'); $recurrenceRepos->shouldReceive('getXOccurrences')->andReturn($ranges)->atLeast()->once(); - $factory->shouldReceive('findOrCreate')->atLeast()->once()->withArgs([null, 'House'])->andReturn($category); + $factory->shouldReceive('findOrCreate')->atLeast()->once()->withArgs([null,Mockery::any()])->andReturn($category); $budgetRepos->shouldReceive('findNull')->atLeast()->once()->withArgs([2])->andReturn($budget); $piggyRepos->shouldReceive('findNull')->atLeast()->once()->withArgs([1])->andReturn($piggy); $billRepos->shouldReceive('find')->atLeast()->once()->withArgs([1])->andReturn($bill); // basic transformation: - /** @var Recurrence $recurrence */ - $recurrence = Recurrence::find(1); + $transformer = app(RecurrenceTransformer::class); $transformer->setParameters(new ParameterBag); $result = $transformer->transform($recurrence); - $this->assertEquals(1, $result['id']); + $this->assertEquals($recurrence->id, $result['id']); $this->assertEquals('withdrawal', $result['transaction_type']); $this->assertEquals(true, $result['apply_rules']); - $this->assertEquals( - [ - [ - 'value' => 'auto-generated', - 'tags' => ['auto-generated'], - 'name' => 'tags', - ], - [ - 'name' => 'piggy_bank_id', - 'piggy_bank_id' => 1, - 'piggy_bank_name' => 'New camera', - 'value' => '1', - ], - [ - 'bill_id' => 1, - 'bill_name' => 'Rent', - 'name' => 'bill_id', - 'value' => '1', - - ], - ] - , $result['meta'] - ); - - $this->assertEquals($foreignCurrency->code, $result['transactions'][0]['foreign_currency_code']); $this->assertEquals('Rep descr', $result['recurrence_repetitions'][0]['description']); diff --git a/tests/Unit/Transformers/TransactionGroupTransformerTest.php b/tests/Unit/Transformers/TransactionGroupTransformerTest.php new file mode 100644 index 0000000000..6f30836c9c --- /dev/null +++ b/tests/Unit/Transformers/TransactionGroupTransformerTest.php @@ -0,0 +1,120 @@ +. + */ + +namespace Tests\Unit\Transformers; + + +use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; +use FireflyIII\Support\NullArrayObject; +use FireflyIII\Transformers\TransactionGroupTransformer; +use Log; +use Mockery; +use Tests\TestCase; + +/** + * Class TransactionGroupTransformerTest + */ +class TransactionGroupTransformerTest extends TestCase +{ + /** + * + */ + public function setUp(): void + { + parent::setUp(); + Log::info(sprintf('Now in %s.', get_class($this))); + } + + /** + * @covers \FireflyIII\Transformers\TransactionGroupTransformer + */ + public function testBasic(): void + { + $repository = $this->mock(TransactionGroupRepositoryInterface::class); + $group = $this->getRandomWithdrawalGroup(); + $first = $group->transactionJournals()->first(); + + // mock calls + $repository->shouldReceive('getMetaFields')->withArgs([$first->id, Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getMetaDateFields')->withArgs([$first->id, Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('note'); + $repository->shouldReceive('getTags')->atLeast()->once()->andReturn([]); + + $transformer = new TransactionGroupTransformer; + $result = $transformer->transformObject($group); + + } + + /** + * @covers \FireflyIII\Transformers\TransactionGroupTransformer + */ + public function testArray(): void { + $repository = $this->mock(TransactionGroupRepositoryInterface::class); + $group = $this->getRandomWithdrawalGroupAsArray(); + + // mock calls + $repository->shouldReceive('getMetaFields')->withArgs([Mockery::any(), Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getMetaDateFields')->withArgs([Mockery::any(), Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('note'); + $repository->shouldReceive('getTags')->atLeast()->once()->andReturn([]); + + $transformer = new TransactionGroupTransformer; + $result = $transformer->transform($group); + } + + + /** + * @covers \FireflyIII\Transformers\TransactionGroupTransformer + */ + public function testArrayDeposit(): void { + $repository = $this->mock(TransactionGroupRepositoryInterface::class); + $group = $this->getRandomDepositGroupAsArray(); + + // mock calls + $repository->shouldReceive('getMetaFields')->withArgs([Mockery::any(), Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getMetaDateFields')->withArgs([Mockery::any(), Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('note'); + $repository->shouldReceive('getTags')->atLeast()->once()->andReturn([]); + + $transformer = new TransactionGroupTransformer; + $result = $transformer->transform($group); + } + + /** + * @covers \FireflyIII\Transformers\TransactionGroupTransformer + */ + public function testDeposit(): void + { + $repository = $this->mock(TransactionGroupRepositoryInterface::class); + $group = $this->getRandomDepositGroup(); + $first = $group->transactionJournals()->first(); + + // mock calls + $repository->shouldReceive('getMetaFields')->withArgs([$first->id, Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getMetaDateFields')->withArgs([$first->id, Mockery::any()])->andReturn(new NullArrayObject([]))->atLeast()->once(); + $repository->shouldReceive('getNoteText')->atLeast()->once()->andReturn('note'); + $repository->shouldReceive('getTags')->atLeast()->once()->andReturn([]); + + $transformer = new TransactionGroupTransformer; + $result = $transformer->transformObject($group); + + } +} \ No newline at end of file