From a7b8470d9ea5f9e6c16320fbc9419fa9cef10967 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 1 Jun 2018 22:04:52 +0200 Subject: [PATCH] Expand test coverage. --- app/Factory/TransactionFactory.php | 4 +- app/Helpers/Attachments/AttachmentHelper.php | 5 +- app/Http/Controllers/AccountController.php | 15 +- app/Http/Controllers/BudgetController.php | 1 + app/Http/Controllers/DebugController.php | 33 ++-- app/Http/Controllers/HomeController.php | 4 +- .../Controllers/Import/IndexController.php | 3 +- app/Http/Controllers/JavascriptController.php | 8 +- .../Json/AutoCompleteController.php | 29 ++-- app/Http/Controllers/ProfileController.php | 4 +- app/Http/Controllers/RuleController.php | 24 ++- app/Models/Rule.php | 1 + app/Models/RuleTrigger.php | 4 +- app/Models/Transaction.php | 1 + app/Models/TransactionCurrency.php | 1 + resources/views/debug.twig | 1 + .../Controllers/AccountControllerTest.php | 86 +++++++++- .../Controllers/AttachmentControllerTest.php | 20 ++- .../Controllers/BillControllerTest.php | 151 ++++++++++++++++-- .../Controllers/BudgetControllerTest.php | 125 ++++++++++++++- .../Chart/AccountControllerTest.php | 4 +- .../Import/IndexControllerTest.php | 37 +++++ .../Import/JobStatusControllerTest.php | 2 +- .../Controllers/JavascriptControllerTest.php | 36 ++++- .../Json/AutoCompleteControllerTest.php | 44 ++++- .../Controllers/Json/BoxControllerTest.php | 85 +++++++++- .../Controllers/NewUserControllerTest.php | 39 ++++- .../Controllers/PiggyBankControllerTest.php | 54 ++++--- .../Controllers/ProfileControllerTest.php | 111 ++++++++++++- .../Controllers/RuleControllerTest.php | 105 ++++++++---- .../Controllers/TransactionControllerTest.php | 87 +++++++--- 31 files changed, 951 insertions(+), 173 deletions(-) diff --git a/app/Factory/TransactionFactory.php b/app/Factory/TransactionFactory.php index eb2244ca15..c9c787d092 100644 --- a/app/Factory/TransactionFactory.php +++ b/app/Factory/TransactionFactory.php @@ -56,10 +56,10 @@ class TransactionFactory $currencyId = $data['currency_id'] ?? null; $currencyId = isset($data['currency']) ? $data['currency']->id : $currencyId; if ('' === $data['amount']) { - throw new FireflyException('Amount is an empty string, which Firefly III cannot handle. Apologies.'); + throw new FireflyException('Amount is an empty string, which Firefly III cannot handle. Apologies.'); // @codeCoverageIgnore } if (null === $currencyId) { - throw new FireflyException('Cannot store transaction without currency information.'); + throw new FireflyException('Cannot store transaction without currency information.'); // @codeCoverageIgnore } $data['foreign_amount'] = '' === (string)$data['foreign_amount'] ? null : $data['foreign_amount']; Log::debug(sprintf('Create transaction for account #%d ("%s") with amount %s', $data['account']->id, $data['account']->name, $data['amount'])); diff --git a/app/Helpers/Attachments/AttachmentHelper.php b/app/Helpers/Attachments/AttachmentHelper.php index 906b7e39fe..72a00bab0c 100644 --- a/app/Helpers/Attachments/AttachmentHelper.php +++ b/app/Helpers/Attachments/AttachmentHelper.php @@ -25,6 +25,7 @@ namespace FireflyIII\Helpers\Attachments; use Crypt; use FireflyIII\Models\Attachment; use Illuminate\Contracts\Encryption\DecryptException; +use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\MessageBag; @@ -66,6 +67,8 @@ class AttachmentHelper implements AttachmentHelperInterface } /** + * @codeCoverageIgnore + * * @param Attachment $attachment * * @return string @@ -74,7 +77,7 @@ class AttachmentHelper implements AttachmentHelperInterface { try { $content = Crypt::decrypt($this->uploadDisk->get(sprintf('at-%d.data', $attachment->id))); - } catch (DecryptException $e) { + } catch (DecryptException|FileNotFoundException $e) { Log::error(sprintf('Could not decrypt data of attachment #%d', $attachment->id)); return ''; diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index b132445c70..db68a5c841 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -210,18 +210,7 @@ class AccountController extends Controller $request->session()->flash('preFilled', $preFilled); - return view( - 'accounts.edit', - compact( - 'account', - 'currency', - 'subTitle', - 'subTitleIcon', - 'what', - 'roles', - 'preFilled' - ) - ); + return view('accounts.edit', compact('account', 'currency', 'subTitle', 'subTitleIcon', 'what', 'roles', 'preFilled')); } /** @@ -340,7 +329,7 @@ class AccountController extends Controller public function showAll(Request $request, Account $account) { if (AccountType::INITIAL_BALANCE === $account->accountType->type) { - return $this->redirectToOriginalAccount($account); + return $this->redirectToOriginalAccount($account); // @codeCoverageIgnore } $end = new Carbon; $today = new Carbon; diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index 59f1ec0071..ed199483d5 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -96,6 +96,7 @@ class BudgetController extends Controller // if today is between start and end, use the diff in days between end and today (days left) // otherwise, use diff between start and end. $today = new Carbon; + Log::debug(sprintf('Start is %s, end is %s, today is %s', $start->format('Y-m-d'), $end->format('Y-m-d'),$today->format('Y-m-d'))); if ($today->gte($start) && $today->lte($end)) { $days = $end->diffInDays($today); $daysInMonth = $start->diffInDays($today); diff --git a/app/Http/Controllers/DebugController.php b/app/Http/Controllers/DebugController.php index 4a56acf427..11f52acf5c 100644 --- a/app/Http/Controllers/DebugController.php +++ b/app/Http/Controllers/DebugController.php @@ -66,6 +66,7 @@ class DebugController extends Controller $userAgent = $request->header('user-agent'); $isSandstorm = var_export(env('IS_SANDSTORM', 'unknown'), true); $isDocker = var_export(env('IS_DOCKER', 'unknown'), true); + $toSandbox = var_export(env('BUNQ_USE_SANDBOX', 'unknown'), true); $trustedProxies = env('TRUSTED_PROXIES', '(none)'); $displayErrors = ini_get('display_errors'); $errorReporting = $this->errorReporting((int)ini_get('error_reporting')); @@ -96,40 +97,24 @@ class DebugController extends Controller if (null !== $logFile) { try { $logContent = file_get_contents($logFile); + // @codeCoverageIgnoreStart } catch (Exception $e) { // don't care Log::debug(sprintf('Could not read log file. %s', $e->getMessage())); } + // @codeCoverageIgnoreEnd } } } // last few lines - $logContent = 'Truncated from this point <----|' . substr($logContent, -4096); + $logContent = 'Truncated from this point <----|' . substr($logContent, -8192); return view( - 'debug', - compact( - 'phpVersion', - 'extensions', 'localeAttempts', - 'appEnv', - 'appDebug', - 'appLog', - 'appLogLevel', - 'now', - 'packages', - 'drivers', - 'currentDriver', - 'userAgent', - 'displayErrors', - 'errorReporting', - 'phpOs', - 'interface', - 'logContent', - 'cacheDriver', - 'isDocker', - 'isSandstorm', - 'trustedProxies' - ) + 'debug', compact( + 'phpVersion', 'extensions', 'localeAttempts', 'appEnv', 'appDebug', 'appLog', 'appLogLevel', 'now', 'packages', 'drivers', 'currentDriver', + 'userAgent', 'displayErrors', 'errorReporting', 'phpOs', 'interface', 'logContent', 'cacheDriver', 'isDocker', 'isSandstorm', 'trustedProxies', + 'toSandbox' + ) ); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index ba32b7e7ba..993d3273e5 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -133,10 +133,12 @@ class HomeController extends Controller Log::debug('Call twig:clean...'); try { Artisan::call('twig:clean'); + // @codeCoverageIgnoreStart } catch (Exception $e) { - // dont care + // don't care Log::debug('Called twig:clean.'); } + // @codeCoverageIgnoreEnd Log::debug('Call view:clear...'); Artisan::call('view:clear'); Log::debug('Done! Redirecting...'); diff --git a/app/Http/Controllers/Import/IndexController.php b/app/Http/Controllers/Import/IndexController.php index c416cb8c98..a6fe9d3167 100644 --- a/app/Http/Controllers/Import/IndexController.php +++ b/app/Http/Controllers/Import/IndexController.php @@ -156,8 +156,9 @@ class IndexController extends Controller public function download(ImportJob $job): LaravelResponse { Log::debug('Now in download()', ['job' => $job->key]); - $config = $job->configuration; + $config = $this->repository->getConfiguration($job); // This is CSV import specific: + $config['delimiter'] = $config['delimiter'] ?? ','; $config['delimiter'] = "\t" === $config['delimiter'] ? 'tab' : $config['delimiter']; // this prevents private information from escaping diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index d47992d9ed..0ebb2d5192 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -29,6 +29,7 @@ use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use Illuminate\Http\Request; +use Illuminate\Http\Response; use Log; use Preferences; @@ -68,9 +69,9 @@ class JavascriptController extends Controller /** * @param CurrencyRepositoryInterface $repository * - * @return \Illuminate\Http\Response + * @return Response */ - public function currencies(CurrencyRepositoryInterface $repository) + public function currencies(CurrencyRepositoryInterface $repository): Response { $currencies = $repository->get(); $data = ['currencies' => []]; @@ -102,7 +103,8 @@ class JavascriptController extends Controller } /** @var TransactionCurrency $currency */ $currency = $currencyRepository->findNull($currencyId); - if (0 === $currencyId) { + if (null === $currency) { + /** @var TransactionCurrency $currency */ $currency = app('amount')->getDefaultCurrency(); } diff --git a/app/Http/Controllers/Json/AutoCompleteController.php b/app/Http/Controllers/Json/AutoCompleteController.php index b01069520e..6ff6c92e1d 100644 --- a/app/Http/Controllers/Json/AutoCompleteController.php +++ b/app/Http/Controllers/Json/AutoCompleteController.php @@ -35,6 +35,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; use FireflyIII\Support\CacheProperties; +use Illuminate\Http\JsonResponse; /** * Class AutoCompleteController. @@ -47,7 +48,7 @@ class AutoCompleteController extends Controller * * @param AccountRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function allAccounts(AccountRepositoryInterface $repository) { @@ -64,9 +65,9 @@ class AutoCompleteController extends Controller /** * @param JournalCollectorInterface $collector * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ - public function allTransactionJournals(JournalCollectorInterface $collector) + public function allTransactionJournals(JournalCollectorInterface $collector): JsonResponse { $collector->setLimit(250)->setPage(1); $return = array_unique($collector->getJournals()->pluck('description')->toArray()); @@ -80,9 +81,9 @@ class AutoCompleteController extends Controller * * @param BillRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ - public function bills(BillRepositoryInterface $repository) + public function bills(BillRepositoryInterface $repository): JsonResponse { $return = array_unique( $repository->getActiveBills()->pluck('name')->toArray() @@ -95,7 +96,7 @@ class AutoCompleteController extends Controller /** * @param BudgetRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function budgets(BudgetRepositoryInterface $repository) { @@ -110,7 +111,7 @@ class AutoCompleteController extends Controller * * @param CategoryRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function categories(CategoryRepositoryInterface $repository) { @@ -123,7 +124,7 @@ class AutoCompleteController extends Controller /** * @param CurrencyRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function currencyNames(CurrencyRepositoryInterface $repository) { @@ -138,7 +139,7 @@ class AutoCompleteController extends Controller * * @param AccountRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function expenseAccounts(AccountRepositoryInterface $repository) { @@ -163,7 +164,7 @@ class AutoCompleteController extends Controller * @param JournalCollectorInterface $collector * @param TransactionJournal $except * - * @return \Illuminate\Http\JsonResponse|mixed + * @return JsonResponse|mixed */ public function journalsWithId(JournalCollectorInterface $collector, TransactionJournal $except) { @@ -195,7 +196,7 @@ class AutoCompleteController extends Controller /** * @param AccountRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function revenueAccounts(AccountRepositoryInterface $repository) { @@ -220,7 +221,7 @@ class AutoCompleteController extends Controller * * @param TagRepositoryInterface $tagRepository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function tags(TagRepositoryInterface $tagRepository) { @@ -234,7 +235,7 @@ class AutoCompleteController extends Controller * @param JournalCollectorInterface $collector * @param string $what * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function transactionJournals(JournalCollectorInterface $collector, string $what) { @@ -251,7 +252,7 @@ class AutoCompleteController extends Controller /** * @param JournalRepositoryInterface $repository * - * @return \Illuminate\Http\JsonResponse + * @return JsonResponse */ public function transactionTypes(JournalRepositoryInterface $repository) { diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 12c9923f6c..581f88b35d 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -424,7 +424,7 @@ class ProfileController extends Controller /** * */ - private function createOAuthKeys() + private function createOAuthKeys(): void { $rsa = new RSA(); $keys = $rsa->createKey(4096); @@ -437,11 +437,13 @@ class ProfileController extends Controller if (file_exists($publicKey) || file_exists($privateKey)) { return; } + // @codeCoverageIgnoreStart Log::alert('NO OAuth keys were found. They have been created.'); file_put_contents($publicKey, array_get($keys, 'publickey')); file_put_contents($privateKey, array_get($keys, 'privatekey')); } + // @codeCoverageIgnoreEnd /** * @return string diff --git a/app/Http/Controllers/RuleController.php b/app/Http/Controllers/RuleController.php index 297768f9e1..98a781017c 100644 --- a/app/Http/Controllers/RuleController.php +++ b/app/Http/Controllers/RuleController.php @@ -352,12 +352,12 @@ class RuleController extends Controller // redirect to show bill. if ($request->get('return_to_bill') === 'true' && (int)$request->get('bill_id') > 0) { - return redirect(route('bills.show', [(int)$request->get('bill_id')])); + return redirect(route('bills.show', [(int)$request->get('bill_id')])); // @codeCoverageIgnore } // redirect to new bill creation. if ((int)$request->get('bill_id') > 0) { - return redirect($this->getPreviousUri('bills.create.uri')); + return redirect($this->getPreviousUri('bills.create.uri')); // @codeCoverageIgnore } @@ -403,10 +403,12 @@ class RuleController extends Controller $matcher->setTriggers($triggers); try { $matchingTransactions = $matcher->findTransactionsByTriggers(); + // @codeCoverageIgnoreStart } catch (FireflyException $exception) { Log::error(sprintf('Could not grab transactions in testTriggers(): %s', $exception->getMessage())); Log::error($exception->getTraceAsString()); } + // @codeCoverageIgnoreStart // Warn the user if only a subset of transactions is returned @@ -422,10 +424,12 @@ class RuleController extends Controller $view = 'ERROR, see logs.'; try { $view = view('list.journals-tiny', ['transactions' => $matchingTransactions])->render(); + // @codeCoverageIgnoreStart } catch (Throwable $exception) { Log::error(sprintf('Could not render view in testTriggers(): %s', $exception->getMessage())); Log::error($exception->getTraceAsString()); } + // @codeCoverageIgnoreEnd return response()->json(['html' => $view, 'warning' => $warning]); } @@ -461,10 +465,12 @@ class RuleController extends Controller $matcher->setRule($rule); try { $matchingTransactions = $matcher->findTransactionsByRule(); + // @codeCoverageIgnoreStart } catch (FireflyException $exception) { Log::error(sprintf('Could not grab transactions in testTriggersByRule(): %s', $exception->getMessage())); Log::error($exception->getTraceAsString()); } + // @codeCoverageIgnoreEnd // Warn the user if only a subset of transactions is returned $warning = ''; @@ -479,10 +485,12 @@ class RuleController extends Controller $view = 'ERROR, see logs.'; try { $view = view('list.journals-tiny', ['transactions' => $matchingTransactions])->render(); + // @codeCoverageIgnoreStart } catch (Throwable $exception) { Log::error(sprintf('Could not render view in testTriggersByRule(): %s', $exception->getMessage())); Log::error($exception->getTraceAsString()); } + // @codeCoverageIgnoreEnd return response()->json(['html' => $view, 'warning' => $warning]); } @@ -587,10 +595,12 @@ class RuleController extends Controller 'count' => 1, ] )->render(); + // @codeCoverageIgnoreStart } catch (Throwable $e) { Log::error(sprintf('Throwable was thrown in getActionsForBill(): %s', $e->getMessage())); Log::error($e->getTraceAsString()); } + // @codeCoverageIgnoreEnd return $actions; } @@ -620,10 +630,12 @@ class RuleController extends Controller 'count' => $count, ] )->render(); + // @codeCoverageIgnoreStart } catch (Throwable $e) { Log::debug(sprintf('Throwable was thrown in getCurrentActions(): %s', $e->getMessage())); Log::error($e->getTraceAsString()); } + // @codeCoverageIgnoreEnd ++$index; } @@ -655,10 +667,12 @@ class RuleController extends Controller 'count' => $count, ] )->render(); + // @codeCoverageIgnoreStart } catch (Throwable $e) { Log::debug(sprintf('Throwable was thrown in getCurrentTriggers(): %s', $e->getMessage())); Log::error($e->getTraceAsString()); } + // @codeCoverageIgnoreEnd ++$index; } } @@ -691,10 +705,12 @@ class RuleController extends Controller 'count' => $count, ] )->render(); + // @codeCoverageIgnoreStart } catch (Throwable $e) { Log::debug(sprintf('Throwable was thrown in getPreviousActions(): %s', $e->getMessage())); Log::error($e->getTraceAsString()); } + // @codeCoverageIgnoreEnd ++$newIndex; } @@ -727,10 +743,12 @@ class RuleController extends Controller 'count' => $count, ] )->render(); + // @codeCoverageIgnoreStart } catch (Throwable $e) { Log::debug(sprintf('Throwable was thrown in getPreviousTriggers(): %s', $e->getMessage())); Log::error($e->getTraceAsString()); } + // @codeCoverageIgnoreEnd ++$newIndex; } @@ -786,10 +804,12 @@ class RuleController extends Controller 'count' => 4, ] )->render(); + // @codeCoverageIgnoreStart } catch (Throwable $e) { Log::debug(sprintf('Throwable was thrown in getTriggersForBill(): %s', $e->getMessage())); Log::debug($e->getTraceAsString()); } + // @codeCoverageIgnoreEnd return $triggers; } diff --git a/app/Models/Rule.php b/app/Models/Rule.php index ac3cc0e992..e6e65ba73e 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -34,6 +34,7 @@ use FireflyIII\Models\RuleAction; * Class Rule. * @property bool $stop_processing * @property int $id + * @property \Illuminate\Support\Collection $ruleTriggers */ class Rule extends Model { diff --git a/app/Models/RuleTrigger.php b/app/Models/RuleTrigger.php index 3b68656a91..58265d0d1c 100644 --- a/app/Models/RuleTrigger.php +++ b/app/Models/RuleTrigger.php @@ -23,10 +23,12 @@ declare(strict_types=1); namespace FireflyIII\Models; use Illuminate\Database\Eloquent\Model; -use FireflyIII\Models\Rule; /** * Class RuleTrigger. + * + * @property string $trigger_value + * @property string $trigger_type */ class RuleTrigger extends Model { diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index bdd5253e1c..b591f1d956 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -71,6 +71,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property string $description * @property bool $is_split * @property int $attachmentCount + * @property int $transaction_currency_id */ class Transaction extends Model { diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index ef74e55f19..439962a257 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -31,6 +31,7 @@ use FireflyIII\Models\TransactionJournal; * Class TransactionCurrency. * * @property string $code + * @property int $decimal_places * */ class TransactionCurrency extends Model diff --git a/resources/views/debug.twig b/resources/views/debug.twig index 7b8c0a26cb..7d57662635 100644 --- a/resources/views/debug.twig +++ b/resources/views/debug.twig @@ -38,6 +38,7 @@ Debug information generated at {{ now }} for Firefly III version **{{ FF_VERSION {% if SANDSTORM == true %}| Sandstorm anon? | {% if SANDSTORM_ANON == true %}yes{% else %}no{% endif %} |{% endif %} | Is Sandstorm (.env) | {{ isSandstorm }} | | Is Docker (.env) | {{ isDocker }} | +| bunq uses sandbox | {{ toSandbox }} | | Trusted proxies (.env) | {{ trustedProxies }} | | User agent | {{ userAgent }} | | Loaded extensions | {{ extensions }} | diff --git a/tests/Feature/Controllers/AccountControllerTest.php b/tests/Feature/Controllers/AccountControllerTest.php index 290a766cc6..290b47e3b9 100644 --- a/tests/Feature/Controllers/AccountControllerTest.php +++ b/tests/Feature/Controllers/AccountControllerTest.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace Tests\Feature\Controllers; +use Amount; use Carbon\Carbon; use FireflyIII\Helpers\Collector\JournalCollectorInterface; use FireflyIII\Models\Account; @@ -159,6 +160,41 @@ class AccountControllerTest extends TestCase $response->assertSee($note->text); } + /** + * @covers \FireflyIII\Http\Controllers\AccountController + */ + public function testEditNull(): void + { + $note = new Note(); + $note->text = 'This is a test'; + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $repository = $this->mock(CurrencyRepositoryInterface::class); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + + Amount::shouldReceive('getDefaultCurrency')->andReturn(TransactionCurrency::find(2)); + $repository->shouldReceive('findNull')->once()->andReturn(null); + $repository->shouldReceive('get')->andReturn(new Collection); + $journalRepos->shouldReceive('firstNull')->once()->andReturn(new TransactionJournal); + $accountRepos->shouldReceive('getNote')->andReturn($note)->once(); + $accountRepos->shouldReceive('getOpeningBalanceAmount')->andReturnNull(); + $accountRepos->shouldReceive('getOpeningBalanceDate')->andReturnNull(); + $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'currency_id'])->andReturn('1'); + $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'accountNumber'])->andReturn('123'); + $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'accountRole'])->andReturn('defaultAsset'); + $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'ccType'])->andReturn(''); + $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'ccMonthlyPaymentDate'])->andReturn(''); + $accountRepos->shouldReceive('getMetaValue')->withArgs([Mockery::any(), 'BIC'])->andReturn('BIC'); + + $this->be($this->user()); + $account = $this->user()->accounts()->where('account_type_id', 3)->whereNull('deleted_at')->first(); + $response = $this->get(route('accounts.edit', [$account->id])); + $response->assertStatus(200); + // has bread crumb + $response->assertSee('