From 8e5ec79097fa5c46160ba613490a730df04912a8 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 5 Mar 2017 18:15:38 +0100 Subject: [PATCH] Wrote new tests. --- .../Report/ReportGeneratorFactory.php | 2 +- app/Http/Controllers/TagController.php | 1 - .../Controllers/TransactionController.php | 1 - .../Controllers/NewUserControllerTest.php | 47 +++++++- .../Controllers/PiggyBankControllerTest.php | 106 +++++++++++++++++- .../Controllers/PreferencesControllerTest.php | 31 +++++ .../Controllers/ProfileControllerTest.php | 25 +++++ .../Controllers/ReportControllerTest.php | 89 ++++++++++++++- .../Controllers/RuleControllerTest.php | 81 ++++++++++++- .../Controllers/RuleGroupControllerTest.php | 62 +++++++++- .../Controllers/SearchControllerTest.php | 5 + .../Feature/Controllers/TagControllerTest.php | 79 ++++++++++++- .../Transaction/SplitControllerTest.php | 31 +++++ .../Controllers/TransactionControllerTest.php | 69 ++++++++++++ 14 files changed, 613 insertions(+), 16 deletions(-) diff --git a/app/Generator/Report/ReportGeneratorFactory.php b/app/Generator/Report/ReportGeneratorFactory.php index 9dbf45ed43..c62dfd6ac4 100644 --- a/app/Generator/Report/ReportGeneratorFactory.php +++ b/app/Generator/Report/ReportGeneratorFactory.php @@ -49,7 +49,7 @@ class ReportGeneratorFactory $class = sprintf('FireflyIII\Generator\Report\%s\%sReportGenerator', $type, $period); if (class_exists($class)) { /** @var ReportGeneratorInterface $obj */ - $obj = new $class; + $obj = app($class); $obj->setStartDate($start); $obj->setEndDate($end); diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index d9de24c4de..a8b5a4d50a 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -204,7 +204,6 @@ class TagController extends Controller function (Tag $tag) { $date = !is_null($tag->date) ? $tag->date->format('Ymd') : '000000'; - return strtolower($date . $tag->tag); } ); diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index b0ef6013ab..e89143d8b7 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -154,7 +154,6 @@ class TransactionController extends Controller /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); - $collector->setUser(auth()->user()); $collector->setTypes($types)->setLimit($pageSize)->setPage($page)->setAllAssetAccounts(); $collector->setRange($start, $end)->withBudgetInformation()->withCategoryInformation(); $collector->withOpposingAccount(); diff --git a/tests/Feature/Controllers/NewUserControllerTest.php b/tests/Feature/Controllers/NewUserControllerTest.php index 042dd0587a..9c613b64c9 100644 --- a/tests/Feature/Controllers/NewUserControllerTest.php +++ b/tests/Feature/Controllers/NewUserControllerTest.php @@ -11,8 +11,16 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Tests\TestCase; +/** + * Class NewUserControllerTest + * + * @package Tests\Feature\Controllers + */ class NewUserControllerTest extends TestCase { @@ -22,6 +30,13 @@ class NewUserControllerTest extends TestCase */ public function testIndex() { + // mock stuff + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $accountRepos->shouldReceive('count')->andReturn(0); + + $this->be($this->emptyUser()); $response = $this->get(route('new-user.index')); $response->assertStatus(200); @@ -33,9 +48,39 @@ class NewUserControllerTest extends TestCase */ public function testSubmit() { + // mock stuff + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $accountRepos->shouldReceive('store')->times(3); + + + $data = [ + 'bank_name' => 'New bank', + 'savings_balance' => '1000', + 'bank_balance' => '100', + 'credit_card_limit' => '1000', + ]; + $this->be($this->emptyUser()); + $response = $this->post(route('new-user.submit'), $data); + $response->assertStatus(302); + $response->assertSessionHas('success'); + } + + /** + * @covers \FireflyIII\Http\Controllers\NewUserController::submit + */ + public function testSubmitSingle() + { + // mock stuff + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $accountRepos->shouldReceive('store')->once(); + $data = [ 'bank_name' => 'New bank', - 'bank_balance' => 100, + 'bank_balance' => '100', ]; $this->be($this->emptyUser()); $response = $this->post(route('new-user.submit'), $data); diff --git a/tests/Feature/Controllers/PiggyBankControllerTest.php b/tests/Feature/Controllers/PiggyBankControllerTest.php index ef44d4b2a2..da2b048a2f 100644 --- a/tests/Feature/Controllers/PiggyBankControllerTest.php +++ b/tests/Feature/Controllers/PiggyBankControllerTest.php @@ -11,10 +11,21 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers; +use FireflyIII\Models\Account; +use FireflyIII\Models\AccountType; use FireflyIII\Models\PiggyBank; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; +use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class PiggyBankControllerTest + * + * @package Tests\Feature\Controllers + */ class PiggyBankControllerTest extends TestCase { @@ -23,6 +34,10 @@ class PiggyBankControllerTest extends TestCase */ public function testAdd() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('piggy-banks.add', [1])); $response->assertStatus(200); @@ -33,6 +48,10 @@ class PiggyBankControllerTest extends TestCase */ public function testAddMobile() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('piggy-banks.add-money-mobile', [1])); $response->assertStatus(200); @@ -44,6 +63,14 @@ class PiggyBankControllerTest extends TestCase */ public function testCreate() { + // mock stuff + $account = factory(Account::class)->make(); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $accountRepos->shouldReceive('getAccountsByType') + ->withArgs([[AccountType::DEFAULT, AccountType::ASSET]])->andReturn(new Collection([$account]))->once(); + $this->be($this->user()); $response = $this->get(route('piggy-banks.create')); $response->assertStatus(200); @@ -55,6 +82,10 @@ class PiggyBankControllerTest extends TestCase */ public function testDelete() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('piggy-banks.delete', [1])); $response->assertStatus(200); @@ -66,9 +97,14 @@ class PiggyBankControllerTest extends TestCase */ public function testDestroy() { - $repository = $this->mock(PiggyBankRepositoryInterface::class); + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('destroy')->andReturn(true); + $this->session(['piggy-banks.delete.url' => 'http://localhost']); $this->be($this->user()); $response = $this->post(route('piggy-banks.destroy', [2])); @@ -82,6 +118,14 @@ class PiggyBankControllerTest extends TestCase */ public function testEdit() { + // mock stuff + $account = factory(Account::class)->make(); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $accountRepos->shouldReceive('getAccountsByType') + ->withArgs([[AccountType::DEFAULT, AccountType::ASSET]])->andReturn(new Collection([$account]))->once(); + $this->be($this->user()); $response = $this->get(route('piggy-banks.edit', [1])); $response->assertStatus(200); @@ -94,6 +138,12 @@ class PiggyBankControllerTest extends TestCase */ public function testIndex() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('getPiggyBanks')->andReturn(new Collection); + $this->be($this->user()); $response = $this->get(route('piggy-banks.index')); $response->assertStatus(200); @@ -105,8 +155,15 @@ class PiggyBankControllerTest extends TestCase */ public function testOrder() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('reset'); + $repository->shouldReceive('setOrder')->times(2); + $this->be($this->user()); - $response = $this->post(route('piggy-banks.order', [1, 2])); + $response = $this->post(route('piggy-banks.order'), ['order' => [1, 2]]); $response->assertStatus(200); } @@ -115,6 +172,12 @@ class PiggyBankControllerTest extends TestCase */ public function testPostAdd() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('createEvent')->once(); + $data = ['amount' => '1.123']; $this->be($this->user()); $response = $this->post(route('piggy-banks.add', [1]), $data); @@ -130,6 +193,12 @@ class PiggyBankControllerTest extends TestCase */ public function testPostAddExact() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('createEvent')->once(); + // find a piggy with current amount = 0. $piggy = PiggyBank::leftJoin('piggy_bank_repetitions', 'piggy_bank_repetitions.piggy_bank_id', '=', 'piggy_banks.id') ->where('currentamount', 0) @@ -149,6 +218,12 @@ class PiggyBankControllerTest extends TestCase */ public function testPostRemove() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('createEvent')->once(); + $data = ['amount' => '1.123']; $this->be($this->user()); $response = $this->post(route('piggy-banks.remove', [1]), $data); @@ -162,6 +237,11 @@ class PiggyBankControllerTest extends TestCase */ public function testRemove() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + + $this->be($this->user()); $response = $this->get(route('piggy-banks.remove', [1])); $response->assertStatus(200); @@ -172,6 +252,10 @@ class PiggyBankControllerTest extends TestCase */ public function testRemoveMobile() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('piggy-banks.remove-money-mobile', [1])); $response->assertStatus(200); @@ -183,6 +267,12 @@ class PiggyBankControllerTest extends TestCase */ public function testShow() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('getEvents')->andReturn(new Collection); + $this->be($this->user()); $response = $this->get(route('piggy-banks.show', [1])); $response->assertStatus(200); @@ -194,6 +284,12 @@ class PiggyBankControllerTest extends TestCase */ public function testStore() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('store')->andReturn(new PiggyBank); + $this->session(['piggy-banks.create.url' => 'http://localhost']); $data = [ 'name' => 'Piggy ' . rand(999, 10000), @@ -214,6 +310,12 @@ class PiggyBankControllerTest extends TestCase */ public function testUpdate() { + // mock stuff + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $repository->shouldReceive('update')->andReturn(new PiggyBank); + $this->session(['piggy-banks.edit.url' => 'http://localhost']); $data = [ 'name' => 'Updated Piggy ' . rand(999, 10000), diff --git a/tests/Feature/Controllers/PreferencesControllerTest.php b/tests/Feature/Controllers/PreferencesControllerTest.php index 34c49aefb8..394fb4c10b 100644 --- a/tests/Feature/Controllers/PreferencesControllerTest.php +++ b/tests/Feature/Controllers/PreferencesControllerTest.php @@ -11,8 +11,19 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers; +use FireflyIII\Models\AccountType; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use Illuminate\Support\Collection; +use PragmaRX\Google2FA\Contracts\Google2FA; use Tests\TestCase; +/** + * Class PreferencesControllerTest + * + * @package Tests\Feature\Controllers + */ class PreferencesControllerTest extends TestCase { @@ -21,6 +32,12 @@ class PreferencesControllerTest extends TestCase */ public function testCode() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $google = $this->mock(Google2FA::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $google->shouldReceive('generateSecretKey')->andReturn('secret'); + $google->shouldReceive('getQRCodeInline')->andReturn('long-data-url'); $this->be($this->user()); $response = $this->get(route('preferences.code')); $response->assertStatus(200); @@ -32,6 +49,10 @@ class PreferencesControllerTest extends TestCase */ public function testDeleteCode() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('preferences.delete-code')); $response->assertStatus(302); @@ -46,6 +67,12 @@ class PreferencesControllerTest extends TestCase */ public function testIndex() { + // mock stuff + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $accountRepos->shouldReceive('getAccountsByType')->withArgs([[AccountType::DEFAULT, AccountType::ASSET]])->andReturn(new Collection)->once(); + $this->be($this->user()); $response = $this->get(route('preferences.index')); $response->assertStatus(200); @@ -57,6 +84,10 @@ class PreferencesControllerTest extends TestCase */ public function testPostIndex() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $data = [ 'fiscalYearStart' => '2016-01-01', 'frontPageAccounts' => [], diff --git a/tests/Feature/Controllers/ProfileControllerTest.php b/tests/Feature/Controllers/ProfileControllerTest.php index 8c351fd51d..3f682ee97b 100644 --- a/tests/Feature/Controllers/ProfileControllerTest.php +++ b/tests/Feature/Controllers/ProfileControllerTest.php @@ -11,9 +11,16 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface; use Tests\TestCase; +/** + * Class ProfileControllerTest + * + * @package Tests\Feature\Controllers + */ class ProfileControllerTest extends TestCase { @@ -22,6 +29,10 @@ class ProfileControllerTest extends TestCase */ public function testChangePassword() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('profile.change-password')); $response->assertStatus(200); @@ -33,6 +44,10 @@ class ProfileControllerTest extends TestCase */ public function testDeleteAccount() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('profile.delete-account')); $response->assertStatus(200); @@ -45,6 +60,10 @@ class ProfileControllerTest extends TestCase */ public function testIndex() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + $this->be($this->user()); $response = $this->get(route('profile.index')); $response->assertStatus(200); @@ -56,6 +75,9 @@ class ProfileControllerTest extends TestCase */ public function testPostChangePassword() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); $repository = $this->mock(UserRepositoryInterface::class); $repository->shouldReceive('changePassword'); @@ -75,6 +97,9 @@ class ProfileControllerTest extends TestCase */ public function testPostDeleteAccount() { + // mock stuff + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); $repository = $this->mock(UserRepositoryInterface::class); $repository->shouldReceive('destroy'); $data = [ diff --git a/tests/Feature/Controllers/ReportControllerTest.php b/tests/Feature/Controllers/ReportControllerTest.php index b7e58cb560..f7071fa1f4 100644 --- a/tests/Feature/Controllers/ReportControllerTest.php +++ b/tests/Feature/Controllers/ReportControllerTest.php @@ -11,8 +11,25 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers; + +use FireflyIII\Generator\Report\Audit\YearReportGenerator as AYRG; +use FireflyIII\Generator\Report\Budget\YearReportGenerator as BYRG; +use FireflyIII\Generator\Report\Category\YearReportGenerator as CYRG; +use FireflyIII\Generator\Report\Standard\YearReportGenerator as SYRG; +use FireflyIII\Generator\Report\Tag\YearReportGenerator as TYRG; +use FireflyIII\Helpers\Report\ReportHelperInterface; +use FireflyIII\Models\AccountType; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class ReportControllerTest + * + * @package Tests\Feature\Controllers + */ class ReportControllerTest extends TestCase { @@ -21,10 +38,19 @@ class ReportControllerTest extends TestCase */ public function testAuditReport() { + $generator = $this->mock(AYRG::class); + $journalRepos = $this->mock(JournalRepositoryInterface::class); + $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); + + $generator->shouldReceive('setStartDate')->once(); + $generator->shouldReceive('setEndDate')->once(); + $generator->shouldReceive('setAccounts')->once(); + $generator->shouldReceive('generate')->andReturn('here-be-report'); + + $this->be($this->user()); $response = $this->get(route('reports.report.audit', [1, '20160101', '20160131'])); $response->assertStatus(200); - $response->assertSee('