From ecbc0c1778d9be68f9ecf2d62b2a9509e325b276 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 30 Dec 2016 14:24:16 +0100 Subject: [PATCH] Speed up various tests. --- app/Http/Controllers/BudgetController.php | 2 +- app/Repositories/Budget/BudgetRepository.php | 2 +- .../Controllers/AccountControllerTest.php | 10 +++ .../Controllers/BudgetControllerTest.php | 87 +++++++++++++++---- 4 files changed, 82 insertions(+), 19 deletions(-) diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index 1e807e474b..77f9f5cd64 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -262,7 +262,7 @@ class BudgetController extends Controller $journals->setPath('/budgets/show/' . $budget->id); - $set = $budget->budgetlimits()->orderBy('start_date', 'DESC')->get(); + $set = $repository->getBudgetLimits($budget, $start, $end); $subTitle = e($budget->name); $limits = new Collection(); diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index d29304d13d..d272982654 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -291,7 +291,7 @@ class BudgetRepository implements BudgetRepositoryInterface } ); } - )->get(['budget_limits.*']); + )->orderBy('budget_limits.start_date','DESC')->get(['budget_limits.*']); return $set; } diff --git a/tests/acceptance/Controllers/AccountControllerTest.php b/tests/acceptance/Controllers/AccountControllerTest.php index 9072f3b44a..e42a5a8d1a 100644 --- a/tests/acceptance/Controllers/AccountControllerTest.php +++ b/tests/acceptance/Controllers/AccountControllerTest.php @@ -8,11 +8,13 @@ * * See the LICENSE file for details. */ +use Carbon\Carbon; use FireflyIII\Helpers\Collector\JournalCollectorInterface; use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountTaskerInterface; use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Support\Collection; /** @@ -110,11 +112,19 @@ class AccountControllerTest extends TestCase */ public function testShow(string $range) { + $date = new Carbon; + $this->session(['start' => $date, 'end' => clone $date]); $tasker = $this->mock(AccountTaskerInterface::class); $tasker->shouldReceive('amountOutInPeriod')->withAnyArgs()->andReturn('-1'); $tasker->shouldReceive('amountInInPeriod')->withAnyArgs()->andReturn('1'); + // mock repository: + $repository = $this->mock(AccountRepositoryInterface::class); + $repository->shouldReceive('oldestJournalDate')->andReturn(clone $date); + $repository->shouldReceive('getAccountsByType')->andReturn(new Collection); + + $collector = $this->mock(JournalCollectorInterface::class); $collector->shouldReceive('setAccounts')->andReturnSelf(); $collector->shouldReceive('setRange')->andReturnSelf(); diff --git a/tests/acceptance/Controllers/BudgetControllerTest.php b/tests/acceptance/Controllers/BudgetControllerTest.php index 2efc1409de..2057ce68f8 100644 --- a/tests/acceptance/Controllers/BudgetControllerTest.php +++ b/tests/acceptance/Controllers/BudgetControllerTest.php @@ -8,7 +8,12 @@ * * See the LICENSE file for details. */ +use Carbon\Carbon; +use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Support\Collection; /** @@ -70,6 +75,7 @@ class BudgetControllerTest extends TestCase public function testDestroy() { $this->session(['budgets.delete.url' => 'http://localhost']); + $repository = $this->mock(BudgetRepositoryInterface::class); $repository->shouldReceive('destroy')->andReturn(true); @@ -99,6 +105,13 @@ class BudgetControllerTest extends TestCase */ public function testIndex(string $range) { + $repository = $this->mock(BudgetRepositoryInterface::class); + $repository->shouldReceive('cleanupBudgets'); + $repository->shouldReceive('getActiveBudgets')->andReturn(new Collection); + $repository->shouldReceive('getInactiveBudgets')->andReturn(new Collection); + $repository->shouldReceive('getAvailableBudget')->andReturn('100.123'); + + $this->be($this->user()); $this->changeDateRange($this->user(), $range); $this->call('GET', route('budgets.index')); @@ -115,6 +128,18 @@ class BudgetControllerTest extends TestCase */ public function testNoBudget(string $range) { + $date = new Carbon(); + $this->session(['start' => $date, 'end' => clone $date]); + + $collector = $this->mock(JournalCollectorInterface::class); + $collector->shouldReceive('setAllAssetAccounts')->andReturnSelf(); + $collector->shouldReceive('setRange')->andReturnSelf(); + $collector->shouldReceive('setLimit')->andReturnSelf(); + $collector->shouldReceive('setPage')->andReturnSelf(); + $collector->shouldReceive('withoutBudget')->andReturnSelf(); + $collector->shouldReceive('withCategoryInformation')->andReturnSelf(); + $collector->shouldReceive('getPaginatedJournals')->andReturn(new LengthAwarePaginator([], 0, 10)); + $this->be($this->user()); $this->changeDateRange($this->user(), $range); $this->call('GET', route('budgets.no-budget')); @@ -129,7 +154,7 @@ class BudgetControllerTest extends TestCase public function testPostUpdateIncome() { $data = [ - 'amount' => '200', + 'amount' => '200', ]; $this->be($this->user()); $this->call('post', route('budgets.income.post'), $data); @@ -144,6 +169,30 @@ class BudgetControllerTest extends TestCase */ public function testShow(string $range) { + $date = new Carbon(); + $date->subDay(); + $this->session(['first' => $date]); + + // mock account repository + $accountRepository = $this->mock(AccountRepositoryInterface::class); + $accountRepository->shouldReceive('getAccountsByType')->andReturn(new Collection); + + + // mock budget repository + $budgetRepository = $this->mock(BudgetRepositoryInterface::class); + $budgetRepository->shouldReceive('getBudgetLimits')->andReturn(new Collection); + $budgetRepository->shouldReceive('spentInPeriod')->andReturn('1'); + // mock journal collector: + $collector = $this->mock(JournalCollectorInterface::class); + $collector->shouldReceive('setAllAssetAccounts')->andReturnSelf(); + $collector->shouldReceive('setRange')->andReturnSelf(); + $collector->shouldReceive('setLimit')->andReturnSelf(); + $collector->shouldReceive('setPage')->andReturnSelf(); + $collector->shouldReceive('setBudget')->andReturnSelf(); + $collector->shouldReceive('withCategoryInformation')->andReturnSelf(); + $collector->shouldReceive('getPaginatedJournals')->andReturn(new LengthAwarePaginator([], 0, 10)); + + $this->be($this->user()); $this->changeDateRange($this->user(), $range); $this->call('GET', route('budgets.show', [1])); @@ -159,6 +208,25 @@ class BudgetControllerTest extends TestCase */ public function testShowByBudgetLimit(string $range) { + // mock account repository + $accountRepository = $this->mock(AccountRepositoryInterface::class); + $accountRepository->shouldReceive('getAccountsByType')->andReturn(new Collection); + + // mock budget repository + $budgetRepository = $this->mock(BudgetRepositoryInterface::class); + $budgetRepository->shouldReceive('spentInPeriod')->andReturn('1'); + + // mock journal collector: + $collector = $this->mock(JournalCollectorInterface::class); + $collector->shouldReceive('setAllAssetAccounts')->andReturnSelf(); + $collector->shouldReceive('setRange')->andReturnSelf(); + $collector->shouldReceive('setLimit')->andReturnSelf(); + $collector->shouldReceive('setPage')->andReturnSelf(); + $collector->shouldReceive('setBudget')->andReturnSelf(); + $collector->shouldReceive('withCategoryInformation')->andReturnSelf(); + $collector->shouldReceive('getPaginatedJournals')->andReturn(new LengthAwarePaginator([], 0, 10)); + + $this->be($this->user()); $this->changeDateRange($this->user(), $range); $this->call('GET', route('budgets.show.limit', [1, 1])); @@ -181,14 +249,6 @@ class BudgetControllerTest extends TestCase $this->call('post', route('budgets.store'), $data); $this->assertResponseStatus(302); $this->assertSessionHas('success'); - - // must be in list - $this->be($this->user()); - $this->call('GET', route('budgets.index')); - $this->assertResponseStatus(200); - $this->see('