diff --git a/app/Console/Commands/Import.php b/app/Console/Commands/Import.php index 63bf86ada2..d88af868d9 100644 --- a/app/Console/Commands/Import.php +++ b/app/Console/Commands/Import.php @@ -77,7 +77,9 @@ class Import extends Command $handler = new CommandHandler($this); $monolog->pushHandler($handler); - $routine = new ImportRoutine($job); + /** @var ImportRoutine $routine */ + $routine = app(ImportRoutine::class); + $routine->setJob($job); $routine->run(); /** @var MessageBag $error */ diff --git a/app/Http/Controllers/ImportController.php b/app/Http/Controllers/ImportController.php index 07e4418e99..5ac5b6944d 100644 --- a/app/Http/Controllers/ImportController.php +++ b/app/Http/Controllers/ImportController.php @@ -243,7 +243,9 @@ class ImportController extends Controller */ public function start(ImportJob $job) { - $routine = new ImportRoutine($job); + /** @var ImportRoutine $routine */ + $routine = app(ImportRoutine::class); + $routine->setJob($job); $result = $routine->run(); if ($result) { return Response::json(['run' => 'ok']); @@ -281,9 +283,12 @@ class ImportController extends Controller $key = sprintf('firefly.import_configurators.%s', $type); $className = config($key); if (is_null($className)) { - throw new FireflyException('Cannot find configurator class for this job.'); + throw new FireflyException('Cannot find configurator class for this job.'); // @codeCoverageIgnore } - $configurator = new $className($job); + /** @var ConfiguratorInterface $configurator */ + $configurator = app($className); + $configurator->setJob($job); + return $configurator; } diff --git a/app/Import/Configurator/ConfiguratorInterface.php b/app/Import/Configurator/ConfiguratorInterface.php index 2de21661df..4969109b01 100644 --- a/app/Import/Configurator/ConfiguratorInterface.php +++ b/app/Import/Configurator/ConfiguratorInterface.php @@ -22,10 +22,8 @@ interface ConfiguratorInterface { /** * ConfiguratorInterface constructor. - * - * @param ImportJob $job */ - public function __construct(ImportJob $job); + public function __construct(); /** * Store any data from the $data array into the job. @@ -36,6 +34,13 @@ interface ConfiguratorInterface */ public function configureJob(array $data): bool; + /** + * @param ImportJob $job + * + * @return void + */ + public function setJob(ImportJob $job); + /** * Return the data required for the next step in the job configuration. * diff --git a/app/Import/Configurator/CsvConfigurator.php b/app/Import/Configurator/CsvConfigurator.php index b1bfaecb28..ea92d0fcfa 100644 --- a/app/Import/Configurator/CsvConfigurator.php +++ b/app/Import/Configurator/CsvConfigurator.php @@ -28,14 +28,11 @@ class CsvConfigurator implements ConfiguratorInterface { private $job; - public function __construct(ImportJob $job) + /** + * ConfiguratorInterface constructor. + */ + public function __construct() { - $this->job = $job; - if (is_null($this->job->configuration) || count($this->job->configuration) === 0) { - Log::debug(sprintf('Gave import job %s initial configuration.', $this->job->key)); - $this->job->configuration = config('csv.default_config'); - $this->job->save(); - } } /** @@ -116,6 +113,19 @@ class CsvConfigurator implements ConfiguratorInterface return false; } + /** + * @param ImportJob $job + */ + public function setJob(ImportJob $job) + { + $this->job = $job; + if (is_null($this->job->configuration) || count($this->job->configuration) === 0) { + Log::debug(sprintf('Gave import job %s initial configuration.', $this->job->key)); + $this->job->configuration = config('csv.default_config'); + $this->job->save(); + } + } + /** * @return string * @throws FireflyException diff --git a/app/Import/Routine/ImportRoutine.php b/app/Import/Routine/ImportRoutine.php index 993a22f101..a9f90ede7a 100644 --- a/app/Import/Routine/ImportRoutine.php +++ b/app/Import/Routine/ImportRoutine.php @@ -37,16 +37,23 @@ class ImportRoutine /** * ImportRoutine constructor. * - * @param ImportJob $job */ - public function __construct(ImportJob $job) + public function __construct() { - $this->job = $job; $this->journals = new Collection; $this->errors = new Collection; Log::debug(sprintf('Job ID is #%d', $job->id)); } + /** + * @param ImportJob $job + */ + public function setJob(ImportJob $job) + { + $this->job = $job; + } + + /** * */ diff --git a/routes/web.php b/routes/web.php index 745e68d262..11e3a8c7c6 100755 --- a/routes/web.php +++ b/routes/web.php @@ -390,7 +390,7 @@ Route::group( Route::get('download/{importJob}', ['uses' => 'ImportController@download', 'as' => 'download']); Route::get('status/{importJob}', ['uses' => 'ImportController@status', 'as' => 'status']); Route::get('json/{importJob}', ['uses' => 'ImportController@json', 'as' => 'json']); - Route::any('start/{importJob}', ['uses' => 'ImportController@start', 'as' => 'start']); + Route::post('start/{importJob}', ['uses' => 'ImportController@start', 'as' => 'start']); diff --git a/tests/Feature/Controllers/ImportControllerTest.php b/tests/Feature/Controllers/ImportControllerTest.php index 53f6764260..1473056f64 100644 --- a/tests/Feature/Controllers/ImportControllerTest.php +++ b/tests/Feature/Controllers/ImportControllerTest.php @@ -7,19 +7,14 @@ * See the LICENSE file for details. */ -declare(strict_types = 1); +declare(strict_types=1); namespace Tests\Feature\Controllers; -use FireflyIII\Import\ImportProcedureInterface; -use FireflyIII\Import\Setup\CsvSetup; +use FireflyIII\Import\Configurator\CsvConfigurator; +use FireflyIII\Import\Routine\ImportRoutine; use FireflyIII\Models\ImportJob; -use FireflyIII\Models\Tag; -use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; -use FireflyIII\Repositories\Journal\JournalRepositoryInterface; -use FireflyIII\Repositories\Tag\TagRepositoryInterface; -use FireflyIII\Repositories\User\UserRepositoryInterface; use Illuminate\Http\UploadedFile; use Tests\TestCase; @@ -31,53 +26,20 @@ use Tests\TestCase; class ImportControllerTest extends TestCase { - - /** - * @covers \FireflyIII\Http\Controllers\ImportController::complete - * @covers \FireflyIII\Http\Controllers\ImportController::jobInCorrectStep - * @covers \FireflyIII\Http\Controllers\ImportController::redirectToCorrectStep - */ - public function testComplete() - { - $journalRepos = $this->mock(JournalRepositoryInterface::class); - $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); - - $this->be($this->user()); - $response = $this->get(route('import.complete', ['complete'])); - $response->assertStatus(200); - $response->assertSee('