From c339a183b9a2aacd52086e658624c6f37fbdbc0f Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 30 May 2018 18:04:43 +0200 Subject: [PATCH] Fix code coverage and a test #1443 --- .../Controllers/Import/IndexController.php | 8 +- .../Import/IndexControllerTest.php | 129 +++++++++++++++--- 2 files changed, 119 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/Import/IndexController.php b/app/Http/Controllers/Import/IndexController.php index 567c386911..8d471992a5 100644 --- a/app/Http/Controllers/Import/IndexController.php +++ b/app/Http/Controllers/Import/IndexController.php @@ -71,7 +71,7 @@ class IndexController extends Controller */ public function create(string $importProvider) { - Log::debug(sprintf('Will create job for provider %s', $importProvider)); + Log::debug(sprintf('Will create job for provider "%s"', $importProvider)); // can only create "fake" for demo user. $providers = array_keys($this->getProviders()); if (!\in_array($importProvider, $providers, true)) { @@ -91,11 +91,13 @@ class IndexController extends Controller Log::debug('Provider has no prerequisites. Continue.'); // if job provider also has no configuration: if ($hasConfig === false) { + // @codeCoverageIgnoreStart Log::debug('Provider needs no configuration for job. Job is ready to start.'); $this->repository->updateStatus($importJob, 'ready_to_run'); Log::debug('Redirect to status-page.'); return redirect(route('import.job.status.index', [$importJob->key])); + // @codeCoverageIgnoreEnd } // update job to say "has_prereq". @@ -127,11 +129,13 @@ class IndexController extends Controller // update job to say "has_prereq". $this->repository->setStatus($importJob, 'has_prereq'); if ($hasConfig === false) { + // @codeCoverageIgnoreStart Log::debug('Provider has no configuration. Job is ready to start.'); $this->repository->updateStatus($importJob, 'ready_to_run'); Log::debug('Redirect to status-page.'); return redirect(route('import.job.status.index', [$importJob->key])); + // @codeCoverageIgnoreEnd } Log::debug('Job has configuration. Redirect to job-config.'); // Otherwise just redirect to job configuration. @@ -182,7 +186,7 @@ class IndexController extends Controller } if ($isDemoUser === false && $allowedForUser === false && $isDebug === false) { //Log::debug('User is not demo and this provider is not allowed for such users. NEXT!'); - continue; + continue; // @codeCoverageIgnore } $providers[$providerName] = [ diff --git a/tests/Feature/Controllers/Import/IndexControllerTest.php b/tests/Feature/Controllers/Import/IndexControllerTest.php index 05d9932c44..c053ed74c4 100644 --- a/tests/Feature/Controllers/Import/IndexControllerTest.php +++ b/tests/Feature/Controllers/Import/IndexControllerTest.php @@ -22,7 +22,10 @@ declare(strict_types=1); namespace Tests\Feature\Controllers\Import; +use FireflyIII\Import\Prerequisites\BunqPrerequisites; use FireflyIII\Import\Prerequisites\FakePrerequisites; +use FireflyIII\Import\Prerequisites\FilePrerequisites; +use FireflyIII\Import\Prerequisites\SpectrePrerequisites; use FireflyIII\Models\ImportJob; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; @@ -51,20 +54,58 @@ class IndexControllerTest extends TestCase /** * @covers \FireflyIII\Http\Controllers\Import\IndexController */ - public function testCreateFake(): void + public function testCreateBadJob(): void { // mock stuff: - $repository = $this->mock(ImportJobRepositoryInterface::class); - $userRepository = $this->mock(UserRepositoryInterface::class); - $fakePrerequisites = $this->mock(FakePrerequisites::class); + $repository = $this->mock(ImportJobRepositoryInterface::class); + $userRepository = $this->mock(UserRepositoryInterface::class); + $fakePrerequisites = $this->mock(FakePrerequisites::class); + $bunqPrerequisites = $this->mock(BunqPrerequisites::class); + $spectrePrerequisites = $this->mock(SpectrePrerequisites::class); // fake job: $importJob = new ImportJob; $importJob->provider = 'fake'; $importJob->key = 'fake_job_1'; - // mock call: - $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(),'demo'])->andReturn(true)->once(); + // mock calls: + $fakePrerequisites->shouldReceive('setUser')->once(); + $bunqPrerequisites->shouldReceive('setUser')->once(); + $spectrePrerequisites->shouldReceive('setUser')->once(); + $fakePrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + $bunqPrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + $spectrePrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + + $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(false)->once(); + + $this->be($this->user()); + $response = $this->get(route('import.create', ['bad'])); + $response->assertStatus(302); + // expect a redirect to index + $response->assertSessionHas('warning', 'Firefly III cannot create a job for the "bad"-provider.'); + $response->assertRedirect(route('import.index')); + } + + /** + * @covers \FireflyIII\Http\Controllers\Import\IndexController + */ + public function testCreateFake(): void + { + // mock stuff: + $repository = $this->mock(ImportJobRepositoryInterface::class); + $userRepository = $this->mock(UserRepositoryInterface::class); + $fakePrerequisites = $this->mock(FakePrerequisites::class); + $bunqPrerequisites = $this->mock(BunqPrerequisites::class); + $spectrePrerequisites = $this->mock(SpectrePrerequisites::class); + $filePrerequisites = $this->mock(FilePrerequisites::class); + + // fake job: + $importJob = new ImportJob; + $importJob->provider = 'fake'; + $importJob->key = 'fake_job_1'; + + // mock calls + $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(true)->once(); $repository->shouldReceive('create')->withArgs(['fake'])->andReturn($importJob); $fakePrerequisites->shouldReceive('isComplete')->twice()->andReturn(false); $fakePrerequisites->shouldReceive('setUser')->twice(); @@ -77,16 +118,18 @@ class IndexControllerTest extends TestCase $response->assertRedirect(route('import.prerequisites.index', ['fake', 'fake_job_1'])); } - /** * @covers \FireflyIII\Http\Controllers\Import\IndexController */ public function testCreateFakeNoPrereq(): void { // mock stuff: - $repository = $this->mock(ImportJobRepositoryInterface::class); - $fakePrerequisites = $this->mock(FakePrerequisites::class); - $userRepository = $this->mock(UserRepositoryInterface::class); + $repository = $this->mock(ImportJobRepositoryInterface::class); + $userRepository = $this->mock(UserRepositoryInterface::class); + $fakePrerequisites = $this->mock(FakePrerequisites::class); + $bunqPrerequisites = $this->mock(BunqPrerequisites::class); + $spectrePrerequisites = $this->mock(SpectrePrerequisites::class); + $filePrerequisites = $this->mock(FilePrerequisites::class); // fake job: $importJob = new ImportJob; @@ -94,7 +137,7 @@ class IndexControllerTest extends TestCase $importJob->key = 'fake_job_2'; // mock call: - $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(),'demo'])->andReturn(true)->once(); + $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(true)->once(); $repository->shouldReceive('create')->withArgs(['fake'])->andReturn($importJob); $fakePrerequisites->shouldReceive('isComplete')->twice()->andReturn(true); $fakePrerequisites->shouldReceive('setUser')->twice(); @@ -108,6 +151,46 @@ class IndexControllerTest extends TestCase $response->assertRedirect(route('import.job.configuration.index', ['fake_job_2'])); } + /** + * @covers \FireflyIII\Http\Controllers\Import\IndexController + */ + public function testCreateFileHasNoPrereq(): void + { + // mock stuff: + $repository = $this->mock(ImportJobRepositoryInterface::class); + $userRepository = $this->mock(UserRepositoryInterface::class); + $fakePrerequisites = $this->mock(FakePrerequisites::class); + $bunqPrerequisites = $this->mock(BunqPrerequisites::class); + $spectrePrerequisites = $this->mock(SpectrePrerequisites::class); + $filePrerequisites = $this->mock(FilePrerequisites::class); + + // fake job: + $importJob = new ImportJob; + $importJob->provider = 'file'; + $importJob->key = 'file_job_1'; + + // mock calls + $fakePrerequisites->shouldReceive('setUser')->once(); + $bunqPrerequisites->shouldReceive('setUser')->once(); + $spectrePrerequisites->shouldReceive('setUser')->once(); + + $fakePrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + $bunqPrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + $spectrePrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + + $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(false)->once(); + $repository->shouldReceive('create')->withArgs(['file'])->andReturn($importJob); + + $repository->shouldReceive('setStatus')->withArgs([Mockery::any(), 'has_prereq'])->andReturn($importJob)->once(); + + + $this->be($this->user()); + $response = $this->get(route('import.create', ['file'])); + $response->assertStatus(302); + // expect a redirect to prerequisites + $response->assertRedirect(route('import.job.configuration.index', ['file_job_1'])); + } + /** * @covers \FireflyIII\Http\Controllers\Import\IndexController */ @@ -116,11 +199,21 @@ class IndexControllerTest extends TestCase $this->be($this->user()); // fake stuff: - $userRepository = $this->mock(UserRepositoryInterface::class); + $userRepository = $this->mock(UserRepositoryInterface::class); + $fakePrerequisites = $this->mock(FakePrerequisites::class); + $bunqPrerequisites = $this->mock(BunqPrerequisites::class); + $spectrePrerequisites = $this->mock(SpectrePrerequisites::class); + $filePrerequisites = $this->mock(FilePrerequisites::class); // call methods: $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(false); + $fakePrerequisites->shouldReceive('setUser')->once(); + $bunqPrerequisites->shouldReceive('setUser')->once(); + $spectrePrerequisites->shouldReceive('setUser')->once(); + $fakePrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + $bunqPrerequisites->shouldReceive('isComplete')->once()->andReturn(true); + $spectrePrerequisites->shouldReceive('isComplete')->once()->andReturn(true); $response = $this->get(route('import.index')); $response->assertStatus(200); @@ -135,12 +228,16 @@ class IndexControllerTest extends TestCase $this->be($this->user()); // fake stuff: - $fake = $this->mock(FakePrerequisites::class); - $userRepository = $this->mock(UserRepositoryInterface::class); + $fakePrerequisites = $this->mock(FakePrerequisites::class); + $bunqPrerequisites = $this->mock(BunqPrerequisites::class); + $spectrePrerequisites = $this->mock(SpectrePrerequisites::class); + $filePrerequisites = $this->mock(FilePrerequisites::class); + $userRepository = $this->mock(UserRepositoryInterface::class); + // call methods: - $fake->shouldReceive('setUser')->once(); - $fake->shouldReceive('isComplete')->once()->andReturn(true); + $fakePrerequisites->shouldReceive('setUser')->once(); + $fakePrerequisites->shouldReceive('isComplete')->once()->andReturn(true); $userRepository->shouldReceive('hasRole')->withArgs([Mockery::any(), 'demo'])->andReturn(true);