Expand tests.

This commit is contained in:
James Cole
2017-03-19 17:54:21 +01:00
parent 1adb0f2f0e
commit 9515ce6807
25 changed files with 1180 additions and 551 deletions

View File

@@ -17,6 +17,7 @@ use Cache;
use FireflyIII\Http\Requests\CurrencyFormRequest;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Http\Request;
use Log;
use Preferences;
@@ -30,6 +31,11 @@ use View;
class CurrencyController extends Controller
{
/** @var CurrencyRepositoryInterface */
protected $repository;
/** @var UserRepositoryInterface */
protected $userRepository;
/**
*
@@ -43,6 +49,8 @@ class CurrencyController extends Controller
function ($request, $next) {
View::share('title', trans('firefly.currencies'));
View::share('mainTitleIcon', 'fa-usd');
$this->repository = app(CurrencyRepositoryInterface::class);
$this->userRepository = app(UserRepositoryInterface::class);
return $next($request);
}
@@ -52,10 +60,16 @@ class CurrencyController extends Controller
/**
* @param Request $request
*
* @return View
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|View
*/
public function create(Request $request)
{
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
$request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')]));
return redirect(route('currencies.index'));
}
$subTitleIcon = 'fa-plus';
$subTitle = trans('firefly.create_currency');
@@ -92,15 +106,22 @@ class CurrencyController extends Controller
/**
* @param Request $request
* @param CurrencyRepositoryInterface $repository
* @param TransactionCurrency $currency
* @param Request $request
* @param TransactionCurrency $currency
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|View
*/
public function delete(Request $request, CurrencyRepositoryInterface $repository, TransactionCurrency $currency)
public function delete(Request $request, TransactionCurrency $currency)
{
if (!$repository->canDeleteCurrency($currency)) {
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')]));
return redirect(route('currencies.index'));
// @codeCoverageIgnoreEnd
}
if (!$this->repository->canDeleteCurrency($currency)) {
$request->session()->flash('error', trans('firefly.cannot_delete_currency', ['name' => $currency->name]));
return redirect(route('currencies.index'));
@@ -118,21 +139,28 @@ class CurrencyController extends Controller
}
/**
* @param Request $request
* @param CurrencyRepositoryInterface $repository
* @param TransactionCurrency $currency
* @param Request $request
* @param TransactionCurrency $currency
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function destroy(Request $request, CurrencyRepositoryInterface $repository, TransactionCurrency $currency)
public function destroy(Request $request, TransactionCurrency $currency)
{
if (!$repository->canDeleteCurrency($currency)) {
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')]));
return redirect(route('currencies.index'));
// @codeCoverageIgnoreEnd
}
if (!$this->repository->canDeleteCurrency($currency)) {
$request->session()->flash('error', trans('firefly.cannot_delete_currency', ['name' => $currency->name]));
return redirect(route('currencies.index'));
}
$repository->destroy($currency);
$this->repository->destroy($currency);
$request->session()->flash('success', trans('firefly.deleted_currency', ['name' => $currency->name]));
return redirect($this->getPreviousUri('currencies.delete.uri'));
@@ -142,10 +170,18 @@ class CurrencyController extends Controller
* @param Request $request
* @param TransactionCurrency $currency
*
* @return View
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|View
*/
public function edit(Request $request, TransactionCurrency $currency)
{
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')]));
return redirect(route('currencies.index'));
// @codeCoverageIgnoreEnd
}
$subTitleIcon = 'fa-pencil';
$subTitle = trans('breadcrumbs.edit_currency', ['name' => $currency->name]);
$currency->symbol = htmlentities($currency->symbol);
@@ -163,74 +199,79 @@ class CurrencyController extends Controller
}
/**
* @param Request $request
* @param CurrencyRepositoryInterface $repository
* @param Request $request
*
* @return View
*/
public function index(Request $request, CurrencyRepositoryInterface $repository)
public function index(Request $request)
{
$currencies = $repository->get();
$defaultCurrency = $repository->getCurrencyByPreference(Preferences::get('currencyPreference', config('firefly.default_currency', 'EUR')));
if (!auth()->user()->hasRole('owner')) {
$currencies = $this->repository->get();
$defaultCurrency = $this->repository->getCurrencyByPreference(Preferences::get('currencyPreference', config('firefly.default_currency', 'EUR')));
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
$request->session()->flash('info', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')]));
}
return view('currencies.index', compact('currencies', 'defaultCurrency'));
}
/**
* @param CurrencyFormRequest $request
*
* @param CurrencyFormRequest $request
* @param CurrencyRepositoryInterface $repository
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function store(CurrencyFormRequest $request, CurrencyRepositoryInterface $repository)
public function store(CurrencyFormRequest $request)
{
if (!auth()->user()->hasRole('owner')) {
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
// @codeCoverageIgnoreStart
Log::error('User ' . auth()->user()->id . ' is not admin, but tried to store a currency.');
return redirect($this->getPreviousUri('currencies.create.uri'));
// @codeCoverageIgnoreEnd
}
$data = $request->getCurrencyData();
$currency = $repository->store($data);
$currency = $this->repository->store($data);
$request->session()->flash('success', trans('firefly.created_currency', ['name' => $currency->name]));
if (intval($request->get('create_another')) === 1) {
// @codeCoverageIgnoreStart
$request->session()->put('currencies.create.fromStore', true);
return redirect(route('currencies.create'))->withInput();
// @codeCoverageIgnoreEnd
}
return redirect($this->getPreviousUri('currencies.create.uri'));
}
/**
* @param CurrencyFormRequest $request
* @param CurrencyRepositoryInterface $repository
* @param TransactionCurrency $currency
* @param CurrencyFormRequest $request
* @param TransactionCurrency $currency
*
* @return \Illuminate\Http\RedirectResponse
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function update(CurrencyFormRequest $request, CurrencyRepositoryInterface $repository, TransactionCurrency $currency)
public function update(CurrencyFormRequest $request, TransactionCurrency $currency)
{
$data = $request->getCurrencyData();
if (auth()->user()->hasRole('owner')) {
$currency = $repository->update($currency, $data);
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
// @codeCoverageIgnoreStart
$request->session()->flash('error', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')]));
return redirect(route('currencies.index'));
// @codeCoverageIgnoreEnd
}
$data = $request->getCurrencyData();
$currency = $this->repository->update($currency, $data);
$request->session()->flash('success', trans('firefly.updated_currency', ['name' => $currency->name]));
Preferences::mark();
if (intval($request->get('return_to_edit')) === 1) {
// @codeCoverageIgnoreStart
$request->session()->put('currencies.edit.fromUpdate', true);
return redirect(route('currencies.edit', [$currency->id]));
// @codeCoverageIgnoreEnd
}
return redirect($this->getPreviousUri('currencies.edit.uri'));

View File

@@ -58,7 +58,7 @@ class HelpController extends Controller
return Response::json($content);
}
$content = $help->getFromGithub($language, $route);
$content = $help->getFromGithub($route, $language);
$notYourLanguage = '<p><em>' . strval(trans('firefly.help_may_not_be_your_language')) . '</em></p>';
// get backup language content (try English):
@@ -66,10 +66,10 @@ class HelpController extends Controller
$language = 'en_US';
if ($help->inCache($route, $language)) {
Log::debug(sprintf('Help text %s was in cache.', $language));
$content = $help->getFromCache($route, $language);
$content = $notYourLanguage . $help->getFromCache($route, $language);
}
if (!$help->inCache($route, $language)) {
$content = trim($notYourLanguage . $help->getFromGithub($language, $route));
$content = trim($notYourLanguage . $help->getFromGithub($route, $language));
}
}

View File

@@ -20,6 +20,7 @@ use FireflyIII\Import\Setup\SetupInterface;
use FireflyIII\Models\ImportJob;
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Http\Request;
use Illuminate\Http\Response as LaravelResponse;
use Log;
@@ -87,8 +88,6 @@ class ImportController extends Controller
{
Log::debug('Now at start of configure()');
if (!$this->jobInCorrectStep($job, 'configure')) {
Log::debug('Job is not in correct state for configure()', ['status' => $job->status]);
return $this->redirectToCorrectStep($job);
}
@@ -100,8 +99,6 @@ class ImportController extends Controller
$subTitleIcon = 'fa-wrench';
return view('import.' . $job->file_type . '.configure', compact('data', 'job', 'subTitle', 'subTitleIcon'));
}
/**
@@ -145,8 +142,6 @@ class ImportController extends Controller
public function finished(ImportJob $job)
{
if (!$this->jobInCorrectStep($job, 'finished')) {
Log::debug('Job is not in correct state for finished()', ['status' => $job->status]);
return $this->redirectToCorrectStep($job);
}
@@ -224,13 +219,13 @@ class ImportController extends Controller
/**
* Step 4. Save the configuration.
*
* @param Request $request
* @param ImportJob $job
* @param Request $request
* @param ImportJobRepositoryInterface $repository
* @param ImportJob $job
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @throws FireflyException
*/
public function postConfigure(Request $request, ImportJob $job)
public function postConfigure(Request $request, ImportJobRepositoryInterface $repository, ImportJob $job)
{
Log::debug('Now in postConfigure()', ['job' => $job->key]);
if (!$this->jobInCorrectStep($job, 'process')) {
@@ -245,8 +240,7 @@ class ImportController extends Controller
$importer->saveImportConfiguration($data, $files);
// update job:
$job->status = 'import_configuration_saved';
$job->save();
$repository->updateStatus($job, 'import_configuration_saved');
// return redirect to settings.
// this could loop until the user is done.
@@ -285,12 +279,10 @@ class ImportController extends Controller
* @return View
* @throws FireflyException
*/
public function settings(ImportJob $job)
public function settings(ImportJobRepositoryInterface $repository, ImportJob $job)
{
Log::debug('Now in settings()', ['job' => $job->key]);
if (!$this->jobInCorrectStep($job, 'settings')) {
Log::debug('Job should not be in settings()');
return $this->redirectToCorrectStep($job);
}
Log::debug('Continue in settings()');
@@ -308,8 +300,7 @@ class ImportController extends Controller
}
Log::debug('Job does NOT require user config.');
$job->status = 'settings_complete';
$job->save();
$repository->updateStatus($job, 'settings_complete');
// if no more settings, save job and continue to process thing.
return redirect(route('import.complete', [$job->key]));
@@ -350,15 +341,17 @@ class ImportController extends Controller
return view('import.status', compact('job', 'subTitle', 'subTitleIcon'));
}
/**
* This is step 2. It creates an Import Job. Stores the import.
*
* @param ImportUploadRequest $request
* @param ImportJobRepositoryInterface $repository
* @param UserRepositoryInterface $userRepository
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function upload(ImportUploadRequest $request, ImportJobRepositoryInterface $repository)
public function upload(ImportUploadRequest $request, ImportJobRepositoryInterface $repository, UserRepositoryInterface $userRepository)
{
Log::debug('Now in upload()');
// create import job:
@@ -375,7 +368,7 @@ class ImportController extends Controller
$disk = Storage::disk('upload');
// user is demo user, replace upload with prepared file.
if (auth()->user()->hasRole('demo')) {
if ($userRepository->hasRole(auth()->user(),'demo')) {
$stubsDisk = Storage::disk('stubs');
$content = $stubsDisk->get('demo-import.csv');
$contentEncrypted = Crypt::encrypt($content);
@@ -384,14 +377,13 @@ class ImportController extends Controller
// also set up prepared configuration.
$configuration = json_decode($stubsDisk->get('demo-configuration.json'), true);
$job->configuration = $configuration;
$job->save();
$repository->setConfiguration($job, $configuration);
Log::debug('Set configuration for demo user', $configuration);
// also flash info
Session::flash('info', trans('demo.import-configure-security'));
}
if (!auth()->user()->hasRole('demo')) {
if (!$userRepository->hasRole(auth()->user(),'demo')) {
// user is not demo, process original upload:
$disk->put($newName, $contentEncrypted);
Log::debug('Uploaded file', ['name' => $upload->getClientOriginalName(), 'size' => $upload->getSize(), 'mime' => $upload->getClientMimeType()]);
@@ -411,18 +403,14 @@ class ImportController extends Controller
$configRaw = $configFileObject->fread($configFileObject->getSize());
$configuration = json_decode($configRaw, true);
// @codeCoverageIgnoreStart
if (!is_null($configuration) && is_array($configuration)) {
Log::debug('Found configuration', $configuration);
$job->configuration = $configuration;
$job->save();
$repository->setConfiguration($job, $configuration);
}
// @codeCoverageIgnoreEnd
}
// if user is demo user, replace config with prepared config:
return redirect(route('import.configure', [$job->key]));
}
/**
@@ -440,6 +428,7 @@ class ImportController extends Controller
return $job->status === 'import_status_never_started';
case 'settings':
case 'store-settings':
Log::debug(sprintf('Job %d with key %s has status %s', $job->id, $job->key, $job->status));
return $job->status === 'import_configuration_saved';
case 'finished':
return $job->status === 'import_complete';
@@ -449,7 +438,7 @@ class ImportController extends Controller
return ($job->status === 'settings_complete') || ($job->status === 'import_running');
}
return false;
return false; // @codeCoverageIgnore
}
@@ -475,7 +464,7 @@ class ImportController extends Controller
return $importer;
}
throw new FireflyException(sprintf('"%s" is not a valid file type', $type));
throw new FireflyException(sprintf('"%s" is not a valid file type', $type)); // @codeCoverageIgnore
}
@@ -507,7 +496,7 @@ class ImportController extends Controller
return redirect(route('import.finished', [$job->key]));
}
throw new FireflyException('Cannot redirect for job state ' . $job->status);
throw new FireflyException('Cannot redirect for job state ' . $job->status); // @codeCoverageIgnore
}
}

View File

@@ -128,7 +128,7 @@ class JavascriptController extends Controller
switch ($viewRange) {
default:
throw new FireflyException('The date picker does not yet support "' . $viewRange . '".');
throw new FireflyException('The date picker does not yet support "' . $viewRange . '".'); // @codeCoverageIgnore
case '1D':
case 'custom':
$format = (string)trans('config.month_and_day');