diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index d4501d9c29..189c1e2dea 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -169,7 +169,7 @@ class BudgetController extends Controller $cache->addProperty($budgetLimit->id ?? 0); $cache->addProperty('chart.budget.expense-asset'); if ($cache->has()) { - return Response::json($cache->get()); // @codeCoverageIgnore + return Response::json($cache->get()); // @codeCoverageIgnore } /** @var JournalCollectorInterface $collector */ @@ -214,7 +214,7 @@ class BudgetController extends Controller $cache->addProperty($budgetLimit->id ?? 0); $cache->addProperty('chart.budget.expense-category'); if ($cache->has()) { - return Response::json($cache->get()); // @codeCoverageIgnore + return Response::json($cache->get()); // @codeCoverageIgnore } /** @var JournalCollectorInterface $collector */ @@ -261,7 +261,7 @@ class BudgetController extends Controller $cache->addProperty($budgetLimit->id ?? 0); $cache->addProperty('chart.budget.expense-expense'); if ($cache->has()) { - return Response::json($cache->get()); // @codeCoverageIgnore + return Response::json($cache->get()); // @codeCoverageIgnore } /** @var JournalCollectorInterface $collector */ @@ -283,7 +283,8 @@ class BudgetController extends Controller $names = $this->getAccountNames(array_keys($result)); foreach ($result as $opposingId => $amount) { - $chartData[$names[$opposingId]] = $amount; + $name = $names[$opposingId] ?? 'no name'; + $chartData[$name] = $amount; } $data = $this->generator->pieChart($chartData); @@ -445,6 +446,7 @@ class BudgetController extends Controller $return[$accountId] = $grouped[$accountId][0]['name']; } } + $return[0] = '(no name)'; return $return; } diff --git a/tests/Feature/Controllers/Chart/BudgetControllerTest.php b/tests/Feature/Controllers/Chart/BudgetControllerTest.php index 457dc0c982..94b4f033f8 100644 --- a/tests/Feature/Controllers/Chart/BudgetControllerTest.php +++ b/tests/Feature/Controllers/Chart/BudgetControllerTest.php @@ -15,11 +15,15 @@ namespace Tests\Feature\Controllers\Chart; use Carbon\Carbon; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Models\Account; use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; +use FireflyIII\Models\Category; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionType; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use Illuminate\Support\Collection; use Tests\TestCase; @@ -86,6 +90,114 @@ class BudgetControllerTest extends TestCase $response->assertStatus(500); } + /** + * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::expenseAsset + * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::getAccountNames + * @dataProvider dateRangeProvider + * + * @param string $range + */ + public function testExpenseAsset(string $range) + { + $repository = $this->mock(BudgetRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); + $collector = $this->mock(JournalCollectorInterface::class); + $catRepos = $this->mock(CategoryRepositoryInterface::class); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $transactions = factory(Transaction::class, 10)->make(); + $accounts = factory(Account::class, 10)->make(); + + $collector->shouldReceive('setAllAssetAccounts')->once()->andReturnSelf(); + $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL]])->once()->andReturnSelf(); + $collector->shouldReceive('setBudget')->andReturnSelf(); + $collector->shouldReceive('setRange')->andReturnSelf(); + $collector->shouldReceive('getJournals')->andReturn($transactions); + + $accountRepos->shouldReceive('getAccountsByType')->andReturn($accounts)->once(); + + $generator->shouldReceive('pieChart')->once()->andReturn([]); + + $this->be($this->user()); + $this->changeDateRange($this->user(), $range); + $response = $this->get(route('chart.budget.expense-asset', [1, 1])); + $response->assertStatus(200); + } + + /** + * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::expenseCategory + * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::getCategoryNames + * @dataProvider dateRangeProvider + * + * @param string $range + */ + public function testExpenseCategory(string $range) + { + $repository = $this->mock(BudgetRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); + $collector = $this->mock(JournalCollectorInterface::class); + $catRepos = $this->mock(CategoryRepositoryInterface::class); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + + $transactions = factory(Transaction::class, 10)->make(); + $categories = factory(Category::class, 10)->make(); + + $collector->shouldReceive('setAllAssetAccounts')->once()->andReturnSelf(); + $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL]])->once()->andReturnSelf(); + $collector->shouldReceive('setBudget')->andReturnSelf(); + $collector->shouldReceive('setRange')->andReturnSelf(); + $collector->shouldReceive('withCategoryInformation')->andReturnSelf(); + $collector->shouldReceive('getJournals')->andReturn($transactions); + + $catRepos->shouldReceive('getCategories')->andReturn($categories)->once(); + + $generator->shouldReceive('pieChart')->once()->andReturn([]); + + $this->be($this->user()); + $this->changeDateRange($this->user(), $range); + $response = $this->get(route('chart.budget.expense-category', [1, 1])); + $response->assertStatus(200); + } + + /** + * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::expenseExpense + * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::getAccountNames + * @dataProvider dateRangeProvider + * + * @param string $range + */ + public function testExpenseExpense(string $range) + { + $repository = $this->mock(BudgetRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); + $collector = $this->mock(JournalCollectorInterface::class); + $catRepos = $this->mock(CategoryRepositoryInterface::class); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + + $repository = $this->mock(BudgetRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); + $collector = $this->mock(JournalCollectorInterface::class); + $catRepos = $this->mock(CategoryRepositoryInterface::class); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $transactions = factory(Transaction::class, 10)->make(); + $accounts = factory(Account::class, 10)->make(); + + $collector->shouldReceive('setAllAssetAccounts')->once()->andReturnSelf(); + $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL]])->once()->andReturnSelf(); + $collector->shouldReceive('setBudget')->andReturnSelf(); + $collector->shouldReceive('setRange')->andReturnSelf(); + $collector->shouldReceive('withOpposingAccount')->andReturnSelf(); + $collector->shouldReceive('getJournals')->andReturn($transactions); + + $accountRepos->shouldReceive('getAccountsByType')->andReturn($accounts)->once(); + + $generator->shouldReceive('pieChart')->once()->andReturn([]); + + $this->be($this->user()); + $this->changeDateRange($this->user(), $range); + $response = $this->get(route('chart.budget.expense-expense', [1, 1])); + $response->assertStatus(200); + } + /** * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::frontpage * @covers \FireflyIII\Http\Controllers\Chart\BudgetController::getExpensesForBudget @@ -237,5 +349,4 @@ class BudgetControllerTest extends TestCase $response = $this->get(route('chart.budget.period.no-budget', ['1', '20120101', '20120131'])); $response->assertStatus(200); } - } diff --git a/tests/Feature/Controllers/Chart/CategoryControllerTest.php b/tests/Feature/Controllers/Chart/CategoryControllerTest.php index d3b6b74da5..1c73fd6ae4 100644 --- a/tests/Feature/Controllers/Chart/CategoryControllerTest.php +++ b/tests/Feature/Controllers/Chart/CategoryControllerTest.php @@ -56,32 +56,6 @@ class CategoryControllerTest extends TestCase $response->assertStatus(200); } - /** - * @covers \FireflyIII\Http\Controllers\Chart\CategoryController::currentPeriod - * @covers \FireflyIII\Http\Controllers\Chart\CategoryController::makePeriodChart - * @dataProvider dateRangeProvider - * - * @param string $range - */ - public function testCurrentPeriod(string $range) - { - $repository = $this->mock(CategoryRepositoryInterface::class); - $accountRepos = $this->mock(AccountRepositoryInterface::class); - $generator = $this->mock(GeneratorInterface::class); - $account = factory(Account::class)->make(); - - - $accountRepos->shouldReceive('getAccountsByType')->andReturn(new Collection([$account])); - $repository->shouldReceive('spentInPeriod')->andReturn('0'); - $repository->shouldReceive('earnedInPeriod')->andReturn('0'); - $generator->shouldReceive('multiSet')->andReturn([])->once(); - - $this->be($this->user()); - $this->changeDateRange($this->user(), $range); - $response = $this->get(route('chart.category.current', [1])); - $response->assertStatus(200); - } - /** * @covers \FireflyIII\Http\Controllers\Chart\CategoryController::frontpage * @dataProvider dateRangeProvider diff --git a/tests/Feature/Controllers/TagControllerTest.php b/tests/Feature/Controllers/TagControllerTest.php index a64f043b34..6eb05798a4 100644 --- a/tests/Feature/Controllers/TagControllerTest.php +++ b/tests/Feature/Controllers/TagControllerTest.php @@ -163,6 +163,7 @@ class TagControllerTest extends TestCase $repository->shouldReceive('firstUseDate')->andReturn(new Carbon)->once(); $repository->shouldReceive('lastUseDate')->andReturn(new Carbon)->once(); $repository->shouldReceive('earnedInPeriod')->andReturn('1')->once(); + $repository->shouldReceive('sumOfTag')->andReturn('1')->once(); $collector->shouldReceive('setAllAssetAccounts')->andReturnSelf()->times(3); $collector->shouldReceive('setLimit')->andReturnSelf()->times(3); @@ -193,6 +194,7 @@ class TagControllerTest extends TestCase $journalRepos->shouldReceive('first')->once()->andReturn(new TransactionJournal); $repository->shouldReceive('firstUseDate')->andReturn(new Carbon)->once(); + $repository->shouldReceive('sumOfTag')->andReturn('1')->once(); $collector->shouldReceive('setAllAssetAccounts')->andReturnSelf()->times(3); $collector->shouldReceive('setLimit')->andReturnSelf()->times(3); $collector->shouldReceive('setPage')->andReturnSelf()->times(3);