mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Expand test coverage.
This commit is contained in:
parent
8bd76d1ff0
commit
08b743ddcb
@ -276,6 +276,9 @@ class BudgetController extends Controller
|
|||||||
$cache->addProperty($end);
|
$cache->addProperty($end);
|
||||||
$cache->addProperty('info-income');
|
$cache->addProperty('info-income');
|
||||||
|
|
||||||
|
Log::debug(sprintf('infoIncome start is %s', $start->format('Y-m-d')));
|
||||||
|
Log::debug(sprintf('infoIncome end is %s', $end->format('Y-m-d')));
|
||||||
|
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
// @codeCoverageIgnoreStart
|
// @codeCoverageIgnoreStart
|
||||||
$result = $cache->get();
|
$result = $cache->get();
|
||||||
@ -292,18 +295,24 @@ class BudgetController extends Controller
|
|||||||
$range = Preferences::get('viewRange', '1M')->data;
|
$range = Preferences::get('viewRange', '1M')->data;
|
||||||
$begin = app('navigation')->subtractPeriod($start, $range, 3);
|
$begin = app('navigation')->subtractPeriod($start, $range, 3);
|
||||||
|
|
||||||
|
Log::debug(sprintf('Range is %s', $range));
|
||||||
|
Log::debug(sprintf('infoIncome begin is %s', $begin->format('Y-m-d')));
|
||||||
|
|
||||||
// get average amount available.
|
// get average amount available.
|
||||||
$total = '0';
|
$total = '0';
|
||||||
$count = 0;
|
$count = 0;
|
||||||
$currentStart = clone $begin;
|
$currentStart = clone $begin;
|
||||||
while ($currentStart < $start) {
|
while ($currentStart < $start) {
|
||||||
|
Log::debug(sprintf('Loop: currentStart is %s', $currentStart->format('Y-m-d')));
|
||||||
$currentEnd = app('navigation')->endOfPeriod($currentStart, $range);
|
$currentEnd = app('navigation')->endOfPeriod($currentStart, $range);
|
||||||
$total = bcadd($total, $this->repository->getAvailableBudget($currency, $currentStart, $currentEnd));
|
$total = bcadd($total, $this->repository->getAvailableBudget($currency, $currentStart, $currentEnd));
|
||||||
$currentStart = app('navigation')->addPeriod($currentStart, $range, 0);
|
$currentStart = app('navigation')->addPeriod($currentStart, $range, 0);
|
||||||
++$count;
|
++$count;
|
||||||
}
|
}
|
||||||
|
Log::debug('Loop end');
|
||||||
|
|
||||||
if (0 === $count) {
|
if (0 === $count) {
|
||||||
$count = 1; // @codeCoverageIgnore
|
$count = 1;
|
||||||
}
|
}
|
||||||
$result['available'] = bcdiv($total, strval($count));
|
$result['available'] = bcdiv($total, strval($count));
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ class IndexController extends Controller
|
|||||||
public function create(string $bank)
|
public function create(string $bank)
|
||||||
{
|
{
|
||||||
if (true === !(config(sprintf('import.enabled.%s', $bank)))) {
|
if (true === !(config(sprintf('import.enabled.%s', $bank)))) {
|
||||||
throw new FireflyException(sprintf('Cannot import from "%s" at this time.', $bank));
|
throw new FireflyException(sprintf('Cannot import from "%s" at this time.', $bank)); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
$importJob = $this->repository->create($bank);
|
$importJob = $this->repository->create($bank);
|
||||||
|
@ -24,6 +24,7 @@ namespace FireflyIII\Http\Controllers\Import;
|
|||||||
|
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
|
use FireflyIII\Http\Middleware\IsDemoUser;
|
||||||
use FireflyIII\Import\Prerequisites\PrerequisitesInterface;
|
use FireflyIII\Import\Prerequisites\PrerequisitesInterface;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Log;
|
use Log;
|
||||||
@ -33,6 +34,25 @@ use Log;
|
|||||||
*/
|
*/
|
||||||
class PrerequisitesController extends Controller
|
class PrerequisitesController extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->middleware(
|
||||||
|
function ($request, $next) {
|
||||||
|
app('view')->share('mainTitleIcon', 'fa-archive');
|
||||||
|
app('view')->share('title', trans('firefly.import_index_title'));
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
$this->middleware(IsDemoUser::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Once there are no prerequisites, this method will create an importjob object and
|
* Once there are no prerequisites, this method will create an importjob object and
|
||||||
* redirect the user to a view where this object can be used by a bank specific
|
* redirect the user to a view where this object can be used by a bank specific
|
||||||
@ -47,11 +67,11 @@ class PrerequisitesController extends Controller
|
|||||||
public function index(string $bank)
|
public function index(string $bank)
|
||||||
{
|
{
|
||||||
if (true === !(config(sprintf('import.enabled.%s', $bank)))) {
|
if (true === !(config(sprintf('import.enabled.%s', $bank)))) {
|
||||||
throw new FireflyException(sprintf('Cannot import from "%s" at this time.', $bank));
|
throw new FireflyException(sprintf('Cannot import from "%s" at this time.', $bank)); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
$class = strval(config(sprintf('import.prerequisites.%s', $bank)));
|
$class = strval(config(sprintf('import.prerequisites.%s', $bank)));
|
||||||
if (!class_exists($class)) {
|
if (!class_exists($class)) {
|
||||||
throw new FireflyException(sprintf('No class to handle "%s".', $bank));
|
throw new FireflyException(sprintf('No class to handle "%s".', $bank)); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var PrerequisitesInterface $object */
|
/** @var PrerequisitesInterface $object */
|
||||||
@ -61,7 +81,7 @@ class PrerequisitesController extends Controller
|
|||||||
if ($object->hasPrerequisites()) {
|
if ($object->hasPrerequisites()) {
|
||||||
$view = $object->getView();
|
$view = $object->getView();
|
||||||
$parameters = ['title' => strval(trans('firefly.import_index_title')), 'mainTitleIcon' => 'fa-archive'];
|
$parameters = ['title' => strval(trans('firefly.import_index_title')), 'mainTitleIcon' => 'fa-archive'];
|
||||||
$parameters = $object->getViewParameters() + $parameters;
|
$parameters = array_merge($object->getViewParameters(), $parameters);
|
||||||
|
|
||||||
return view($view, $parameters);
|
return view($view, $parameters);
|
||||||
}
|
}
|
||||||
@ -88,9 +108,14 @@ class PrerequisitesController extends Controller
|
|||||||
public function post(Request $request, string $bank)
|
public function post(Request $request, string $bank)
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('Now in postPrerequisites for %s', $bank));
|
Log::debug(sprintf('Now in postPrerequisites for %s', $bank));
|
||||||
|
|
||||||
|
if (true === !(config(sprintf('import.enabled.%s', $bank)))) {
|
||||||
|
throw new FireflyException(sprintf('Cannot import from "%s" at this time.', $bank)); // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
|
||||||
$class = strval(config(sprintf('import.prerequisites.%s', $bank)));
|
$class = strval(config(sprintf('import.prerequisites.%s', $bank)));
|
||||||
if (!class_exists($class)) {
|
if (!class_exists($class)) {
|
||||||
throw new FireflyException(sprintf('Cannot find class %s', $class));
|
throw new FireflyException(sprintf('Cannot find class %s', $class)); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
/** @var PrerequisitesInterface $object */
|
/** @var PrerequisitesInterface $object */
|
||||||
$object = app($class);
|
$object = app($class);
|
||||||
@ -106,10 +131,8 @@ class PrerequisitesController extends Controller
|
|||||||
|
|
||||||
if ($result->count() > 0) {
|
if ($result->count() > 0) {
|
||||||
$request->session()->flash('error', $result->first());
|
$request->session()->flash('error', $result->first());
|
||||||
|
|
||||||
return redirect(route('import.prerequisites', [$bank]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect(route('import.create-job', [$bank]));
|
return redirect(route('import.prerequisites', [$bank]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,9 +56,9 @@ class StatusController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(ImportJob $job)
|
public function index(ImportJob $job)
|
||||||
{
|
{
|
||||||
$statuses = ['configured', 'running', 'finished', 'errored'];
|
$statuses = ['configured', 'running', 'finished', 'error'];
|
||||||
if (!in_array($job->status, $statuses)) {
|
if (!in_array($job->status, $statuses)) {
|
||||||
return redirect(route('import.file.configure', [$job->key]));
|
return redirect(route('import.configure', [$job->key]));
|
||||||
}
|
}
|
||||||
$subTitle = trans('import.status_sub_title');
|
$subTitle = trans('import.status_sub_title');
|
||||||
$subTitleIcon = 'fa-star';
|
$subTitleIcon = 'fa-star';
|
||||||
@ -108,7 +108,7 @@ class StatusController extends Controller
|
|||||||
$result['running'] = true;
|
$result['running'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO cannot handle 'errored'
|
// TODO cannot handle 'error'
|
||||||
|
|
||||||
return Response::json($result);
|
return Response::json($result);
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ use FireflyIII\Models\AccountType;
|
|||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
|
use Log;
|
||||||
use Response;
|
use Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,7 +82,7 @@ class AutoCompleteController extends Controller
|
|||||||
$set = $repository->getAccountsByType([AccountType::EXPENSE, AccountType::BENEFICIARY]);
|
$set = $repository->getAccountsByType([AccountType::EXPENSE, AccountType::BENEFICIARY]);
|
||||||
$filtered = $set->filter(
|
$filtered = $set->filter(
|
||||||
function (Account $account) {
|
function (Account $account) {
|
||||||
if ($account->active) {
|
if ($account->active === true) {
|
||||||
return $account;
|
return $account;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +139,7 @@ class AutoCompleteController extends Controller
|
|||||||
$set = $repository->getAccountsByType([AccountType::REVENUE]);
|
$set = $repository->getAccountsByType([AccountType::REVENUE]);
|
||||||
$filtered = $set->filter(
|
$filtered = $set->filter(
|
||||||
function (Account $account) {
|
function (Account $account) {
|
||||||
if ($account->active) {
|
if ($account->active === true) {
|
||||||
return $account;
|
return $account;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,8 @@ use Response;
|
|||||||
class IntroController
|
class IntroController
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
* Get the intro steps. There are currently no specific routes with an outro step.
|
||||||
|
*
|
||||||
* @param string $route
|
* @param string $route
|
||||||
* @param string $specificPage
|
* @param string $specificPage
|
||||||
*
|
*
|
||||||
@ -39,12 +41,15 @@ class IntroController
|
|||||||
*/
|
*/
|
||||||
public function getIntroSteps(string $route, string $specificPage = '')
|
public function getIntroSteps(string $route, string $specificPage = '')
|
||||||
{
|
{
|
||||||
|
Log::debug(sprintf('getIntroSteps for route "%s" and page "%s"', $route, $specificPage));
|
||||||
$steps = $this->getBasicSteps($route);
|
$steps = $this->getBasicSteps($route);
|
||||||
$specificSteps = $this->getSpecificSteps($route, $specificPage);
|
$specificSteps = $this->getSpecificSteps($route, $specificPage);
|
||||||
if (0 === count($specificSteps)) {
|
if (0 === count($specificSteps)) {
|
||||||
|
Log::debug(sprintf('No specific steps for route "%s" and page "%s"', $route, $specificPage));
|
||||||
return Response::json($steps);
|
return Response::json($steps);
|
||||||
}
|
}
|
||||||
if ($this->hasOutroStep($route)) {
|
if ($this->hasOutroStep($route)) {
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
// save last step:
|
// save last step:
|
||||||
$lastStep = $steps[count($steps) - 1];
|
$lastStep = $steps[count($steps) - 1];
|
||||||
// remove last step:
|
// remove last step:
|
||||||
@ -52,6 +57,7 @@ class IntroController
|
|||||||
// merge arrays and add last step again
|
// merge arrays and add last step again
|
||||||
$steps = array_merge($steps, $specificSteps);
|
$steps = array_merge($steps, $specificSteps);
|
||||||
$steps[] = $lastStep;
|
$steps[] = $lastStep;
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
}
|
}
|
||||||
if (!$this->hasOutroStep($route)) {
|
if (!$this->hasOutroStep($route)) {
|
||||||
$steps = array_merge($steps, $specificSteps);
|
$steps = array_merge($steps, $specificSteps);
|
||||||
@ -68,13 +74,16 @@ class IntroController
|
|||||||
public function hasOutroStep(string $route): bool
|
public function hasOutroStep(string $route): bool
|
||||||
{
|
{
|
||||||
$routeKey = str_replace('.', '_', $route);
|
$routeKey = str_replace('.', '_', $route);
|
||||||
|
Log::debug(sprintf('Has outro step for route %s', $routeKey));
|
||||||
$elements = config(sprintf('intro.%s', $routeKey));
|
$elements = config(sprintf('intro.%s', $routeKey));
|
||||||
if (!is_array($elements)) {
|
if (!is_array($elements)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$keys = array_keys($elements);
|
Log::debug('Elements is array', $elements);
|
||||||
|
Log::debug('Keys is', array_keys($elements));
|
||||||
|
Log::debug(sprintf('Keys has "outro": %s', var_export(in_array('outro', array_keys($elements)), true)));
|
||||||
|
|
||||||
return in_array('outro', $keys);
|
return in_array('outro', array_keys($elements));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -135,6 +144,7 @@ class IntroController
|
|||||||
$steps[] = $currentStep;
|
$steps[] = $currentStep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Log::debug(sprintf('Total basic steps for %s is %d', $routeKey, count($steps)));
|
||||||
|
|
||||||
return $steps;
|
return $steps;
|
||||||
}
|
}
|
||||||
@ -147,7 +157,8 @@ class IntroController
|
|||||||
*/
|
*/
|
||||||
private function getSpecificSteps(string $route, string $specificPage): array
|
private function getSpecificSteps(string $route, string $specificPage): array
|
||||||
{
|
{
|
||||||
$steps = [];
|
$steps = [];
|
||||||
|
$routeKey = '';
|
||||||
|
|
||||||
// user is on page with specific instructions:
|
// user is on page with specific instructions:
|
||||||
if (strlen($specificPage) > 0) {
|
if (strlen($specificPage) > 0) {
|
||||||
@ -165,6 +176,7 @@ class IntroController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Log::debug(sprintf('Total specific steps for route "%s" and page "%s" (routeKey is "%s") is %d', $route, $specificPage, $routeKey, count($steps)));
|
||||||
|
|
||||||
return $steps;
|
return $steps;
|
||||||
}
|
}
|
||||||
|
@ -99,13 +99,13 @@ class LinkController extends Controller
|
|||||||
JournalRepositoryInterface $journalRepository,
|
JournalRepositoryInterface $journalRepository,
|
||||||
TransactionJournal $journal
|
TransactionJournal $journal
|
||||||
) {
|
) {
|
||||||
|
Log::debug('We are here (store)');
|
||||||
$linkInfo = $request->getLinkInfo();
|
$linkInfo = $request->getLinkInfo();
|
||||||
if (0 === $linkInfo['transaction_journal_id']) {
|
if (0 === $linkInfo['transaction_journal_id']) {
|
||||||
Session::flash('error', trans('firefly.invalid_link_selection'));
|
Session::flash('error', trans('firefly.invalid_link_selection'));
|
||||||
|
|
||||||
return redirect(route('transactions.show', [$journal->id]));
|
return redirect(route('transactions.show', [$journal->id]));
|
||||||
}
|
}
|
||||||
$linkType = $repository->find($linkInfo['link_type_id']);
|
|
||||||
$other = $journalRepository->find($linkInfo['transaction_journal_id']);
|
$other = $journalRepository->find($linkInfo['transaction_journal_id']);
|
||||||
$alreadyLinked = $repository->findLink($journal, $other);
|
$alreadyLinked = $repository->findLink($journal, $other);
|
||||||
if ($alreadyLinked) {
|
if ($alreadyLinked) {
|
||||||
@ -115,22 +115,7 @@ class LinkController extends Controller
|
|||||||
}
|
}
|
||||||
Log::debug(sprintf('Journal is %d, opposing is %d', $journal->id, $other->id));
|
Log::debug(sprintf('Journal is %d, opposing is %d', $journal->id, $other->id));
|
||||||
|
|
||||||
$journalLink = new TransactionJournalLink;
|
$repository->storeLink($linkInfo, $other, $journal);
|
||||||
$journalLink->linkType()->associate($linkType);
|
|
||||||
if ('inward' === $linkInfo['direction']) {
|
|
||||||
Log::debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->inward, $other->id, $journal->id));
|
|
||||||
$journalLink->source()->associate($other);
|
|
||||||
$journalLink->destination()->associate($journal);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('outward' === $linkInfo['direction']) {
|
|
||||||
Log::debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->outward, $journal->id, $other->id));
|
|
||||||
$journalLink->source()->associate($journal);
|
|
||||||
$journalLink->destination()->associate($other);
|
|
||||||
}
|
|
||||||
|
|
||||||
$journalLink->comment = $linkInfo['comments'];
|
|
||||||
$journalLink->save();
|
|
||||||
Session::flash('success', trans('firefly.journals_linked'));
|
Session::flash('success', trans('firefly.journals_linked'));
|
||||||
|
|
||||||
return redirect(route('transactions.show', [$journal->id]));
|
return redirect(route('transactions.show', [$journal->id]));
|
||||||
|
@ -143,7 +143,7 @@ class SingleController extends Controller
|
|||||||
];
|
];
|
||||||
|
|
||||||
/** @var Note $note */
|
/** @var Note $note */
|
||||||
$note = $journal->notes()->first();
|
$note = $this->repository->getNote($journal);
|
||||||
if (null !== $note) {
|
if (null !== $note) {
|
||||||
$preFilled['notes'] = $note->text;
|
$preFilled['notes'] = $note->text;
|
||||||
}
|
}
|
||||||
@ -302,7 +302,7 @@ class SingleController extends Controller
|
|||||||
'destination_currency' => $foreignCurrency,
|
'destination_currency' => $foreignCurrency,
|
||||||
];
|
];
|
||||||
/** @var Note $note */
|
/** @var Note $note */
|
||||||
$note = $journal->notes()->first();
|
$note = $this->repository->getNote($journal);
|
||||||
if (null !== $note) {
|
if (null !== $note) {
|
||||||
$preFilled['notes'] = $note->text;
|
$preFilled['notes'] = $note->text;
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ use Illuminate\Routing\Middleware\ThrottleRequests;
|
|||||||
use Illuminate\View\Middleware\ShareErrorsFromSession;
|
use Illuminate\View\Middleware\ShareErrorsFromSession;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class Kernel
|
* Class Kernel
|
||||||
*/
|
*/
|
||||||
class Kernel extends HttpKernel
|
class Kernel extends HttpKernel
|
||||||
|
@ -25,6 +25,7 @@ namespace FireflyIII\Http\Middleware;
|
|||||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class EncryptCookies
|
* Class EncryptCookies
|
||||||
*/
|
*/
|
||||||
class EncryptCookies extends Middleware
|
class EncryptCookies extends Middleware
|
||||||
|
@ -26,6 +26,7 @@ use Closure;
|
|||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class RedirectIfAuthenticated
|
* Class RedirectIfAuthenticated
|
||||||
*/
|
*/
|
||||||
class RedirectIfAuthenticated
|
class RedirectIfAuthenticated
|
||||||
|
@ -25,6 +25,7 @@ namespace FireflyIII\Http\Middleware;
|
|||||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class TrimStrings
|
* Class TrimStrings
|
||||||
*/
|
*/
|
||||||
class TrimStrings extends Middleware
|
class TrimStrings extends Middleware
|
||||||
|
@ -27,6 +27,7 @@ use Illuminate\Contracts\Config\Repository;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class TrustProxies
|
* Class TrustProxies
|
||||||
*/
|
*/
|
||||||
class TrustProxies extends Middleware
|
class TrustProxies extends Middleware
|
||||||
|
@ -25,6 +25,7 @@ namespace FireflyIII\Http\Middleware;
|
|||||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class VerifyCsrfToken
|
* Class VerifyCsrfToken
|
||||||
*/
|
*/
|
||||||
class VerifyCsrfToken extends Middleware
|
class VerifyCsrfToken extends Middleware
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class AttachmentFormRequest.
|
* Class AttachmentFormRequest.
|
||||||
*/
|
*/
|
||||||
class AttachmentFormRequest extends Request
|
class AttachmentFormRequest extends Request
|
||||||
|
@ -64,9 +64,9 @@ class BillFormRequest extends Request
|
|||||||
{
|
{
|
||||||
$nameRule = 'required|between:1,255|uniqueObjectForUser:bills,name';
|
$nameRule = 'required|between:1,255|uniqueObjectForUser:bills,name';
|
||||||
$matchRule = 'required|between:1,255|uniqueObjectForUser:bills,match';
|
$matchRule = 'required|between:1,255|uniqueObjectForUser:bills,match';
|
||||||
if (intval($this->get('id')) > 0) {
|
if ($this->integer('id') > 0) {
|
||||||
$nameRule .= ',' . intval($this->get('id'));
|
$nameRule .= ',' . $this->integer('id');
|
||||||
$matchRule .= ',' . intval($this->get('id'));
|
$matchRule .= ',' . $this->integer('id');
|
||||||
}
|
}
|
||||||
// is OK
|
// is OK
|
||||||
$rules = [
|
$rules = [
|
||||||
|
@ -25,6 +25,7 @@ namespace FireflyIII\Http\Requests;
|
|||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class BudgetFormRequest.
|
* Class BudgetFormRequest.
|
||||||
*/
|
*/
|
||||||
class BudgetFormRequest extends Request
|
class BudgetFormRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class BudgetIncomeRequest.
|
* Class BudgetIncomeRequest.
|
||||||
*/
|
*/
|
||||||
class BudgetIncomeRequest extends Request
|
class BudgetIncomeRequest extends Request
|
||||||
|
@ -56,8 +56,8 @@ class CategoryFormRequest extends Request
|
|||||||
/** @var CategoryRepositoryInterface $repository */
|
/** @var CategoryRepositoryInterface $repository */
|
||||||
$repository = app(CategoryRepositoryInterface::class);
|
$repository = app(CategoryRepositoryInterface::class);
|
||||||
$nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name';
|
$nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name';
|
||||||
if (null !== $repository->find(intval($this->get('id')))->id) {
|
if (null !== $repository->find($this->integer('id'))->id) {
|
||||||
$nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,' . intval($this->get('id'));
|
$nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,' . $this->integer('id');
|
||||||
}
|
}
|
||||||
|
|
||||||
// fixed
|
// fixed
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class ConfigurationRequest.
|
* Class ConfigurationRequest.
|
||||||
*/
|
*/
|
||||||
class ConfigurationRequest extends Request
|
class ConfigurationRequest extends Request
|
||||||
|
@ -23,7 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class BillFormRequest.
|
* Class CurrencyFormRequest.
|
||||||
*/
|
*/
|
||||||
class CurrencyFormRequest extends Request
|
class CurrencyFormRequest extends Request
|
||||||
{
|
{
|
||||||
@ -61,7 +61,7 @@ class CurrencyFormRequest extends Request
|
|||||||
'symbol' => 'required|min:1|max:8|unique:transaction_currencies,symbol',
|
'symbol' => 'required|min:1|max:8|unique:transaction_currencies,symbol',
|
||||||
'decimal_places' => 'required|min:0|max:12|numeric',
|
'decimal_places' => 'required|min:0|max:12|numeric',
|
||||||
];
|
];
|
||||||
if (intval($this->get('id')) > 0) {
|
if ($this->integer('id') > 0) {
|
||||||
$rules = [
|
$rules = [
|
||||||
'name' => 'required|max:48|min:1',
|
'name' => 'required|max:48|min:1',
|
||||||
'code' => 'required|min:3|max:3',
|
'code' => 'required|min:3|max:3',
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class DeleteAccountFormRequest.
|
* Class DeleteAccountFormRequest.
|
||||||
*/
|
*/
|
||||||
class DeleteAccountFormRequest extends Request
|
class DeleteAccountFormRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class EmailFormRequest.
|
* Class EmailFormRequest.
|
||||||
*/
|
*/
|
||||||
class EmailFormRequest extends Request
|
class EmailFormRequest extends Request
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* ImportUploadRequest.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\Http\Requests;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class ImportUploadRequest.
|
|
||||||
*/
|
|
||||||
class ImportUploadRequest extends Request
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function authorize()
|
|
||||||
{
|
|
||||||
// Only allow logged in users
|
|
||||||
return auth()->check();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function rules()
|
|
||||||
{
|
|
||||||
// fixed
|
|
||||||
$types = array_keys(config('firefly.import_formats'));
|
|
||||||
|
|
||||||
return [
|
|
||||||
'import_file' => 'required|file',
|
|
||||||
'import_file_type' => 'required|in:' . join(',', $types),
|
|
||||||
'configuration_file' => 'file',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class MassDeleteJournalRequest.
|
* Class MassDeleteJournalRequest.
|
||||||
*/
|
*/
|
||||||
class MassDeleteJournalRequest extends Request
|
class MassDeleteJournalRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class MassEditJournalRequest.
|
* Class MassEditJournalRequest.
|
||||||
*/
|
*/
|
||||||
class MassEditJournalRequest extends Request
|
class MassEditJournalRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class NewUserFormRequest.
|
* Class NewUserFormRequest.
|
||||||
*/
|
*/
|
||||||
class NewUserFormRequest extends Request
|
class NewUserFormRequest extends Request
|
||||||
|
@ -57,8 +57,8 @@ class PiggyBankFormRequest extends Request
|
|||||||
public function rules()
|
public function rules()
|
||||||
{
|
{
|
||||||
$nameRule = 'required|between:1,255|uniquePiggyBankForUser';
|
$nameRule = 'required|between:1,255|uniquePiggyBankForUser';
|
||||||
if (intval($this->get('id'))) {
|
if ($this->integer('id')) {
|
||||||
$nameRule = 'required|between:1,255|uniquePiggyBankForUser:' . intval($this->get('id'));
|
$nameRule = 'required|between:1,255|uniquePiggyBankForUser:' . $this->integer('id');
|
||||||
}
|
}
|
||||||
|
|
||||||
$rules = [
|
$rules = [
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class ProfileFormRequest.
|
* Class ProfileFormRequest.
|
||||||
*/
|
*/
|
||||||
class ProfileFormRequest extends Request
|
class ProfileFormRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class ReconciliationFormRequest.
|
* Class ReconciliationFormRequest.
|
||||||
*/
|
*/
|
||||||
class ReconciliationFormRequest extends Request
|
class ReconciliationFormRequest extends Request
|
||||||
|
@ -25,6 +25,7 @@ namespace FireflyIII\Http\Requests;
|
|||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class ExportFormRequest.
|
* Class ExportFormRequest.
|
||||||
*/
|
*/
|
||||||
class SelectTransactionsRequest extends Request
|
class SelectTransactionsRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class RuleFormRequest.
|
* Class RuleFormRequest.
|
||||||
*/
|
*/
|
||||||
class TestRuleFormRequest extends Request
|
class TestRuleFormRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class TokenFormRequest.
|
* Class TokenFormRequest.
|
||||||
*/
|
*/
|
||||||
class TokenFormRequest extends Request
|
class TokenFormRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class UserFormRequest.
|
* Class UserFormRequest.
|
||||||
*/
|
*/
|
||||||
class UserFormRequest extends Request
|
class UserFormRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Http\Requests;
|
namespace FireflyIII\Http\Requests;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class UserRegistrationRequest.
|
* Class UserRegistrationRequest.
|
||||||
*/
|
*/
|
||||||
class UserRegistrationRequest extends Request
|
class UserRegistrationRequest extends Request
|
||||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Models;
|
namespace FireflyIII\Models;
|
||||||
|
|
||||||
use Crypt;
|
use Crypt;
|
||||||
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Log;
|
use Log;
|
||||||
use Storage;
|
use Storage;
|
||||||
@ -33,6 +34,18 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|||||||
*/
|
*/
|
||||||
class ImportJob extends Model
|
class ImportJob extends Model
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $validStatus
|
||||||
|
= [
|
||||||
|
'new',
|
||||||
|
'configuring',
|
||||||
|
'configured',
|
||||||
|
'running',
|
||||||
|
'error',
|
||||||
|
'finished',
|
||||||
|
];
|
||||||
/**
|
/**
|
||||||
* The attributes that should be casted to native types.
|
* The attributes that should be casted to native types.
|
||||||
*
|
*
|
||||||
@ -44,30 +57,24 @@ class ImportJob extends Model
|
|||||||
'updated_at' => 'datetime',
|
'updated_at' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $validStatus
|
|
||||||
= [
|
|
||||||
'new',
|
|
||||||
'initialized',
|
|
||||||
'configured',
|
|
||||||
'running',
|
|
||||||
'finished',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $value
|
* @param $value
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*
|
*
|
||||||
* @throws NotFoundHttpException
|
* @throws NotFoundHttpException
|
||||||
|
* @throws FireflyException
|
||||||
*/
|
*/
|
||||||
public static function routeBinder($value)
|
public static function routeBinder($value)
|
||||||
{
|
{
|
||||||
if (auth()->check()) {
|
if (auth()->check()) {
|
||||||
|
/** @var ImportJob $model */
|
||||||
$model = self::where('key', $value)->where('user_id', auth()->user()->id)->first();
|
$model = self::where('key', $value)->where('user_id', auth()->user()->id)->first();
|
||||||
if (null !== $model) {
|
if (null !== $model) {
|
||||||
|
// must have valid status:
|
||||||
|
if (!in_array($model->status, $model->validStatus)) {
|
||||||
|
throw new FireflyException(sprintf('Job with key "%s" has invalid status "%s"', $model->key, $model->status));
|
||||||
|
}
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,12 +119,20 @@ class ImportJob extends Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $status
|
* @param string $status
|
||||||
|
*
|
||||||
|
* @throws FireflyException
|
||||||
*/
|
*/
|
||||||
public function change($status)
|
public function change(string $status): void
|
||||||
{
|
{
|
||||||
$this->status = $status;
|
if (in_array($status, $this->validStatus)) {
|
||||||
$this->save();
|
$this->status = $status;
|
||||||
|
$this->save();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw new FireflyException(sprintf('Status "%s" is invalid for job "%s".', $status, $this->key));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,6 +30,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class AccountServiceProvider.
|
* Class AccountServiceProvider.
|
||||||
*/
|
*/
|
||||||
class AccountServiceProvider extends ServiceProvider
|
class AccountServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class AdminServiceProvider
|
* Class AdminServiceProvider
|
||||||
*/
|
*/
|
||||||
class AdminServiceProvider extends ServiceProvider
|
class AdminServiceProvider extends ServiceProvider
|
||||||
|
@ -26,6 +26,7 @@ use Illuminate\Support\Facades\Schema;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class AppServiceProvider.
|
* Class AppServiceProvider.
|
||||||
*/
|
*/
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class AttachmentServiceProvider.
|
* Class AttachmentServiceProvider.
|
||||||
*/
|
*/
|
||||||
class AttachmentServiceProvider extends ServiceProvider
|
class AttachmentServiceProvider extends ServiceProvider
|
||||||
|
@ -25,6 +25,7 @@ namespace FireflyIII\Providers;
|
|||||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class AuthServiceProvider
|
* Class AuthServiceProvider
|
||||||
*/
|
*/
|
||||||
class AuthServiceProvider extends ServiceProvider
|
class AuthServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class BillServiceProvider.
|
* Class BillServiceProvider.
|
||||||
*/
|
*/
|
||||||
class BillServiceProvider extends ServiceProvider
|
class BillServiceProvider extends ServiceProvider
|
||||||
|
@ -26,6 +26,7 @@ use Illuminate\Support\Facades\Broadcast;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class BroadcastServiceProvider
|
* Class BroadcastServiceProvider
|
||||||
*/
|
*/
|
||||||
class BroadcastServiceProvider extends ServiceProvider
|
class BroadcastServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class BudgetServiceProvider.
|
* Class BudgetServiceProvider.
|
||||||
*/
|
*/
|
||||||
class BudgetServiceProvider extends ServiceProvider
|
class BudgetServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class CategoryServiceProvider.
|
* Class CategoryServiceProvider.
|
||||||
*/
|
*/
|
||||||
class CategoryServiceProvider extends ServiceProvider
|
class CategoryServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class CurrencyServiceProvider.
|
* Class CurrencyServiceProvider.
|
||||||
*/
|
*/
|
||||||
class CurrencyServiceProvider extends ServiceProvider
|
class CurrencyServiceProvider extends ServiceProvider
|
||||||
|
@ -39,6 +39,7 @@ use Log;
|
|||||||
class EventServiceProvider extends ServiceProvider
|
class EventServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* The event listener mappings for the application.
|
* The event listener mappings for the application.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
@ -82,6 +83,7 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Register any events for your application.
|
* Register any events for your application.
|
||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
|
@ -30,6 +30,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class ExportJobServiceProvider.
|
* Class ExportJobServiceProvider.
|
||||||
*/
|
*/
|
||||||
class ExportJobServiceProvider extends ServiceProvider
|
class ExportJobServiceProvider extends ServiceProvider
|
||||||
|
@ -69,6 +69,7 @@ use TwigBridge\Extension\Loader\Functions;
|
|||||||
use Validator;
|
use Validator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class FireflyServiceProvider.
|
* Class FireflyServiceProvider.
|
||||||
*/
|
*/
|
||||||
class FireflyServiceProvider extends ServiceProvider
|
class FireflyServiceProvider extends ServiceProvider
|
||||||
|
@ -27,6 +27,7 @@ use Illuminate\Session\SessionManager;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class FireflySessionProvider
|
* Class FireflySessionProvider
|
||||||
*/
|
*/
|
||||||
class FireflySessionProvider extends ServiceProvider
|
class FireflySessionProvider extends ServiceProvider
|
||||||
|
@ -32,6 +32,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class JournalServiceProvider.
|
* Class JournalServiceProvider.
|
||||||
*/
|
*/
|
||||||
class JournalServiceProvider extends ServiceProvider
|
class JournalServiceProvider extends ServiceProvider
|
||||||
|
@ -26,6 +26,7 @@ use Illuminate\Log\LogServiceProvider as LaravelLogServiceProvider;
|
|||||||
use Illuminate\Log\Writer;
|
use Illuminate\Log\Writer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class LogServiceProvider.
|
* Class LogServiceProvider.
|
||||||
*/
|
*/
|
||||||
class LogServiceProvider extends LaravelLogServiceProvider
|
class LogServiceProvider extends LaravelLogServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class PiggyBankServiceProvider.
|
* Class PiggyBankServiceProvider.
|
||||||
*/
|
*/
|
||||||
class PiggyBankServiceProvider extends ServiceProvider
|
class PiggyBankServiceProvider extends ServiceProvider
|
||||||
|
@ -26,6 +26,7 @@ use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvi
|
|||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class RouteServiceProvider
|
* Class RouteServiceProvider
|
||||||
*/
|
*/
|
||||||
class RouteServiceProvider extends ServiceProvider
|
class RouteServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class RuleGroupServiceProvider.
|
* Class RuleGroupServiceProvider.
|
||||||
*/
|
*/
|
||||||
class RuleGroupServiceProvider extends ServiceProvider
|
class RuleGroupServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class RuleServiceProvider.
|
* Class RuleServiceProvider.
|
||||||
*/
|
*/
|
||||||
class RuleServiceProvider extends ServiceProvider
|
class RuleServiceProvider extends ServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class SearchServiceProvider.
|
* Class SearchServiceProvider.
|
||||||
*/
|
*/
|
||||||
class SearchServiceProvider extends ServiceProvider
|
class SearchServiceProvider extends ServiceProvider
|
||||||
|
@ -26,6 +26,7 @@ use FireflyIII\Http\Middleware\StartFireflySession;
|
|||||||
use Illuminate\Session\SessionServiceProvider as BaseSessionServiceProvider;
|
use Illuminate\Session\SessionServiceProvider as BaseSessionServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class SessionServiceProvider.
|
* Class SessionServiceProvider.
|
||||||
*/
|
*/
|
||||||
class SessionServiceProvider extends BaseSessionServiceProvider
|
class SessionServiceProvider extends BaseSessionServiceProvider
|
||||||
|
@ -28,6 +28,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @CodeCoverageIgnore
|
||||||
* Class TagServiceProvider.
|
* Class TagServiceProvider.
|
||||||
*/
|
*/
|
||||||
class TagServiceProvider extends ServiceProvider
|
class TagServiceProvider extends ServiceProvider
|
||||||
|
@ -24,6 +24,7 @@ namespace FireflyIII\Repositories\Journal;
|
|||||||
|
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\AccountType;
|
use FireflyIII\Models\AccountType;
|
||||||
|
use FireflyIII\Models\Note;
|
||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
@ -189,6 +190,16 @@ class JournalRepository implements JournalRepositoryInterface
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param TransactionJournal $journal
|
||||||
|
*
|
||||||
|
* @return Note|null
|
||||||
|
*/
|
||||||
|
public function getNote(TransactionJournal $journal): ?Note
|
||||||
|
{
|
||||||
|
return $journal->notes()->first();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
|
@ -23,8 +23,10 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Repositories\Journal;
|
namespace FireflyIII\Repositories\Journal;
|
||||||
|
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
|
use FireflyIII\Models\Note;
|
||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Models\TransactionJournalLink;
|
||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@ -52,6 +54,13 @@ interface JournalRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function countTransactions(TransactionJournal $journal): int;
|
public function countTransactions(TransactionJournal $journal): int;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param TransactionJournal $journal
|
||||||
|
*
|
||||||
|
* @return Note|null
|
||||||
|
*/
|
||||||
|
public function getNote(TransactionJournal $journal): ?Note;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a journal.
|
* Deletes a journal.
|
||||||
*
|
*
|
||||||
|
@ -123,7 +123,7 @@ trait UpdateJournalsTrait
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Update tags.
|
* Update tags.
|
||||||
*
|
*
|
||||||
* @param TransactionJournal $journal
|
* @param TransactionJournal $journal
|
||||||
* @param array $array
|
* @param array $array
|
||||||
*
|
*
|
||||||
|
@ -22,11 +22,13 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Repositories\LinkType;
|
namespace FireflyIII\Repositories\LinkType;
|
||||||
|
|
||||||
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\LinkType;
|
use FireflyIII\Models\LinkType;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Models\TransactionJournalLink;
|
use FireflyIII\Models\TransactionJournalLink;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class LinkTypeRepository.
|
* Class LinkTypeRepository.
|
||||||
@ -157,6 +159,42 @@ class LinkTypeRepository implements LinkTypeRepositoryInterface
|
|||||||
return $linkType;
|
return $linkType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store link between two journals.
|
||||||
|
*
|
||||||
|
* @param array $information
|
||||||
|
* @param TransactionJournal $left
|
||||||
|
* @param TransactionJournal $right
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
* @throws FireflyException
|
||||||
|
*/
|
||||||
|
public function storeLink(array $information, TransactionJournal $left, TransactionJournal $right): TransactionJournalLink
|
||||||
|
{
|
||||||
|
$linkType = $this->find(intval($information['link_type_id']) ?? 0);
|
||||||
|
if (is_null($linkType->id)) {
|
||||||
|
throw new FireflyException(sprintf('Link type #%d cannot be resolved to an actual link type', intval($information['link_type_id']) ?? 0));
|
||||||
|
}
|
||||||
|
$link = new TransactionJournalLink;
|
||||||
|
$link->linkType()->associate($linkType);
|
||||||
|
if ('inward' === $information['direction']) {
|
||||||
|
Log::debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->inward, $left->id, $right->id));
|
||||||
|
$link->source()->associate($left);
|
||||||
|
$link->destination()->associate($right);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('outward' === $information['direction']) {
|
||||||
|
Log::debug(sprintf('Link type is inwards ("%s"), so %d is source and %d is destination.', $linkType->outward, $right->id, $left->id));
|
||||||
|
$link->source()->associate($right);
|
||||||
|
$link->destination()->associate($left);
|
||||||
|
}
|
||||||
|
|
||||||
|
$link->comment = $link['comments'] ?? null;
|
||||||
|
$link->save();
|
||||||
|
|
||||||
|
return $link;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param TransactionJournalLink $link
|
* @param TransactionJournalLink $link
|
||||||
*
|
*
|
||||||
|
@ -92,6 +92,17 @@ interface LinkTypeRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function store(array $data): LinkType;
|
public function store(array $data): LinkType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store link between two journals.
|
||||||
|
*
|
||||||
|
* @param array $information
|
||||||
|
* @param TransactionJournal $left
|
||||||
|
* @param TransactionJournal $right
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function storeLink(array $information, TransactionJournal $left, TransactionJournal $right): TransactionJournalLink;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param TransactionJournalLink $link
|
* @param TransactionJournalLink $link
|
||||||
*
|
*
|
||||||
|
@ -24,6 +24,7 @@ namespace FireflyIII\Support;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Navigation.
|
* Class Navigation.
|
||||||
@ -438,6 +439,7 @@ class Navigation
|
|||||||
{
|
{
|
||||||
$date = clone $theDate;
|
$date = clone $theDate;
|
||||||
// 1D 1W 1M 3M 6M 1Y
|
// 1D 1W 1M 3M 6M 1Y
|
||||||
|
Log::debug(sprintf('subtractPeriod: date is %s', $date->format('Y-m-d')));
|
||||||
$functionMap = [
|
$functionMap = [
|
||||||
'1D' => 'subDays',
|
'1D' => 'subDays',
|
||||||
'daily' => 'subDays',
|
'daily' => 'subDays',
|
||||||
@ -461,13 +463,16 @@ class Navigation
|
|||||||
if (isset($functionMap[$repeatFreq])) {
|
if (isset($functionMap[$repeatFreq])) {
|
||||||
$function = $functionMap[$repeatFreq];
|
$function = $functionMap[$repeatFreq];
|
||||||
$date->$function($subtract);
|
$date->$function($subtract);
|
||||||
|
Log::debug(sprintf('%s is in function map, execute %s with argument %d', $repeatFreq, $function, $subtract));
|
||||||
|
Log::debug(sprintf('subtractPeriod: resulting date is %s', $date->format('Y-m-d')));
|
||||||
|
|
||||||
return $date;
|
return $date;
|
||||||
}
|
}
|
||||||
if (isset($modifierMap[$repeatFreq])) {
|
if (isset($modifierMap[$repeatFreq])) {
|
||||||
$subtract = $subtract * $modifierMap[$repeatFreq];
|
$subtract = $subtract * $modifierMap[$repeatFreq];
|
||||||
$date->subMonths($subtract);
|
$date->subMonths($subtract);
|
||||||
|
Log::debug(sprintf('%s is in modifier map with value %d, execute subMonths with argument %d', $repeatFreq, $modifierMap[$repeatFreq], $subtract));
|
||||||
|
Log::debug(sprintf('subtractPeriod: resulting date is %s', $date->format('Y-m-d')));
|
||||||
return $date;
|
return $date;
|
||||||
}
|
}
|
||||||
// a custom range requires the session start
|
// a custom range requires the session start
|
||||||
@ -479,7 +484,10 @@ class Navigation
|
|||||||
/** @var Carbon $tEnd */
|
/** @var Carbon $tEnd */
|
||||||
$tEnd = session('end', Carbon::now()->endOfMonth());
|
$tEnd = session('end', Carbon::now()->endOfMonth());
|
||||||
$diffInDays = $tStart->diffInDays($tEnd);
|
$diffInDays = $tStart->diffInDays($tEnd);
|
||||||
|
Log::debug(sprintf('repeatFreq is %s, start is %s and end is %s (session data).', $repeatFreq, $tStart->format('Y-m-d'), $tEnd->format('Y-m-d')));
|
||||||
|
Log::debug(sprintf('Diff in days is %d', $diffInDays));
|
||||||
$date->subDays($diffInDays * $subtract);
|
$date->subDays($diffInDays * $subtract);
|
||||||
|
Log::debug(sprintf('subtractPeriod: resulting date is %s', $date->format('Y-m-d')));
|
||||||
|
|
||||||
return $date;
|
return $date;
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ return [
|
|||||||
],
|
],
|
||||||
// accounts: create
|
// accounts: create
|
||||||
'accounts_create' => [
|
'accounts_create' => [
|
||||||
'iban' => ['element' => '#ffInput_iban'],
|
'iban' => ['element' => '#ffInput_iban'],
|
||||||
],
|
],
|
||||||
// extra text for asset account creation.
|
// extra text for asset account creation.
|
||||||
'accounts_create_asset' => [
|
'accounts_create_asset' => [
|
||||||
|
@ -33,7 +33,11 @@ return [
|
|||||||
'status_ready_config' => 'Download configuration',
|
'status_ready_config' => 'Download configuration',
|
||||||
'status_ready_start' => 'Start the import',
|
'status_ready_start' => 'Start the import',
|
||||||
'status_ready_share' => 'Please consider downloading your configuration and sharing it at the <strong><a href="https://github.com/firefly-iii/import-configurations/wiki">import configuration center</a></strong>. This will allow other users of Firefly III to import their files more easily.',
|
'status_ready_share' => 'Please consider downloading your configuration and sharing it at the <strong><a href="https://github.com/firefly-iii/import-configurations/wiki">import configuration center</a></strong>. This will allow other users of Firefly III to import their files more easily.',
|
||||||
|
'status_job_new' => 'The job is brand new.',
|
||||||
|
'status_job_configuring' => 'The import is being configured.',
|
||||||
|
'status_job_configured' => 'The import is configured.',
|
||||||
'status_job_running' => 'The import is running.. Please wait..',
|
'status_job_running' => 'The import is running.. Please wait..',
|
||||||
|
'status_job_error' => 'The job has generated an error.',
|
||||||
'status_job_finished' => 'The import has finished!',
|
'status_job_finished' => 'The import has finished!',
|
||||||
'status_running_title' => 'The import is running',
|
'status_running_title' => 'The import is running',
|
||||||
'status_running_placeholder' => 'Please hold for an update...',
|
'status_running_placeholder' => 'Please hold for an update...',
|
||||||
|
@ -445,7 +445,7 @@ Route::group(
|
|||||||
Route::get('json/{importJob}', ['uses' => 'Import\StatusController@json', 'as' => 'status.json']);
|
Route::get('json/{importJob}', ['uses' => 'Import\StatusController@json', 'as' => 'status.json']);
|
||||||
|
|
||||||
// start a job
|
// start a job
|
||||||
Route::any('start/{importJob}', ['uses' => 'Import\IndexController@start', 'as' => 'start']);
|
Route::post('start/{importJob}', ['uses' => 'Import\IndexController@start', 'as' => 'start']);
|
||||||
|
|
||||||
// download config
|
// download config
|
||||||
Route::get('download/{importJob}', ['uses' => 'Import\IndexController@download', 'as' => 'download']);
|
Route::get('download/{importJob}', ['uses' => 'Import\IndexController@download', 'as' => 'download']);
|
||||||
@ -504,8 +504,8 @@ Route::group(
|
|||||||
Route::get('rate/{fromCurrencyCode}/{toCurrencyCode}/{date}', ['uses' => 'Json\ExchangeController@getRate', 'as' => 'rate']);
|
Route::get('rate/{fromCurrencyCode}/{toCurrencyCode}/{date}', ['uses' => 'Json\ExchangeController@getRate', 'as' => 'rate']);
|
||||||
|
|
||||||
// intro things:
|
// intro things:
|
||||||
Route::any('intro/finished/{route}/{specificPage?}', ['uses' => 'Json\IntroController@postFinished', 'as' => 'intro.finished']);
|
Route::post('intro/finished/{route}/{specificPage?}', ['uses' => 'Json\IntroController@postFinished', 'as' => 'intro.finished']);
|
||||||
Route::any('intro/enable/{route}/{specificPage?}', ['uses' => 'Json\IntroController@postEnable', 'as' => 'intro.enable']);
|
Route::post('intro/enable/{route}/{specificPage?}', ['uses' => 'Json\IntroController@postEnable', 'as' => 'intro.enable']);
|
||||||
Route::get('intro/{route}/{specificPage?}', ['uses' => 'Json\IntroController@getIntroSteps', 'as' => 'intro']);
|
Route::get('intro/{route}/{specificPage?}', ['uses' => 'Json\IntroController@getIntroSteps', 'as' => 'intro']);
|
||||||
|
|
||||||
|
|
||||||
|
@ -294,9 +294,25 @@ class BudgetControllerTest extends TestCase
|
|||||||
$repository = $this->mock(BudgetRepositoryInterface::class);
|
$repository = $this->mock(BudgetRepositoryInterface::class);
|
||||||
$repository->shouldReceive('getAvailableBudget')->andReturn('100.123');
|
$repository->shouldReceive('getAvailableBudget')->andReturn('100.123');
|
||||||
|
|
||||||
$data = ['amount' => 200, 'start' => '2017-01-01', 'end' => '2017-01-31'];
|
|
||||||
$this->be($this->user());
|
$this->be($this->user());
|
||||||
$response = $this->get(route('budgets.income.info', ['20170101', '20170131']), $data);
|
$response = $this->get(route('budgets.income.info', ['20170101', '20170131']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\BudgetController::infoIncome
|
||||||
|
* @dataProvider dateRangeProvider
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function testInfoIncomeExpanded(string $range)
|
||||||
|
{
|
||||||
|
// mock stuff
|
||||||
|
$repository = $this->mock(BudgetRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('getAvailableBudget')->andReturn('100.123');
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$this->changeDateRange($this->user(), $range);
|
||||||
|
$response = $this->get(route('budgets.income.info', ['20170301', '20170430']));
|
||||||
$response->assertStatus(200);
|
$response->assertStatus(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,6 +322,8 @@ class BudgetControllerTest extends TestCase
|
|||||||
* @dataProvider dateRangeProvider
|
* @dataProvider dateRangeProvider
|
||||||
*
|
*
|
||||||
* @param string $range
|
* @param string $range
|
||||||
|
*
|
||||||
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function testNoBudget(string $range)
|
public function testNoBudget(string $range)
|
||||||
{
|
{
|
||||||
|
119
tests/Feature/Controllers/Import/ConfigurationControllerTest.php
Normal file
119
tests/Feature/Controllers/Import/ConfigurationControllerTest.php
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ConfigurationControllerTest.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 Tests\Feature\Controllers\Import;
|
||||||
|
|
||||||
|
use FireflyIII\Import\Configuration\FileConfigurator;
|
||||||
|
use FireflyIII\Models\ImportJob;
|
||||||
|
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class AccountControllerTest
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||||
|
*/
|
||||||
|
class ConfigurationControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::index
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::makeConfigurator
|
||||||
|
*/
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
/** @var ImportJob $job */
|
||||||
|
$job = $this->user()->importJobs()->where('key', 'configuring')->first();
|
||||||
|
$configurator = $this->mock(FileConfigurator::class);
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
$configurator->shouldReceive('setJob')->once();
|
||||||
|
$configurator->shouldReceive('isJobConfigured')->once()->andReturn(false);
|
||||||
|
$configurator->shouldReceive('getNextView')->once()->andReturn('error'); // does not matter which view is returned.
|
||||||
|
$configurator->shouldReceive('getNextData')->once()->andReturn([]);
|
||||||
|
$repository->shouldReceive('updateStatus')->once();
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.configure', [$job->key]));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::index
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::makeConfigurator
|
||||||
|
*/
|
||||||
|
public function testIndexConfigured()
|
||||||
|
{
|
||||||
|
/** @var ImportJob $job */
|
||||||
|
$job = $this->user()->importJobs()->where('key', 'configured')->first();
|
||||||
|
$configurator = $this->mock(FileConfigurator::class);
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
$configurator->shouldReceive('setJob')->once();
|
||||||
|
$configurator->shouldReceive('isJobConfigured')->once()->andReturn(true);
|
||||||
|
$repository->shouldReceive('updateStatus')->once();
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.configure', [$job->key]));
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertRedirect(route('import.status', [$job->key]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::post
|
||||||
|
*/
|
||||||
|
public function testPost()
|
||||||
|
{
|
||||||
|
/** @var ImportJob $job */
|
||||||
|
$job = $this->user()->importJobs()->where('key', 'configuring')->first();
|
||||||
|
$data = ['some' => 'config'];
|
||||||
|
$configurator = $this->mock(FileConfigurator::class);
|
||||||
|
$configurator->shouldReceive('setJob')->once();
|
||||||
|
$configurator->shouldReceive('isJobConfigured')->once()->andReturn(false);
|
||||||
|
$configurator->shouldReceive('configureJob')->once()->withArgs([$data]);
|
||||||
|
$configurator->shouldReceive('getWarningMessage')->once()->andReturn('Some warning');
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('import.configure.post', [$job->key]), $data);
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertRedirect(route('import.configure', [$job->key]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\ConfigurationController::post
|
||||||
|
*/
|
||||||
|
public function testPostConfigured()
|
||||||
|
{
|
||||||
|
/** @var ImportJob $job */
|
||||||
|
$job = $this->user()->importJobs()->where('key', 'configuring')->first();
|
||||||
|
$data = ['some' => 'config'];
|
||||||
|
$configurator = $this->mock(FileConfigurator::class);
|
||||||
|
$configurator->shouldReceive('setJob')->once();
|
||||||
|
$configurator->shouldReceive('isJobConfigured')->once()->andReturn(true);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('import.configure.post', [$job->key]), $data);
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertRedirect(route('import.status', [$job->key]));
|
||||||
|
}
|
||||||
|
}
|
105
tests/Feature/Controllers/Import/IndexControllerTest.php
Normal file
105
tests/Feature/Controllers/Import/IndexControllerTest.php
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* IndexControllerTest.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 Tests\Feature\Controllers\Import;
|
||||||
|
|
||||||
|
use FireflyIII\Import\Routine\FileRoutine;
|
||||||
|
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class AccountControllerTest
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||||
|
*/
|
||||||
|
class IndexControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\IndexController::create
|
||||||
|
*/
|
||||||
|
public function testCreate()
|
||||||
|
{
|
||||||
|
$job = $this->user()->importJobs()->where('key', 'new')->first();
|
||||||
|
$repository = $this->mock(ImportJobRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('create')->withArgs(['file'])->andReturn($job);
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.create-job', ['file']));
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertRedirect(route('import.configure', ['new']));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\IndexController::download
|
||||||
|
*/
|
||||||
|
public function testDownload()
|
||||||
|
{
|
||||||
|
//$job = $this->user()->importJobs()->where('key', 'testImport')->first();
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.download', ['testImport']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\IndexController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\IndexController::index
|
||||||
|
*/
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.index'));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\IndexController::start
|
||||||
|
*/
|
||||||
|
public function testStart()
|
||||||
|
{
|
||||||
|
$routine = $this->mock(FileRoutine::class);
|
||||||
|
$routine->shouldReceive('setJob')->once();
|
||||||
|
$routine->shouldReceive('run')->once()->andReturn(true);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('import.start', ['configured']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\IndexController::start
|
||||||
|
* @expectedExceptionMessage Job did not complete successfully.
|
||||||
|
*/
|
||||||
|
public function testStartFailed()
|
||||||
|
{
|
||||||
|
$routine = $this->mock(FileRoutine::class);
|
||||||
|
$routine->shouldReceive('setJob')->once();
|
||||||
|
$routine->shouldReceive('run')->once()->andReturn(false);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('import.start', ['configured']));
|
||||||
|
$response->assertStatus(500);
|
||||||
|
}
|
||||||
|
}
|
109
tests/Feature/Controllers/Import/PrerequisitesControllerTest.php
Normal file
109
tests/Feature/Controllers/Import/PrerequisitesControllerTest.php
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PrerequisitesControllerTest.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 Tests\Feature\Controllers\Import;
|
||||||
|
|
||||||
|
use FireflyIII\Import\Prerequisites\FilePrerequisites;
|
||||||
|
use Illuminate\Support\MessageBag;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class AccountControllerTest
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||||
|
*/
|
||||||
|
class PrerequisitesControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\PrerequisitesController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\PrerequisitesController::index
|
||||||
|
*/
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
$object = $this->mock(FilePrerequisites::class);
|
||||||
|
$object->shouldReceive('setUser');
|
||||||
|
$object->shouldReceive('hasPrerequisites')->andReturn(true);
|
||||||
|
$object->shouldReceive('getView')->andReturn('error'); // does not matter which view is returned
|
||||||
|
$object->shouldReceive('getViewParameters')->andReturn([]);
|
||||||
|
$this->be($this->user());
|
||||||
|
|
||||||
|
$response = $this->get(route('import.prerequisites', ['file']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\PrerequisitesController::index
|
||||||
|
*/
|
||||||
|
public function testIndexRedirect()
|
||||||
|
{
|
||||||
|
$object = $this->mock(FilePrerequisites::class);
|
||||||
|
$object->shouldReceive('setUser');
|
||||||
|
$object->shouldReceive('hasPrerequisites')->andReturn(false);
|
||||||
|
$this->be($this->user());
|
||||||
|
|
||||||
|
$response = $this->get(route('import.prerequisites', ['file']));
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertRedirect(route('import.create-job', ['file']));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\PrerequisitesController::post
|
||||||
|
*/
|
||||||
|
public function testPost()
|
||||||
|
{
|
||||||
|
$messageBag = new MessageBag;
|
||||||
|
$messageBag->add('nomessage', 'nothing');
|
||||||
|
$object = $this->mock(FilePrerequisites::class);
|
||||||
|
$object->shouldReceive('setUser');
|
||||||
|
$object->shouldReceive('hasPrerequisites')->andReturn(true);
|
||||||
|
$object->shouldReceive('storePrerequisites')->andReturn($messageBag);
|
||||||
|
$this->be($this->user());
|
||||||
|
|
||||||
|
$response = $this->post(route('import.prerequisites.post', ['file']), []);
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertSessionHas('error');
|
||||||
|
$response->assertRedirect(route('import.prerequisites', ['file']));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\PrerequisitesController::post
|
||||||
|
*/
|
||||||
|
public function testPostDone()
|
||||||
|
{
|
||||||
|
$messageBag = new MessageBag;
|
||||||
|
$messageBag->add('nomessage', 'nothing');
|
||||||
|
$object = $this->mock(FilePrerequisites::class);
|
||||||
|
$object->shouldReceive('setUser');
|
||||||
|
$object->shouldReceive('hasPrerequisites')->andReturn(false);
|
||||||
|
$this->be($this->user());
|
||||||
|
|
||||||
|
$response = $this->post(route('import.prerequisites.post', ['file']), []);
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertRedirect(route('import.create-job', ['file']));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
86
tests/Feature/Controllers/Import/StatusControllerTest.php
Normal file
86
tests/Feature/Controllers/Import/StatusControllerTest.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* StatusControllerTest.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 Tests\Feature\Controllers\Import;
|
||||||
|
|
||||||
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class AccountControllerTest
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||||
|
*/
|
||||||
|
class StatusControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::index
|
||||||
|
*/
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.status', ['configured']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::index
|
||||||
|
*/
|
||||||
|
public function testIndexRedirect()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.status', ['new']));
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertRedirect(route('import.configure', ['new']));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::json
|
||||||
|
*/
|
||||||
|
public function testStatusFinished()
|
||||||
|
{
|
||||||
|
$tag = $this->user()->tags()->first();
|
||||||
|
$repository = $this->mock(TagRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('find')->andReturn($tag);
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.status.json', ['finished']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Import\StatusController::json
|
||||||
|
*/
|
||||||
|
public function testStatusRunning()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('import.status.json', ['running']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -41,14 +41,19 @@ class AutoCompleteControllerTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function testAllAccounts()
|
public function testAllAccounts()
|
||||||
{
|
{
|
||||||
|
// mock stuff
|
||||||
|
$accountA = factory(Account::class)->make();
|
||||||
|
$collection = new Collection([$accountA]);
|
||||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||||
$accountRepos->shouldReceive('getAccountsByType')
|
$accountRepos->shouldReceive('getAccountsByType')
|
||||||
->withArgs([[AccountType::REVENUE, AccountType::EXPENSE, AccountType::BENEFICIARY, AccountType::DEFAULT, AccountType::ASSET]])
|
->withArgs([[AccountType::REVENUE, AccountType::EXPENSE, AccountType::BENEFICIARY, AccountType::DEFAULT, AccountType::ASSET]])
|
||||||
->andReturn(new Collection);
|
->andReturn($collection);
|
||||||
|
|
||||||
$this->be($this->user());
|
$this->be($this->user());
|
||||||
$response = $this->get(route('json.all-accounts'));
|
$response = $this->get(route('json.all-accounts'));
|
||||||
$response->assertStatus(200);
|
$response->assertStatus(200);
|
||||||
|
$response->assertExactJson([$accountA->name]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,18 +77,39 @@ class AutoCompleteControllerTest extends TestCase
|
|||||||
public function testExpenseAccounts()
|
public function testExpenseAccounts()
|
||||||
{
|
{
|
||||||
// mock stuff
|
// mock stuff
|
||||||
$account = factory(Account::class)->make();
|
$accountA = factory(Account::class)->make();
|
||||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
$accountB = factory(Account::class)->make();
|
||||||
$journalRepos = $this->mock(JournalRepositoryInterface::class);
|
$accountA->active = true;
|
||||||
|
$accountB->active = false;
|
||||||
|
$collection = new Collection([$accountA, $accountB]);
|
||||||
|
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||||
|
$journalRepos = $this->mock(JournalRepositoryInterface::class);
|
||||||
$journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal);
|
$journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal);
|
||||||
$accountRepos->shouldReceive('getAccountsByType')->withArgs([[AccountType::EXPENSE, AccountType::BENEFICIARY]])->once()->andReturn(
|
$accountRepos->shouldReceive('getAccountsByType')->withArgs([[AccountType::EXPENSE, AccountType::BENEFICIARY]])->once()->andReturn($collection);
|
||||||
new Collection([$account])
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->be($this->user());
|
$this->be($this->user());
|
||||||
$response = $this->get(route('json.expense-accounts'));
|
$response = $this->get(route('json.expense-accounts'));
|
||||||
$response->assertStatus(200);
|
$response->assertStatus(200);
|
||||||
$response->assertExactJson([$account->name]);
|
$response->assertExactJson([$accountA->name]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\AutoCompleteController::journalsWithId
|
||||||
|
*/
|
||||||
|
public function testJournalsWithId()
|
||||||
|
{
|
||||||
|
$journal = $this->user()->transactionJournals()->where('id', '!=', 1)->first();
|
||||||
|
$journal->journal_id = $journal->id;
|
||||||
|
$collection = new Collection([$journal]);
|
||||||
|
$collector = $this->mock(JournalCollectorInterface::class);
|
||||||
|
$collector->shouldReceive('setLimit')->withArgs([400])->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setPage')->withArgs([1])->andReturnSelf();
|
||||||
|
$collector->shouldReceive('getJournals')->andReturn($collection);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.journals-with-id', [1]));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertExactJson([['id' => $journal->id, 'name' => $journal->id . ': ' . $journal->description]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,18 +118,20 @@ class AutoCompleteControllerTest extends TestCase
|
|||||||
public function testRevenueAccounts()
|
public function testRevenueAccounts()
|
||||||
{
|
{
|
||||||
// mock stuff
|
// mock stuff
|
||||||
$account = factory(Account::class)->make();
|
$accountA = factory(Account::class)->make();
|
||||||
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
$accountB = factory(Account::class)->make();
|
||||||
$journalRepos = $this->mock(JournalRepositoryInterface::class);
|
$accountA->active = true;
|
||||||
|
$accountB->active = false;
|
||||||
|
$collection = new Collection([$accountA, $accountB]);
|
||||||
|
$accountRepos = $this->mock(AccountRepositoryInterface::class);
|
||||||
|
$journalRepos = $this->mock(JournalRepositoryInterface::class);
|
||||||
$journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal);
|
$journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal);
|
||||||
$accountRepos->shouldReceive('getAccountsByType')->withArgs([[AccountType::REVENUE]])->once()->andReturn(
|
$accountRepos->shouldReceive('getAccountsByType')->withArgs([[AccountType::REVENUE]])->once()->andReturn($collection);
|
||||||
new Collection([$account])
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->be($this->user());
|
$this->be($this->user());
|
||||||
$response = $this->get(route('json.revenue-accounts'));
|
$response = $this->get(route('json.revenue-accounts'));
|
||||||
$response->assertStatus(200);
|
$response->assertStatus(200);
|
||||||
$response->assertExactJson([$account->name]);
|
$response->assertExactJson([$accountA->name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
100
tests/Feature/Controllers/Json/BoxControllerTest.php
Normal file
100
tests/Feature/Controllers/Json/BoxControllerTest.php
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* BoxControllerTest.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 Tests\Feature\Controllers\Json;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class BoxControllerTest
|
||||||
|
*/
|
||||||
|
class BoxControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\BoxController::available
|
||||||
|
*/
|
||||||
|
public function testAvailable()
|
||||||
|
{
|
||||||
|
$return = [
|
||||||
|
0 => [
|
||||||
|
'spent' => '-1200', // more than budgeted.
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$repository = $this->mock(BudgetRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('getAvailableBudget')->andReturn('1000');
|
||||||
|
$repository->shouldReceive('getActiveBudgets')->andReturn(new Collection);
|
||||||
|
$repository->shouldReceive('collectBudgetInformation')->andReturn($return);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.box.available'));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\BoxController::balance
|
||||||
|
*/
|
||||||
|
public function testBalance()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.box.balance'));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\BoxController::bills
|
||||||
|
*/
|
||||||
|
public function testBills()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.box.bills'));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\BoxController::netWorth()
|
||||||
|
*/
|
||||||
|
public function testNetWorth()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.box.net-worth'));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\BoxController::netWorth()
|
||||||
|
*/
|
||||||
|
public function testNetWorthFuture()
|
||||||
|
{
|
||||||
|
$start = new Carbon;
|
||||||
|
$start->addMonths(6)->startOfMonth();
|
||||||
|
$end = clone $start;
|
||||||
|
$end->endOfMonth();
|
||||||
|
$this->session(['start' => $start, 'end' => $end]);
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.box.net-worth'));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
}
|
51
tests/Feature/Controllers/Json/FrontpageControllerTest.php
Normal file
51
tests/Feature/Controllers/Json/FrontpageControllerTest.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FrontpageControllerTest.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 Tests\Feature\Controllers\Json;
|
||||||
|
|
||||||
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FrontpageControllerTest
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||||
|
*/
|
||||||
|
class FrontpageControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\FrontpageController::piggyBanks
|
||||||
|
*/
|
||||||
|
public function testPiggyBanks()
|
||||||
|
{
|
||||||
|
$piggy = $this->user()->piggyBanks()->first();
|
||||||
|
$repository = $this->mock(PiggyBankRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('getPiggyBanks')->andReturn(new Collection([$piggy]));
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.fp.piggy-banks'));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
}
|
95
tests/Feature/Controllers/Json/IntroControllerTest.php
Normal file
95
tests/Feature/Controllers/Json/IntroControllerTest.php
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* IntroControllerTest.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 Tests\Feature\Controllers\Json;
|
||||||
|
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class IntroControllerTest
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||||
|
*/
|
||||||
|
class IntroControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getIntroSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getBasicSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getSpecificSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::hasOutroStep
|
||||||
|
*/
|
||||||
|
public function testGetIntroSteps()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.intro', ['index']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getIntroSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getBasicSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getSpecificSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::hasOutroStep
|
||||||
|
*/
|
||||||
|
public function testGetIntroStepsAsset()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.intro', ['accounts_create', 'asset']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getIntroSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getBasicSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::getSpecificSteps
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::hasOutroStep
|
||||||
|
*/
|
||||||
|
public function testGetIntroStepsOutro()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('json.intro', ['reports_report', 'category']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::postEnable
|
||||||
|
*/
|
||||||
|
public function testPostEnable()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('json.intro.enable', ['accounts_create', 'asset']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Json\IntroController::postFinished
|
||||||
|
*/
|
||||||
|
public function testPostFinished()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('json.intro.finished', ['accounts_create', 'asset']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -140,7 +140,7 @@ class PreferencesControllerTest extends TestCase
|
|||||||
'viewRange' => '1M',
|
'viewRange' => '1M',
|
||||||
'customFiscalYear' => 0,
|
'customFiscalYear' => 0,
|
||||||
'showDepositsFrontpage' => 0,
|
'showDepositsFrontpage' => 0,
|
||||||
'transactionPageSize' => 100,
|
'listPageSize' => 100,
|
||||||
'twoFactorAuthEnabled' => 0,
|
'twoFactorAuthEnabled' => 0,
|
||||||
'language' => 'en_US',
|
'language' => 'en_US',
|
||||||
'tj' => [],
|
'tj' => [],
|
||||||
@ -176,7 +176,7 @@ class PreferencesControllerTest extends TestCase
|
|||||||
'viewRange' => '1M',
|
'viewRange' => '1M',
|
||||||
'customFiscalYear' => 0,
|
'customFiscalYear' => 0,
|
||||||
'showDepositsFrontpage' => 0,
|
'showDepositsFrontpage' => 0,
|
||||||
'transactionPageSize' => 100,
|
'listPageSize' => 100,
|
||||||
'twoFactorAuthEnabled' => 1,
|
'twoFactorAuthEnabled' => 1,
|
||||||
'language' => 'en_US',
|
'language' => 'en_US',
|
||||||
'tj' => [],
|
'tj' => [],
|
||||||
@ -214,7 +214,7 @@ class PreferencesControllerTest extends TestCase
|
|||||||
'viewRange' => '1M',
|
'viewRange' => '1M',
|
||||||
'customFiscalYear' => 0,
|
'customFiscalYear' => 0,
|
||||||
'showDepositsFrontpage' => 0,
|
'showDepositsFrontpage' => 0,
|
||||||
'transactionPageSize' => 100,
|
'listPageSize' => 100,
|
||||||
'twoFactorAuthEnabled' => 1,
|
'twoFactorAuthEnabled' => 1,
|
||||||
'language' => 'en_US',
|
'language' => 'en_US',
|
||||||
'tj' => [],
|
'tj' => [],
|
||||||
|
252
tests/Feature/Controllers/Report/ExpenseControllerTest.php
Normal file
252
tests/Feature/Controllers/Report/ExpenseControllerTest.php
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ExpenseControllerTest.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 Tests\Feature\Controllers\Report;
|
||||||
|
|
||||||
|
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||||
|
use FireflyIII\Models\AccountType;
|
||||||
|
use FireflyIII\Models\Transaction;
|
||||||
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ExpenseControllerTest
|
||||||
|
*
|
||||||
|
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||||
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||||
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||||
|
*/
|
||||||
|
class ExpenseControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::budget
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::combineAccounts
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::spentByBudget
|
||||||
|
*/
|
||||||
|
public function testBudget()
|
||||||
|
{
|
||||||
|
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||||
|
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||||
|
$repository = $this->mock(AccountRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
|
||||||
|
|
||||||
|
// fake collection:
|
||||||
|
$transA = new Transaction;
|
||||||
|
$transA->transaction_currency_id = 1;
|
||||||
|
$transA->transaction_budget_name = 'Budget';
|
||||||
|
$transA->transaction_budget_id = 1;
|
||||||
|
$transA->transaction_currency_symbol = 'A';
|
||||||
|
$transA->transaction_currency_dp = 2;
|
||||||
|
$transA->transaction_amount = '100';
|
||||||
|
$transB = new Transaction;
|
||||||
|
$transB->transaction_currency_id = 2;
|
||||||
|
$transB->transaction_budget_name = null;
|
||||||
|
$transB->transaction_budget_id = 0;
|
||||||
|
$transB->transaction_journal_budget_name = 'Budget2';
|
||||||
|
$transB->transaction_journal_budget_id = 2;
|
||||||
|
$transB->transaction_currency_symbol = 'A';
|
||||||
|
$transB->transaction_currency_dp = 2;
|
||||||
|
$transB->transaction_amount = '100';
|
||||||
|
$collection = new Collection([$transA, $transB]);
|
||||||
|
|
||||||
|
// mock collector for spentByBudget (complex)
|
||||||
|
$collector = $this->mock(JournalCollectorInterface::class);
|
||||||
|
// dont care about any calls, just return a default set of fake transactions:
|
||||||
|
$collector->shouldReceive('setRange')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setTypes')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setOpposingAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('withBudgetInformation')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('getJournals')->andReturn($collection);
|
||||||
|
//$collector->shouldReceive('')->andReturnSelf();
|
||||||
|
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('report-data.expense.budget', ['1', $expense->id, '20170101', '20170131']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::category
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::spentByCategory
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::earnedByCategory
|
||||||
|
*/
|
||||||
|
public function testCategory()
|
||||||
|
{
|
||||||
|
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||||
|
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||||
|
$repository = $this->mock(AccountRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
|
||||||
|
|
||||||
|
// fake collection:
|
||||||
|
$transA = new Transaction;
|
||||||
|
$transA->transaction_currency_id = 1;
|
||||||
|
$transA->transaction_category_name = 'Category';
|
||||||
|
$transA->transaction_category_id = 1;
|
||||||
|
$transA->transaction_currency_symbol = 'A';
|
||||||
|
$transA->transaction_currency_dp = 2;
|
||||||
|
$transA->transaction_amount = '100';
|
||||||
|
$transB = new Transaction;
|
||||||
|
$transB->transaction_currency_id = 2;
|
||||||
|
$transB->transaction_category_name = null;
|
||||||
|
$transB->transaction_category_id = 0;
|
||||||
|
$transB->transaction_journal_category_name = 'Category2';
|
||||||
|
$transB->transaction_journal_category_id = 2;
|
||||||
|
$transB->transaction_currency_symbol = 'A';
|
||||||
|
$transB->transaction_currency_dp = 2;
|
||||||
|
$transB->transaction_amount = '100';
|
||||||
|
$collection = new Collection([$transA, $transB]);
|
||||||
|
$transC = new Transaction;
|
||||||
|
$transC->transaction_currency_id = 3;
|
||||||
|
$transC->transaction_category_name = null;
|
||||||
|
$transC->transaction_category_id = 0;
|
||||||
|
$transC->transaction_journal_category_name = 'Category3';
|
||||||
|
$transC->transaction_journal_category_id = 3;
|
||||||
|
$transC->transaction_currency_symbol = 'A';
|
||||||
|
$transC->transaction_currency_dp = 2;
|
||||||
|
$transC->transaction_amount = '100';
|
||||||
|
$secondCollection = new Collection([$transC]);
|
||||||
|
|
||||||
|
// mock collector for spentByCategory and earnedByCategory (complex)
|
||||||
|
$collector = $this->mock(JournalCollectorInterface::class);
|
||||||
|
// dont care about any calls, just return a default set of fake transactions:
|
||||||
|
$collector->shouldReceive('setRange')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setTypes')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setOpposingAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('withCategoryInformation')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('getJournals')->andReturn($collection, $secondCollection);
|
||||||
|
//$collector->shouldReceive('')->andReturnSelf();
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('report-data.expense.category', ['1', $expense->id, '20170101', '20170131']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::spent
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::spentInPeriod
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::earnedInPeriod
|
||||||
|
*/
|
||||||
|
public function testSpent()
|
||||||
|
{
|
||||||
|
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||||
|
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||||
|
$repository = $this->mock(AccountRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
|
||||||
|
|
||||||
|
// fake collection:
|
||||||
|
$transA = new Transaction;
|
||||||
|
$transA->transaction_currency_id = 1;
|
||||||
|
$transA->transaction_category_name = 'Category';
|
||||||
|
$transA->transaction_category_id = 1;
|
||||||
|
$transA->transaction_currency_symbol = 'A';
|
||||||
|
$transA->transaction_currency_dp = 2;
|
||||||
|
$transA->transaction_amount = '100';
|
||||||
|
$transB = new Transaction;
|
||||||
|
$transB->transaction_currency_id = 2;
|
||||||
|
$transB->transaction_category_name = null;
|
||||||
|
$transB->transaction_category_id = 0;
|
||||||
|
$transB->transaction_journal_budget_name = 'Category2';
|
||||||
|
$transB->transaction_journal_budget_id = 2;
|
||||||
|
$transB->transaction_currency_symbol = 'A';
|
||||||
|
$transB->transaction_currency_dp = 2;
|
||||||
|
$transB->transaction_amount = '100';
|
||||||
|
$collection = new Collection([$transA, $transB]);
|
||||||
|
|
||||||
|
// mock collector for spentInPeriod and earnedInPeriod (complex)
|
||||||
|
$collector = $this->mock(JournalCollectorInterface::class);
|
||||||
|
// dont care about any calls, just return a default set of fake transactions:
|
||||||
|
$collector->shouldReceive('setRange')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setTypes')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setOpposingAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('getJournals')->andReturn($collection);
|
||||||
|
//$collector->shouldReceive('')->andReturnSelf();
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('report-data.expense.spent', ['1', $expense->id, '20170101', '20170131']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::topExpense
|
||||||
|
*/
|
||||||
|
public function testTopExpense()
|
||||||
|
{
|
||||||
|
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||||
|
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||||
|
$repository = $this->mock(AccountRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
|
||||||
|
|
||||||
|
// fake collection:
|
||||||
|
$transA = new Transaction;
|
||||||
|
$transA->transaction_currency_id = 1;
|
||||||
|
$transA->transaction_category_name = 'Category';
|
||||||
|
$transA->transaction_category_id = 1;
|
||||||
|
$transA->transaction_currency_symbol = 'A';
|
||||||
|
$transA->transaction_currency_dp = 2;
|
||||||
|
$transA->transaction_amount = '100';
|
||||||
|
$transB = new Transaction;
|
||||||
|
$transB->transaction_currency_id = 2;
|
||||||
|
$transB->transaction_category_name = null;
|
||||||
|
$transB->transaction_category_id = 0;
|
||||||
|
$transB->transaction_journal_budget_name = 'Category2';
|
||||||
|
$transB->transaction_journal_budget_id = 2;
|
||||||
|
$transB->transaction_currency_symbol = 'A';
|
||||||
|
$transB->transaction_currency_dp = 2;
|
||||||
|
$transB->transaction_amount = '100';
|
||||||
|
$collection = new Collection([$transA, $transB]);
|
||||||
|
|
||||||
|
// mock collector for topExpense (complex)
|
||||||
|
$collector = $this->mock(JournalCollectorInterface::class);
|
||||||
|
// dont care about any calls, just return a default set of fake transactions:
|
||||||
|
$collector->shouldReceive('setRange')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setTypes')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('setOpposingAccounts')->andReturnSelf();
|
||||||
|
$collector->shouldReceive('getJournals')->andReturn($collection);
|
||||||
|
//$collector->shouldReceive('')->andReturnSelf();
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('report-data.expense.expenses', ['1', $expense->id, '20170101', '20170131']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Report\ExpenseController::topIncome
|
||||||
|
*/
|
||||||
|
public function testTopIncome()
|
||||||
|
{
|
||||||
|
$expense = $this->user()->accounts()->where('account_type_id', 4)->first();
|
||||||
|
$revenue = $this->user()->accounts()->where('account_type_id', 5)->first();
|
||||||
|
$repository = $this->mock(AccountRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('findByName')->once()->withArgs([$expense->name, [AccountType::REVENUE]])->andReturn($revenue);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('report-data.expense.income', ['1', $expense->id, '20170101', '20170131']));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
147
tests/Feature/Controllers/Transaction/LinkControllerTest.php
Normal file
147
tests/Feature/Controllers/Transaction/LinkControllerTest.php
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* LinkControllerTest.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 Tests\Feature\Controllers\Transaction;
|
||||||
|
|
||||||
|
use FireflyIII\Models\LinkType;
|
||||||
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Models\TransactionJournalLink;
|
||||||
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
|
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class LinkControllerTest
|
||||||
|
*/
|
||||||
|
class LinkControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\LinkController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\LinkController::delete
|
||||||
|
*/
|
||||||
|
public function testDelete()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('transactions.link.delete', [1]));
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\LinkController::destroy
|
||||||
|
*/
|
||||||
|
public function testDestroy()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(LinkTypeRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('destroyLink');
|
||||||
|
$this->be($this->user());
|
||||||
|
|
||||||
|
$this->session(['journal_links.delete.uri' => 'http://localhost/']);
|
||||||
|
|
||||||
|
$response = $this->post(route('transactions.link.destroy', [1]));
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertSessionHas('success');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\LinkController::store
|
||||||
|
*/
|
||||||
|
public function testStoreAlreadyLinked()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(LinkTypeRepositoryInterface::class);
|
||||||
|
$journalRepos = $this->mock(JournalRepositoryInterface::class);
|
||||||
|
$data = [
|
||||||
|
'link_other' => 8,
|
||||||
|
'link_type' => '1_inward',
|
||||||
|
];
|
||||||
|
|
||||||
|
$journalRepos->shouldReceive('first')->andReturn(new TransactionJournal);
|
||||||
|
$journalRepos->shouldReceive('find')->andReturn(new TransactionJournal);
|
||||||
|
$repository->shouldReceive('findLink')->andReturn(true);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('transactions.link.store', [1]), $data);
|
||||||
|
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertSessionHas('error');
|
||||||
|
$response->assertRedirect(route('transactions.show', [1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\LinkController::store
|
||||||
|
*/
|
||||||
|
public function testStore()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(LinkTypeRepositoryInterface::class);
|
||||||
|
$journalRepos = $this->mock(JournalRepositoryInterface::class);
|
||||||
|
$data = [
|
||||||
|
'link_other' => 8,
|
||||||
|
'link_type' => '1_inward',
|
||||||
|
];
|
||||||
|
|
||||||
|
$journalRepos->shouldReceive('first')->andReturn(new TransactionJournal);
|
||||||
|
$journalRepos->shouldReceive('find')->andReturn(new TransactionJournal);
|
||||||
|
$repository->shouldReceive('findLink')->andReturn(false);
|
||||||
|
$repository->shouldReceive('storeLink')->andReturn(new TransactionJournalLink);
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('transactions.link.store', [1]), $data);
|
||||||
|
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertSessionHas('success');
|
||||||
|
$response->assertRedirect(route('transactions.show', [1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\LinkController::store
|
||||||
|
*/
|
||||||
|
public function testStoreInvalid()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'link_other' => 0,
|
||||||
|
'link_type' => '1_inward',
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->post(route('transactions.link.store', [1]), $data);
|
||||||
|
$response->assertStatus(302);
|
||||||
|
$response->assertSessionHas('error');
|
||||||
|
$response->assertRedirect(route('transactions.show', [1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\LinkController::switchLink
|
||||||
|
*/
|
||||||
|
public function testSwitchLink()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(LinkTypeRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('switchLink')->andReturn(false);
|
||||||
|
$this->be($this->user());
|
||||||
|
$response = $this->get(route('transactions.link.switch', [1]));
|
||||||
|
|
||||||
|
|
||||||
|
$response->assertStatus(302);
|
||||||
|
}
|
||||||
|
}
|
@ -135,6 +135,16 @@ class MassControllerTest extends TestCase
|
|||||||
->where('user_id', $this->user()->id)->first(['transaction_journals.id', DB::raw('count(transactions.`id`) as ct')])
|
->where('user_id', $this->user()->id)->first(['transaction_journals.id', DB::raw('count(transactions.`id`) as ct')])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// add reconcile transaction
|
||||||
|
$collection->push(
|
||||||
|
TransactionJournal::where('transaction_type_id', 5)
|
||||||
|
->whereNull('transaction_journals.deleted_at')
|
||||||
|
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
|
->groupBy('transaction_journals.id')
|
||||||
|
->orderBy('ct', 'DESC')
|
||||||
|
->where('user_id', $this->user()->id)->first(['transaction_journals.id', DB::raw('count(transactions.`id`) as ct')])
|
||||||
|
);
|
||||||
|
|
||||||
// add opening balance:
|
// add opening balance:
|
||||||
$collection->push(TransactionJournal::where('transaction_type_id', 4)->where('user_id', $this->user()->id)->first());
|
$collection->push(TransactionJournal::where('transaction_type_id', 4)->where('user_id', $this->user()->id)->first());
|
||||||
$allIds = $collection->pluck('id')->toArray();
|
$allIds = $collection->pluck('id')->toArray();
|
||||||
|
@ -27,6 +27,7 @@ use FireflyIII\Events\StoredTransactionJournal;
|
|||||||
use FireflyIII\Events\UpdatedTransactionJournal;
|
use FireflyIII\Events\UpdatedTransactionJournal;
|
||||||
use FireflyIII\Helpers\Attachments\AttachmentHelperInterface;
|
use FireflyIII\Helpers\Attachments\AttachmentHelperInterface;
|
||||||
use FireflyIII\Models\AccountType;
|
use FireflyIII\Models\AccountType;
|
||||||
|
use FireflyIII\Models\Note;
|
||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
@ -54,6 +55,13 @@ class SingleControllerTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function testCloneTransaction()
|
public function testCloneTransaction()
|
||||||
{
|
{
|
||||||
|
$note = new Note();
|
||||||
|
$note->id = 5;
|
||||||
|
$note->text = 'I see you...';
|
||||||
|
$repository = $this->mock(JournalRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('getNote')->andReturn($note)->once();
|
||||||
|
$repository->shouldReceive('first')->once()->andReturn(new TransactionJournal);
|
||||||
|
|
||||||
$this->be($this->user());
|
$this->be($this->user());
|
||||||
$withdrawal = TransactionJournal::where('transaction_type_id', 1)->whereNull('deleted_at')->where('user_id', $this->user()->id)->first();
|
$withdrawal = TransactionJournal::where('transaction_type_id', 1)->whereNull('deleted_at')->where('user_id', $this->user()->id)->first();
|
||||||
$response = $this->get(route('transactions.clone', [$withdrawal->id]));
|
$response = $this->get(route('transactions.clone', [$withdrawal->id]));
|
||||||
@ -63,6 +71,7 @@ class SingleControllerTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::create
|
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::create
|
||||||
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::__construct
|
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::__construct
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::groupedActiveAccountList
|
||||||
*/
|
*/
|
||||||
public function testCreate()
|
public function testCreate()
|
||||||
{
|
{
|
||||||
@ -124,6 +133,14 @@ class SingleControllerTest extends TestCase
|
|||||||
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
|
$budgetRepos = $this->mock(BudgetRepositoryInterface::class);
|
||||||
$budgetRepos->shouldReceive('getBudgets')->andReturn(new Collection)->once();
|
$budgetRepos->shouldReceive('getBudgets')->andReturn(new Collection)->once();
|
||||||
|
|
||||||
|
$note = new Note();
|
||||||
|
$note->id = 5;
|
||||||
|
$note->text = 'I see you...';
|
||||||
|
$repository = $this->mock(JournalRepositoryInterface::class);
|
||||||
|
$repository->shouldReceive('getNote')->andReturn($note)->once();
|
||||||
|
$repository->shouldReceive('first')->once()->andReturn(new TransactionJournal);
|
||||||
|
$repository->shouldReceive('countTransactions')->andReturn(2);
|
||||||
|
|
||||||
$this->be($this->user());
|
$this->be($this->user());
|
||||||
$withdrawal = TransactionJournal::where('transaction_type_id', 1)->whereNull('deleted_at')->where('user_id', $this->user()->id)->first();
|
$withdrawal = TransactionJournal::where('transaction_type_id', 1)->whereNull('deleted_at')->where('user_id', $this->user()->id)->first();
|
||||||
$response = $this->get(route('transactions.edit', [$withdrawal->id]));
|
$response = $this->get(route('transactions.edit', [$withdrawal->id]));
|
||||||
@ -201,6 +218,23 @@ class SingleControllerTest extends TestCase
|
|||||||
$response->assertStatus(302);
|
$response->assertStatus(302);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::edit
|
||||||
|
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::groupedAccountList
|
||||||
|
*/
|
||||||
|
public function testEditReconcile()
|
||||||
|
{
|
||||||
|
$this->be($this->user());
|
||||||
|
$withdrawal = TransactionJournal::where('transaction_type_id', 5)
|
||||||
|
->whereNull('transaction_journals.deleted_at')
|
||||||
|
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
|
->groupBy('transaction_journals.id')
|
||||||
|
->orderBy('ct', 'DESC')
|
||||||
|
->where('user_id', $this->user()->id)->first(['transaction_journals.id', DB::raw('count(transactions.`id`) as ct')]);
|
||||||
|
$response = $this->get(route('transactions.edit', [$withdrawal->id]));
|
||||||
|
$response->assertStatus(302);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::edit
|
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::edit
|
||||||
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::groupedAccountList
|
* @covers \FireflyIII\Http\Controllers\Transaction\SingleController::groupedAccountList
|
||||||
@ -295,8 +329,6 @@ class SingleControllerTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function testStoreSuccess()
|
public function testStoreSuccess()
|
||||||
{
|
{
|
||||||
$this->markTestIncomplete('Mockery cannot yet handle PHP7.1 null argument method things.');
|
|
||||||
|
|
||||||
// mock results:
|
// mock results:
|
||||||
$repository = $this->mock(JournalRepositoryInterface::class);
|
$repository = $this->mock(JournalRepositoryInterface::class);
|
||||||
$journal = new TransactionJournal();
|
$journal = new TransactionJournal();
|
||||||
|
Loading…
Reference in New Issue
Block a user