Improve test coverage.

This commit is contained in:
James Cole 2019-07-25 14:19:49 +02:00
parent ee95606ec0
commit 6ff4a0b45c
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
61 changed files with 822 additions and 599 deletions

View File

@ -86,6 +86,7 @@ class Note extends Model
/**
* @param $value
* @codeCoverageIgnore
*/
public function setTextAttribute($value): void
{

View File

@ -38,7 +38,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property int $id
* @property User user
* @property int $user_id
* @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\Models\Preference newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\Models\Preference newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\Models\Preference query()

View File

@ -147,6 +147,7 @@ class Rule extends Model
/**
* @param $value
* @codeCoverageIgnore
*/
public function setDescriptionAttribute($value): void
{

View File

@ -102,10 +102,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property Carbon updated_at
* @property string foreign_currency_code
* @SuppressWarnings (PHPMD.TooManyPublicMethods)
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property \Illuminate\Support\Carbon|null $deleted_at
* @property bool $reconciled
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Budget[] $budgets
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Category[] $categories
* @method static \Illuminate\Database\Eloquent\Builder|\FireflyIII\Models\Transaction after(\Carbon\Carbon $date)
@ -185,30 +182,6 @@ class Transaction extends Model
return false;
}
/**
* Route binder. Converts the key in the URL to the specified object (or throw 404).
*
* @param string $value
*
* @return Transaction
* @throws NotFoundHttpException
*/
public static function routeBinder(string $value): Transaction
{
if (auth()->check()) {
$transactionId = (int)$value;
/** @var User $user */
$user = auth()->user();
/** @var Transaction $transaction */
$transaction = $user->transactions()->where('transactions.id', $transactionId)->first(['transactions.*']);
if (null !== $transaction) {
return $transaction;
}
}
throw new NotFoundHttpException;
}
/**
* Get the account this object belongs to.

View File

@ -46,11 +46,13 @@ class BudgetList implements BinderInterface
//Log::debug(sprintf('Now in BudgetList::routeBinder("%s")', $value));
if (auth()->check()) {
$list = array_unique(array_map('\intval', explode(',', $value)));
//Log::debug('List is now', $list);
// @codeCoverageIgnoreStart
if (0 === count($list)) {
Log::warning('Budget list count is zero, return 404.');
throw new NotFoundHttpException; // @codeCoverageIgnore
throw new NotFoundHttpException;
}
// @codeCoverageIgnoreEnd
/** @var Collection $collection */
$collection = auth()->user()->budgets()

View File

@ -44,8 +44,14 @@ class ImportProvider implements BinderInterface
{
$repository = app(UserRepositoryInterface::class);
// get and filter all import routines:
if (!auth()->check()) {
return [];
}
/** @var User $user */
$user = auth()->user();
/** @var array $config */
$providerNames = array_keys(config('import.enabled'));
$providers = [];
@ -55,13 +61,20 @@ class ImportProvider implements BinderInterface
// only consider enabled providers
$enabled = (bool)config(sprintf('import.enabled.%s', $providerName));
$allowedForUser = (bool)config(sprintf('import.allowed_for_user.%s', $providerName));
$allowedForDemo = (bool)config(sprintf('import.allowed_for_demo.%s', $providerName));
if (false === $enabled) {
continue;
}
if (false === $isDemoUser && false === $allowedForUser && false === $isDebug) {
continue; // @codeCoverageIgnore
if (false === $allowedForUser && !$isDemoUser) {
continue;
}
if (false === $allowedForDemo && $isDemoUser) {
continue;
}
// if (false === $isDemoUser && false === $allowedForUser && false === $isDebug) {
// continue;
// }
$providers[$providerName] = [
'has_prereq' => (bool)config('import.has_prereq.' . $providerName),

View File

@ -46,17 +46,20 @@ class TagList implements BinderInterface
if (auth()->check()) {
$list = array_unique(array_map('\strtolower', explode(',', $value)));
Log::debug('List of tags is', $list);
// @codeCoverageIgnoreStart
if (0 === count($list)) {
Log::error('Tag list is empty.');
throw new NotFoundHttpException; // @codeCoverageIgnore
throw new NotFoundHttpException;
}
// @codeCoverageIgnoreEnd
/** @var TagRepositoryInterface $repository */
$repository = app(TagRepositoryInterface::class);
$repository->setUser(auth()->user());
$allTags = $repository->get();
$collection = $allTags->filter(
function (Tag $tag) use ($list) {
static function (Tag $tag) use ($list) {
if (in_array(strtolower($tag->tag), $list, true)) {
return true;
}

View File

@ -1,53 +0,0 @@
<?php
/**
* TransactionGroup.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III.
*
* Firefly III is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Firefly III is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Support\Binder;
use FireflyIII\Models\TransactionJournal;
use Illuminate\Routing\Route;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Class TransactionGroup.
*/
class TransactionGroup implements BinderInterface
{
/**
* @param string $value
* @param Route $route
*
* @return TransactionGroup
* @throws NotFoundHttpException
*/
public static function routeBinder(string $value, Route $route): TransactionGroup
{
if (auth()->check()) {
$group = auth()->user()->transactionGroups()
->find($value);
if (null !== $group) {
return $group;
}
}
throw new NotFoundHttpException;
}
}

View File

@ -1,55 +0,0 @@
<?php
/**
* UnfinishedJournal.php
* Copyright (c) 2017 thegrumpydictator@gmail.com
*
* This file is part of Firefly III.
*
* Firefly III is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Firefly III is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Support\Binder;
use FireflyIII\Models\TransactionJournal;
use Illuminate\Routing\Route;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Class Date.
*/
class UnfinishedJournal implements BinderInterface
{
/**
* @param string $value
* @param Route $route
*
* @return TransactionJournal
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public static function routeBinder(string $value, Route $route): TransactionJournal
{
if (auth()->check()) {
$journal = auth()->user()->transactionJournals()->where('transaction_journals.id', $value)
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
->where('completed', 0)
->where('user_id', auth()->user()->id)->first(['transaction_journals.*']);
if (null !== $journal) {
return $journal;
}
}
throw new NotFoundHttpException;
}
}

View File

@ -23,7 +23,6 @@
declare(strict_types=1);
use FireflyIII\Export\Exporter\CsvExporter;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Attachment;
@ -32,7 +31,6 @@ use FireflyIII\Models\Bill;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\Category;
use FireflyIII\Models\ExportJob;
use FireflyIII\Models\ImportJob;
use FireflyIII\Models\LinkType;
use FireflyIII\Models\PiggyBank;
@ -41,7 +39,6 @@ use FireflyIII\Models\Recurrence;
use FireflyIII\Models\Rule;
use FireflyIII\Models\RuleGroup;
use FireflyIII\Models\Tag;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
@ -60,7 +57,6 @@ use FireflyIII\Support\Binder\ImportProvider;
use FireflyIII\Support\Binder\JournalList;
use FireflyIII\Support\Binder\TagList;
use FireflyIII\Support\Binder\TagOrId;
use FireflyIII\Support\Binder\UnfinishedJournal;
use FireflyIII\TransactionRules\Actions\AddTag;
use FireflyIII\TransactionRules\Actions\AppendDescription;
use FireflyIII\TransactionRules\Actions\AppendNotes;
@ -377,7 +373,6 @@ return [
'rule' => Rule::class,
'ruleGroup' => RuleGroup::class,
'importJob' => ImportJob::class,
'transaction' => Transaction::class,
'transactionGroup' => TransactionGroup::class,
'user' => User::class,
@ -401,7 +396,6 @@ return [
// others
'fromCurrencyCode' => CurrencyCode::class,
'toCurrencyCode' => CurrencyCode::class,
'unfinishedJournal' => UnfinishedJournal::class,
'cliToken' => CLIToken::class,
'tagOrId' => TagOrId::class,
'configName' => ConfigurationName::class,

View File

@ -23,9 +23,7 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers;
use FireflyIII\Models\Attachment;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Collection;
use Log;

View File

@ -67,7 +67,6 @@ class EditControllerTest extends TestCase
}
/**
* @covers \FireflyIII\Http\Controllers\Category\EditController
* @covers \FireflyIII\Http\Requests\CategoryFormRequest

View File

@ -26,12 +26,9 @@ use Carbon\Carbon;
use Exception;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Preference;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;

View File

@ -27,9 +27,7 @@ use Exception;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;

View File

@ -26,10 +26,6 @@ use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Chart\MetaPieChartInterface;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\TransactionType;
@ -39,6 +35,7 @@ use Log;
use Preferences;
use Tests\TestCase;
/**
* Class BudgetReportControllerTest
*/

View File

@ -26,18 +26,13 @@ use Carbon\Carbon;
use FireflyIII\Generator\Chart\Basic\GeneratorInterface;
use FireflyIII\Helpers\Chart\MetaPieChartInterface;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionType;
use Log;
use Preferences;
use Tests\TestCase;
/**
* Class CategoryReportControllerTest
*/

View File

@ -24,9 +24,7 @@ namespace Tests\Feature\Controllers;
use FireflyIII\Models\Preference;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Collection;
use Log;

View File

@ -22,8 +22,6 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Log;
use Mockery;

View File

@ -29,9 +29,9 @@ use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\MessageBag;
use Log;
use Mockery;
use Preferences;
use Tests\TestCase;
use Preferences;
/**
* Class AccountControllerTest
*
@ -74,7 +74,6 @@ class PrerequisitesControllerTest extends TestCase
Preferences::shouldReceive('getForUser')->atLeast()->once()->withArgs([Mockery::any(), 'ynab_client_id', null])->andReturnNull();
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->atLeast()->once()->andReturn(false);

View File

@ -111,7 +111,8 @@ class BoxControllerTest extends TestCase
* @covers \FireflyIII\Http\Controllers\Json\BoxController
*/
public function testBalance(): void
{ $this->mockDefaultSession();
{
$this->mockDefaultSession();
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$collector = $this->mock(GroupCollectorInterface::class);

View File

@ -24,7 +24,6 @@ namespace Tests\Feature\Controllers\Json;
use Carbon\Carbon;
use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Models\CurrencyExchangeRate;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Services\Currency\ExchangeRateInterface;
use Log;

View File

@ -23,8 +23,8 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Json;
use Log;
use Tests\TestCase;
use Preferences;
use Tests\TestCase;
/**
* Class IntroControllerTest

View File

@ -27,14 +27,10 @@ namespace Tests\Feature\Controllers\Json;
use Amount;
use Carbon\Carbon;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use Illuminate\Support\Collection;
use Log;
use Mockery;
use Preferences;

View File

@ -22,8 +22,6 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use Log;
use Tests\TestCase;

View File

@ -22,7 +22,6 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;

View File

@ -25,13 +25,10 @@ namespace Tests\Feature\Controllers\Popup;
use Amount;
use Carbon\Carbon;
use FireflyIII\Helpers\Report\PopupReportInterface;
use FireflyIII\Models\Account;
use FireflyIII\Models\Budget;
use FireflyIII\Models\Category;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use Illuminate\Support\Collection;
use Log;
use Tests\TestCase;

View File

@ -24,9 +24,7 @@ namespace Tests\Feature\Controllers;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Preference;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Collection;
use Log;

View File

@ -24,8 +24,6 @@ namespace Tests\Feature\Controllers;
use Amount;
use FireflyIII\Models\Preference;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\User;
use Google2FA;
@ -33,6 +31,7 @@ use Illuminate\Support\Collection;
use Log;
use Mockery;
use Preferences;
use stdClass;
use Tests\TestCase;
/**
@ -133,7 +132,7 @@ class ProfileControllerTest extends TestCase
$repository->shouldReceive('unblockUser');
$preference = new Preference;
$preference->data = 'existing-token';
/** @var \stdClass $preference */
/** @var stdClass $preference */
$preference->user = $this->user();
Preferences::shouldReceive('findByName')->withArgs(['email_change_confirm_token'])->andReturn(new Collection([$preference]));
// email_change_confirm_token
@ -534,12 +533,12 @@ class ProfileControllerTest extends TestCase
$hash = hash('sha256', 'previous@example.com');
$tokenPreference = new Preference;
$tokenPreference->data = 'token';
/** @var \stdClass $tokenPreference */
/** @var stdClass $tokenPreference */
$tokenPreference->user = $this->user();
$hashPreference = new Preference;
$hashPreference->data = 'previous@example.com';
/** @var \stdClass $hashPreference */
/** @var stdClass $hashPreference */
$hashPreference->user = $this->user();
Preferences::shouldReceive('findByName')->once()->andReturn(new Collection([$tokenPreference]));
@ -567,12 +566,12 @@ class ProfileControllerTest extends TestCase
$hash = hash('sha256', 'previous@example.comX');
$tokenPreference = new Preference;
$tokenPreference->data = 'token';
/** @var \stdClass $tokenPreference */
/** @var stdClass $tokenPreference */
$tokenPreference->user = $this->user();
$hashPreference = new Preference;
$hashPreference->data = 'previous@example.com';
/** @var \stdClass $hashPreference */
/** @var stdClass $hashPreference */
$hashPreference->user = $this->user();
Preferences::shouldReceive('findByName')->once()->andReturn(new Collection([$tokenPreference]));

View File

@ -29,7 +29,6 @@ use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Recurring;
use FireflyConfig;
use FireflyIII\Factory\CategoryFactory;
use FireflyIII\Models\Configuration;
use FireflyIII\Models\Preference;
@ -91,7 +92,7 @@ class IndexControllerTest extends TestCase
$collection = $this->user()->recurrences()->take(2)->get();
// mock cron job config:
\FireflyConfig::shouldReceive('get')->withArgs(['last_rt_job', 0])->once()->andReturn($config);
FireflyConfig::shouldReceive('get')->withArgs(['last_rt_job', 0])->once()->andReturn($config);
$repository->shouldReceive('get')->andReturn($collection)->once();
@ -125,9 +126,9 @@ class IndexControllerTest extends TestCase
'recurrence_repetitions' => [
[
'occurrences' => [
'2019-01-01'
]
]
'2019-01-01',
],
],
],
]
);

View File

@ -25,9 +25,7 @@ namespace tests\Feature\Controllers\Rule;
use FireflyIII\Models\Rule;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;

View File

@ -24,8 +24,6 @@ declare(strict_types=1);
namespace tests\Feature\Controllers\Rule;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Log;
@ -63,7 +61,6 @@ class DeleteControllerTest extends TestCase
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$this->be($this->user());
$response = $this->get(route('rules.delete', [1]));
$response->assertStatus(200);

View File

@ -25,8 +25,6 @@ namespace tests\Feature\Controllers\Rule;
use FireflyIII\Models\Rule;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;

View File

@ -23,8 +23,6 @@ declare(strict_types=1);
namespace Tests\Feature\Controllers\Rule;
use FireflyIII\Models\RuleGroup;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;

View File

@ -26,10 +26,7 @@ namespace tests\Feature\Controllers\Rule;
use Carbon\Carbon;
use FireflyIII\Jobs\ExecuteRuleOnExistingTransactions;
use FireflyIII\Jobs\Job;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\TransactionRules\TransactionMatcher;
@ -193,7 +190,6 @@ class SelectControllerTest extends TestCase
$accountRepos = $this->mock(AccountRepositoryInterface::class);
$matcher->shouldReceive('setStrict')->once()->withArgs([false]);
$matcher->shouldReceive('setTriggeredLimit')->withArgs([10])->andReturnSelf()->once();

View File

@ -24,9 +24,7 @@ namespace Tests\Feature\Controllers\RuleGroup;
use Carbon\Carbon;
use FireflyIII\Jobs\ExecuteRuleGroupOnExistingTransactions;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Collection;
use Log;

View File

@ -30,6 +30,7 @@ use FireflyIII\Support\Cronjobs\RecurringCronjob;
use Illuminate\Support\Collection;
use Log;
use Mockery;
use Preferences;
use Tests\TestCase;
/**
@ -61,7 +62,7 @@ class CronControllerTest extends TestCase
$job->shouldReceive('fire')->once()->andReturn(true);
$repository = $this->mock(UserRepositoryInterface::class);
$repository->shouldReceive('all')->andReturn($users);
\Preferences::shouldReceive('getForUser')
Preferences::shouldReceive('getForUser')
->withArgs([Mockery::any(), 'access_token', null])
->andReturn($preference)->once();
$response = $this->get(route('cron.cron', ['token']));
@ -83,7 +84,7 @@ class CronControllerTest extends TestCase
$job->shouldReceive('fire')->once()->andThrow(new FireflyException('Exception noted.'));
$repository = $this->mock(UserRepositoryInterface::class);
$repository->shouldReceive('all')->andReturn($users);
\Preferences::shouldReceive('getForUser')
Preferences::shouldReceive('getForUser')
->withArgs([Mockery::any(), 'access_token', null])
->andReturn($preference)->once();
$response = $this->get(route('cron.cron', ['token']));
@ -105,7 +106,7 @@ class CronControllerTest extends TestCase
$job->shouldReceive('fire')->once()->andReturn(false);
$repository = $this->mock(UserRepositoryInterface::class);
$repository->shouldReceive('all')->andReturn($users);
\Preferences::shouldReceive('getForUser')
Preferences::shouldReceive('getForUser')
->withArgs([Mockery::any(), 'access_token', null])
->andReturn($preference)->once();
$response = $this->get(route('cron.cron', ['token']));

View File

@ -29,11 +29,9 @@ use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Models\Preference;
use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Log;
use Mockery;
use Preferences;

View File

@ -24,10 +24,8 @@ namespace Tests\Feature\Controllers\Transaction;
use Amount;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
@ -193,8 +191,6 @@ class ConvertControllerTest extends TestCase
$validator->shouldReceive('validateDestination')->atLeast()->once()->andReturn(true);
$data = ['source_account_id' => 1];
$this->be($this->user());
$response = $this->post(route('transactions.convert.index.post', ['transfer', $deposit->id]), $data);

View File

@ -26,9 +26,9 @@ use FireflyIII\Models\Preference;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Log;
use Mockery;
use Preferences;
use Tests\TestCase;
use Mockery;
/**
* Class CreateControllerTest

View File

@ -25,7 +25,6 @@ namespace Tests\Feature\Controllers\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionJournalLink;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Collection;
@ -60,8 +59,6 @@ class LinkControllerTest extends TestCase
$userRepos = $this->mock(UserRepositoryInterface::class);
$userRepos->shouldReceive('hasRole')->withArgs([Mockery::any(), 'owner'])->atLeast()->once()->andReturn(true);
$this->be($this->user());
@ -80,7 +77,6 @@ class LinkControllerTest extends TestCase
$linkRepos = $this->mock(LinkTypeRepositoryInterface::class);
$linkRepos->shouldReceive('get')->atLeast()->once()->andReturn(new Collection);
$this->be($this->user());

View File

@ -25,15 +25,26 @@ namespace Tests\Unit\Middleware;
use Carbon\Carbon;
use FireflyIII\Helpers\FiscalHelperInterface;
use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
use FireflyIII\Http\Middleware\Binder;
use FireflyIII\Import\Prerequisites\PrerequisitesInterface;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\AvailableBudget;
use FireflyIII\Models\Preference;
use FireflyIII\Models\Recurrence;
use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Collection;
use Log;
use Mockery;
use Preferences;
use Route;
use Symfony\Component\HttpFoundation\Response;
use Tests\TestCase;
/**
* Class BinderTest
* Per object: works, not existing, not logged in + existing
@ -76,6 +87,28 @@ class BinderTest extends TestCase
$response->assertSee('count: 2');
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\AccountList
*/
public function testAccountListAllAssets(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{accountList}', function (Collection $accounts) {
return 'count: ' . $accounts->count();
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/allAssetAccounts');
$count = $this->user()->accounts()
->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
->where('account_types.type', AccountType::ASSET)
->orderBy('accounts.name', 'ASC')
->count();
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee(sprintf('count: %d', $count));
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\AccountList
@ -357,6 +390,223 @@ class BinderTest extends TestCase
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\BudgetList
*/
public function testBudgetListEmpty(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{budgetList}', function (Collection $budgets) {
return 'count: ' . $budgets->count();
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\CLIToken
*/
public function testCLIToken(): void
{
$repos = $this->mock(UserRepositoryInterface::class);
$repos->shouldReceive('all')->andReturn(new Collection([$this->user()]))->atLeast()->once();
$token = new Preference;
$token->data = 'token';
Preferences::shouldReceive('getForUser')->withArgs([Mockery::any(), 'access_token', null])->atLeast()->once()->andReturn($token);
Route::middleware(Binder::class)->any(
'/_test/binder/{cliToken}', static function (string $token) {
return sprintf('token: %s', $token);
}
);
$response = $this->get('/_test/binder/token');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee('token');
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\CLIToken
*/
public function testCLITokenNotFound(): void
{
$repos = $this->mock(UserRepositoryInterface::class);
$repos->shouldReceive('all')->andReturn(new Collection([$this->user()]))->atLeast()->once();
$token = new Preference;
$token->data = 'token';
Preferences::shouldReceive('getForUser')->withArgs([Mockery::any(), 'access_token', null])->atLeast()->once()->andReturn($token);
Route::middleware(Binder::class)->any(
'/_test/binder/{cliToken}', static function (string $token) {
return sprintf('token: %s', $token);
}
);
$response = $this->get('/_test/binder/tokenX');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\ConfigurationName
*/
public function testConfigName(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{configName}', static function (string $name) {
return sprintf('configName: %s', $name);
}
);
$response = $this->get('/_test/binder/is_demo_site');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee('is_demo_site');
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\ConfigurationName
*/
public function testConfigNameNotFOund(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{configName}', static function (string $name) {
return sprintf('configName: %s', $name);
}
);
$response = $this->get('/_test/binder/is_demoX_site');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* Normal user can access file routine
*
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\ImportProvider
*/
public function testImportProvider(): void
{
$repository = $this->mock(UserRepositoryInterface::class);
$this->mock(PrerequisitesInterface::class);
$repository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(false)->atLeast()->once();
Route::middleware(Binder::class)->any(
'/_test/binder/{import_provider}', static function (string $name) {
return sprintf('import_provider: %s', $name);
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/file');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee('file');
}
/**
* Normal user cannot access fake import routine.
*
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\ImportProvider
*/
public function testImportProviderFake(): void
{
$repository = $this->mock(UserRepositoryInterface::class);
$this->mock(PrerequisitesInterface::class);
$repository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(false)->atLeast()->once();
Route::middleware(Binder::class)->any(
'/_test/binder/{import_provider}', static function (string $name) {
return sprintf('import_provider: %s', $name);
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/fake');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* Nobody can access "bad" import routine.
*
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\ImportProvider
*/
public function testImportProviderBad(): void
{
$repository = $this->mock(UserRepositoryInterface::class);
$this->mock(PrerequisitesInterface::class);
$repository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(false)->atLeast()->once();
Route::middleware(Binder::class)->any(
'/_test/binder/{import_provider}', static function (string $name) {
return sprintf('import_provider: %s', $name);
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/bad');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* Demo user cannot access file import routine.
*
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\ImportProvider
*/
public function testImportProviderDemoFile(): void
{
$repository = $this->mock(UserRepositoryInterface::class);
$this->mock(PrerequisitesInterface::class);
$repository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(true)->atLeast()->once();
Route::middleware(Binder::class)->any(
'/_test/binder/{import_provider}', static function (string $name) {
return sprintf('import_provider: %s', $name);
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/file');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\ImportProvider
*/
public function testImportProviderNotLoggedIn(): void
{
$this->mock(UserRepositoryInterface::class);
$this->mock(PrerequisitesInterface::class);
Route::middleware(Binder::class)->any(
'/_test/binder/{import_provider}', static function (string $name) {
return sprintf('import_provider: %s', $name);
}
);
$response = $this->get('/_test/binder/file');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\Budget
@ -730,56 +980,6 @@ class BinderTest extends TestCase
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\ExportJob
*/
public function testExportJob(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{exportJob}', function () {
return 'OK';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/testExport');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\ExportJob
*/
public function testExportJobNotFound(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{exportJob}', function () {
return 'OK';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/0');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\ExportJob
*/
public function testExportJobNotLoggedIn(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{exportJob}', function () {
return 'OK';
}
);
$response = $this->get('/_test/binder/testExport');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\ImportJob
@ -836,16 +1036,15 @@ class BinderTest extends TestCase
*/
public function testJournalList(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{journalList}', function (Collection $journals) {
return 'count: ' . $journals->count();
'/_test/binder/{journalList}', static function (array $journals) {
return 'count: ' . count($journals);
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/1,2');
$withdrawal = $this->getRandomWithdrawal();
$deposit = $this->getRandomDeposit();
$response = $this->get(sprintf('/_test/binder/%d,%d', $withdrawal->id, $deposit->id));
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee('count: 2');
}
@ -856,19 +1055,33 @@ class BinderTest extends TestCase
*/
public function testJournalListEmpty(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{journalList}', function (Collection $journals) {
return 'count: ' . $journals->count();
}
);
'/_test/binder/{journalList}', static function (array $journals) {
return 'count: ' . count($journals);
});
$this->be($this->user());
$response = $this->get('/_test/binder/-1');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* Not logged in.
*
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\JournalList
*/
public function testJournalListNotLoggedIn(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{journalList}', static function (array $journals) {
return 'count: ' . count($journals);
});
$response = $this->get('/_test/binder/-1');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\LinkType
@ -936,6 +1149,141 @@ class BinderTest extends TestCase
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\Preference
*/
public function testPreference(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{preference}', static function (?Preference $preference) {
return $preference->name ?? 'unknown';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/frontPageAccounts');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee('frontPageAccounts');
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\Recurrence
*/
public function testRecurrence(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{recurrence}', static function (?Recurrence $recurrence) {
return $recurrence->description ?? 'unknown';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/1');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\Recurrence
*/
public function testRecurrenceNotFound(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{recurrence}', static function (?Recurrence $recurrence) {
return $recurrence->description ?? 'unknown';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/-1');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\TransactionGroup
*/
public function testTransactionGroup(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{transactionGroup}', static function (?TransactionGroup $transactionGroup) {
return $transactionGroup->title ?? 'unknown';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/1');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\TransactionGroup
*/
public function testTransactionGroupNotFound(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{transactionGroup}', static function (?TransactionGroup $transactionGroup) {
return $transactionGroup->title ?? 'unknown';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/-1');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\AvailableBudget
*/
public function testAvailableBudget(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{availableBudget}', static function (?AvailableBudget $availableBudget) {
return $availableBudget->id ?? 0;
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/1');
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\AvailableBudget
*/
public function testAvailableBudgetNotFound(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{availableBudget}', static function (?AvailableBudget $availableBudget) {
return $availableBudget->id ?? 0;
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/-1');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\Preference
*/
public function testPreferenceNotFound(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{preference}', static function (?Preference $preference) {
return $preference->name ?? 'unknown';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/frontPageAccountsX');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Models\PiggyBank
@ -1075,9 +1423,6 @@ class BinderTest extends TestCase
*/
public function testTJ(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{tj}', function () {
return 'OK';
@ -1095,9 +1440,6 @@ class BinderTest extends TestCase
*/
public function testTJNotFound(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{tj}', function () {
return 'OK';
@ -1115,9 +1457,6 @@ class BinderTest extends TestCase
*/
public function testTJNotLoggedIn(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{tj}', function () {
return 'OK';
@ -1171,6 +1510,139 @@ class BinderTest extends TestCase
$response->assertSee('count: 2');
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\TagList
*/
public function testTagListWithId(): void
{
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tagRepos->shouldReceive('setUser');
$tags = $this->user()->tags()->whereIn('id', [1, 2, 3])->get(['tags.*']);
$tagRepos->shouldReceive('get')->once()->andReturn($tags);
Route::middleware(Binder::class)->any(
'/_test/binder/{tagList}', function (Collection $tags) {
return 'count: ' . $tags->count();
}
);
$first = $tags->get(0);
$second = $tags->get(1);
$this->be($this->user());
$response = $this->get(sprintf('/_test/binder/%s,%d,bleep', $first->tag, $second->id));
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee('count: 2');
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\TagOrId
*/
public function testTagOrIdByTag(): void
{
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->getRandomTag();
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('findByTag')->withArgs([$tag->tag])->andReturn($tag)->atLeast()->once();
Route::middleware(Binder::class)->any(
'/_test/binder/{tagOrId}', static function (?Tag $tag) {
if ($tag) {
return $tag->tag;
}
return 'unfound';
}
);
$this->be($this->user());
$response = $this->get(sprintf('/_test/binder/%s', $tag->tag));
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee($tag->tag);
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\TagOrId
*/
public function testTagOrIdById(): void
{
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->getRandomTag();
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('findByTag')->withArgs([(string)$tag->id])->andReturnNull()->atLeast()->once();
$tagRepos->shouldReceive('findNull')->withArgs([$tag->id])->andReturn($tag)->atLeast()->once();
Route::middleware(Binder::class)->any(
'/_test/binder/{tagOrId}', static function (?Tag $tag) {
if ($tag) {
return $tag->tag;
}
return 'unfound';
}
);
$this->be($this->user());
$response = $this->get(sprintf('/_test/binder/%d', $tag->id));
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$response->assertSee($tag->tag);
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\TagOrId
*/
public function testTagOrIdBothNull(): void
{
$tagRepos = $this->mock(TagRepositoryInterface::class);
$tag = $this->getRandomTag();
$tagRepos->shouldReceive('setUser');
$tagRepos->shouldReceive('findByTag')->withArgs([(string)$tag->id])->andReturnNull()->atLeast()->once();
$tagRepos->shouldReceive('findNull')->withArgs([$tag->id])->andReturnNull()->atLeast()->once();
Route::middleware(Binder::class)->any(
'/_test/binder/{tagOrId}', static function (?Tag $tag) {
if ($tag) {
return $tag->tag;
}
return 'unfound';
}
);
$this->be($this->user());
$response = $this->get(sprintf('/_test/binder/%d', $tag->id));
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\TagOrId
*/
public function testTagOrIdNotLoggedIn(): void
{
Route::middleware(Binder::class)->any(
'/_test/binder/{tagOrId}', static function (?Tag $tag) {
if ($tag) {
return $tag->tag;
}
return 'unfound';
}
);
$response = $this->get(sprintf('/_test/binder/%d', 4));
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\TagList
@ -1280,9 +1752,6 @@ class BinderTest extends TestCase
*/
public function testTransactionJournalLink(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{journalLink}', function () {
return 'OK';
@ -1300,9 +1769,6 @@ class BinderTest extends TestCase
*/
public function testTransactionJournalLinkNotFound(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{journalLink}', function () {
return 'OK';
@ -1320,9 +1786,6 @@ class BinderTest extends TestCase
*/
public function testTransactionJournalLinkNotLoggedIn(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
Route::middleware(Binder::class)->any(
'/_test/binder/{journalLink}', function () {
return 'OK';
@ -1382,64 +1845,4 @@ class BinderTest extends TestCase
$response = $this->get('/_test/binder/withdrawal');
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\UnfinishedJournal
*/
public function testUnfinishedJournal(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
$journal = $this->user()->transactionJournals()->where('completed', 0)->first();
Route::middleware(Binder::class)->any(
'/_test/binder/{unfinishedJournal}', function () {
return 'OK';
}
);
$this->be($this->user());
$response = $this->get('/_test/binder/' . $journal->id);
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\UnfinishedJournal
*/
public function testUnfinishedJournalFinished(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
$journal = $this->user()->transactionJournals()->where('completed', 1)->first();
Route::middleware(Binder::class)->any(
'/_test/binder/{unfinishedJournal}', function () {
return 'OK';
}
);
$response = $this->get('/_test/binder/' . $journal->id);
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
/**
* @covers \FireflyIII\Http\Middleware\Binder
* @covers \FireflyIII\Support\Binder\UnfinishedJournal
*/
public function testUnfinishedJournalNotLoggedIn(): void
{
$this->markTestIncomplete('Needs to be rewritten for v4.8.0');
return;
$journal = $this->user()->transactionJournals()->where('completed', 0)->first();
Route::middleware(Binder::class)->any(
'/_test/binder/{unfinishedJournal}', function () {
return 'OK';
}
);
$response = $this->get('/_test/binder/' . $journal->id);
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
}
}