diff --git a/app/Http/Controllers/Chart/CategoryReportController.php b/app/Http/Controllers/Chart/CategoryReportController.php index b10c193e1d..7703725bfe 100644 --- a/app/Http/Controllers/Chart/CategoryReportController.php +++ b/app/Http/Controllers/Chart/CategoryReportController.php @@ -78,11 +78,8 @@ class CategoryReportController extends Controller { /** @var MetaPieChartInterface $helper */ $helper = app(MetaPieChartInterface::class); - $helper->setAccounts($accounts); - $helper->setCategories($categories); - $helper->setStart($start); - $helper->setEnd($end); - $helper->setCollectOtherObjects(intval($others) === 1); + $helper->setAccounts($accounts)->setCategories($categories)->setStart($start)->setEnd($end)->setCollectOtherObjects(intval($others) === 1); + $chartData = $helper->generate('expense', 'account'); $data = $this->generator->pieChart($chartData); diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 24113ceab8..85729c895c 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -60,6 +60,18 @@ $factory->define( } ); +$factory->define( + FireflyIII\Models\PiggyBankEvent::class, function (Faker\Generator $faker) { + return [ + 'id' => $faker->numberBetween(1, 10), + 'piggy_bank_id' => $faker->numberBetween(1, 10), + 'transaction_journal_id' => $faker->numberBetween(1, 10), + 'date' => $faker->date('Y-m-d'), + 'amount' => '100', + ]; +} +); + $factory->define( FireflyIII\Models\BudgetLimit::class, function (Faker\Generator $faker) { return [ diff --git a/tests/Feature/Controllers/Admin/ConfigurationControllerTest.php b/tests/Feature/Controllers/Admin/ConfigurationControllerTest.php index 5d7c0e9b4e..44bad78766 100644 --- a/tests/Feature/Controllers/Admin/ConfigurationControllerTest.php +++ b/tests/Feature/Controllers/Admin/ConfigurationControllerTest.php @@ -16,6 +16,11 @@ use FireflyConfig; use FireflyIII\Models\Configuration; use Tests\TestCase; +/** + * Class ConfigurationControllerTest + * + * @package Tests\Feature\Controllers\Admin + */ class ConfigurationControllerTest extends TestCase { diff --git a/tests/Feature/Controllers/Admin/HomeControllerTest.php b/tests/Feature/Controllers/Admin/HomeControllerTest.php index 10bd26ecd4..b31d833ff4 100644 --- a/tests/Feature/Controllers/Admin/HomeControllerTest.php +++ b/tests/Feature/Controllers/Admin/HomeControllerTest.php @@ -13,6 +13,11 @@ namespace Tests\Feature\Controllers\Admin; use Tests\TestCase; +/** + * Class HomeControllerTest + * + * @package Tests\Feature\Controllers\Admin + */ class HomeControllerTest extends TestCase { diff --git a/tests/Feature/Controllers/Admin/UserControllerTest.php b/tests/Feature/Controllers/Admin/UserControllerTest.php index 1e52c7e17a..f94977460a 100644 --- a/tests/Feature/Controllers/Admin/UserControllerTest.php +++ b/tests/Feature/Controllers/Admin/UserControllerTest.php @@ -18,6 +18,11 @@ use FireflyIII\Support\Facades\Preferences; use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class UserControllerTest + * + * @package Tests\Feature\Controllers\Admin + */ class UserControllerTest extends TestCase { /** @@ -25,8 +30,6 @@ class UserControllerTest extends TestCase */ public function testEdit() { - $repository = $this->mock(UserRepositoryInterface::class); - $this->be($this->user()); $response = $this->get(route('admin.users.edit', [1])); $response->assertStatus(200); diff --git a/tests/Feature/Controllers/Auth/TwoFactorControllerTest.php b/tests/Feature/Controllers/Auth/TwoFactorControllerTest.php index 8257233692..b1882647e2 100644 --- a/tests/Feature/Controllers/Auth/TwoFactorControllerTest.php +++ b/tests/Feature/Controllers/Auth/TwoFactorControllerTest.php @@ -16,6 +16,11 @@ use FireflyIII\Models\Preference; use Preferences; use Tests\TestCase; +/** + * Class TwoFactorControllerTest + * + * @package Tests\Feature\Controllers\Auth + */ class TwoFactorControllerTest extends TestCase { /** diff --git a/tests/Feature/Controllers/Chart/AccountControllerTest.php b/tests/Feature/Controllers/Chart/AccountControllerTest.php index 718b86aba6..a6468fef80 100644 --- a/tests/Feature/Controllers/Chart/AccountControllerTest.php +++ b/tests/Feature/Controllers/Chart/AccountControllerTest.php @@ -24,6 +24,11 @@ use Illuminate\Support\Collection; use Steam; use Tests\TestCase; +/** + * Class AccountControllerTest + * + * @package Tests\Feature\Controllers\Chart + */ class AccountControllerTest extends TestCase { /** diff --git a/tests/Feature/Controllers/Chart/BillControllerTest.php b/tests/Feature/Controllers/Chart/BillControllerTest.php index 59c8e8efd6..b0251dc790 100644 --- a/tests/Feature/Controllers/Chart/BillControllerTest.php +++ b/tests/Feature/Controllers/Chart/BillControllerTest.php @@ -18,6 +18,11 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class BillControllerTest + * + * @package Tests\Feature\Controllers\Chart + */ class BillControllerTest extends TestCase { /** diff --git a/tests/Feature/Controllers/Chart/BudgetControllerTest.php b/tests/Feature/Controllers/Chart/BudgetControllerTest.php index 079d90820c..1f70434c54 100644 --- a/tests/Feature/Controllers/Chart/BudgetControllerTest.php +++ b/tests/Feature/Controllers/Chart/BudgetControllerTest.php @@ -22,6 +22,11 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class BudgetControllerTest + * + * @package Tests\Feature\Controllers\Chart + */ class BudgetControllerTest extends TestCase { diff --git a/tests/Feature/Controllers/Chart/CategoryControllerTest.php b/tests/Feature/Controllers/Chart/CategoryControllerTest.php index 3b5a88f52a..b2e06f7e5c 100644 --- a/tests/Feature/Controllers/Chart/CategoryControllerTest.php +++ b/tests/Feature/Controllers/Chart/CategoryControllerTest.php @@ -13,11 +13,20 @@ namespace Tests\Feature\Controllers\Chart; use Carbon\Carbon; +use FireflyIII\Generator\Chart\Basic\GeneratorInterface; +use FireflyIII\Models\Account; +use FireflyIII\Models\AccountType; +use FireflyIII\Models\Category; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class CategoryControllerTest + * + * @package Tests\Feature\Controllers\Chart + */ class CategoryControllerTest extends TestCase { @@ -30,11 +39,15 @@ class CategoryControllerTest extends TestCase */ public function testAll(string $range) { - $catRepository = $this->mock(CategoryRepositoryInterface::class); + $repository = $this->mock(CategoryRepositoryInterface::class); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); - $catRepository->shouldReceive('spentInPeriod')->andReturn('0'); - $catRepository->shouldReceive('earnedInPeriod')->andReturn('0'); - $catRepository->shouldReceive('firstUseDate')->andReturn(new Carbon); + $repository->shouldReceive('spentInPeriod')->andReturn('0'); + $repository->shouldReceive('earnedInPeriod')->andReturn('0'); + $repository->shouldReceive('firstUseDate')->andReturn(new Carbon)->once(); + $accountRepos->shouldReceive('getAccountsByType')->withArgs([[AccountType::DEFAULT, AccountType::ASSET]])->andReturn(new Collection)->once(); + $generator->shouldReceive('multiSet')->once()->andReturn([]); $this->be($this->user()); @@ -52,15 +65,17 @@ class CategoryControllerTest extends TestCase */ public function testCurrentPeriod(string $range) { - // this is actually for makePeriodChart - $accountRepository = $this->mock(AccountRepositoryInterface::class); - $categoryRepository = $this->mock(CategoryRepositoryInterface::class); - $account = $this->user()->accounts()->where('account_type_id', 5)->first(); - $accountRepository->shouldReceive('getAccountsByType')->andReturn(new Collection([$account])); - $categoryRepository->shouldReceive('spentInPeriod')->andReturn('0'); - $categoryRepository->shouldReceive('earnedInPeriod')->andReturn('0'); + $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])); @@ -75,17 +90,17 @@ class CategoryControllerTest extends TestCase */ public function testFrontpage(string $range) { - $accountRepository = $this->mock(AccountRepositoryInterface::class); - $categoryRepository = $this->mock(CategoryRepositoryInterface::class); - $category = $this->user()->categories()->first(); - $account = $this->user()->accounts()->where('account_type_id', 5)->first(); - // get one category - $categoryRepository->shouldReceive('getCategories')->andReturn(new Collection([$category])); - // get one account - $accountRepository->shouldReceive('getAccountsByType')->andReturn(new Collection([$account])); - // always return zero - $categoryRepository->shouldReceive('spentInPeriod')->andReturn('0'); - $categoryRepository->shouldReceive('spentInPeriodWithoutCategory')->andReturn('0'); + $repository = $this->mock(CategoryRepositoryInterface::class); + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); + $category = factory(Category::class)->make(); + $account = factory(Account::class)->make(); + + $repository->shouldReceive('getCategories')->andReturn(new Collection([$category])); + $accountRepos->shouldReceive('getAccountsByType')->andReturn(new Collection([$account])); + $repository->shouldReceive('spentInPeriod')->andReturn('0'); + $repository->shouldReceive('spentInPeriodWithoutCategory')->andReturn('0'); + $generator->shouldReceive('singleSet')->andReturn([]); $this->be($this->user()); $this->changeDateRange($this->user(), $range); @@ -98,6 +113,14 @@ class CategoryControllerTest extends TestCase */ public function testReportPeriod() { + $repository = $this->mock(CategoryRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); + + $repository->shouldReceive('periodExpenses')->andReturn([])->once(); + $repository->shouldReceive('periodIncome')->andReturn([])->once(); + $generator->shouldReceive('multiSet')->andReturn([])->once(); + + $this->be($this->user()); $response = $this->get(route('chart.category.period', [1, '1', '20120101', '20120131'])); $response->assertStatus(200); @@ -108,6 +131,13 @@ class CategoryControllerTest extends TestCase */ public function testReportPeriodNoCategory() { + $repository = $this->mock(CategoryRepositoryInterface::class); + $generator = $this->mock(GeneratorInterface::class); + + $repository->shouldReceive('periodExpensesNoCategory')->andReturn([])->once(); + $repository->shouldReceive('periodIncomeNoCategory')->andReturn([])->once(); + $generator->shouldReceive('multiSet')->andReturn([])->once(); + $this->be($this->user()); $response = $this->get(route('chart.category.period.no-category', ['1', '20120101', '20120131'])); $response->assertStatus(200); @@ -122,12 +152,15 @@ class CategoryControllerTest extends TestCase */ public function testSpecificPeriod(string $range) { - $accountRepository = $this->mock(AccountRepositoryInterface::class); - $categoryRepository = $this->mock(CategoryRepositoryInterface::class); - $account = $this->user()->accounts()->where('account_type_id', 5)->first(); - $accountRepository->shouldReceive('getAccountsByType')->andReturn(new Collection([$account])); - $categoryRepository->shouldReceive('spentInPeriod')->andReturn('0'); - $categoryRepository->shouldReceive('earnedInPeriod')->andReturn('0'); + $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); diff --git a/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php b/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php index 8626bfa981..cae2f3b8cb 100644 --- a/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php +++ b/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php @@ -12,8 +12,18 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers\Chart; +use FireflyIII\Generator\Chart\Basic\GeneratorInterface; +use FireflyIII\Helpers\Chart\MetaPieChartInterface; +use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Models\TransactionType; +use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class CategoryReportControllerTest + * + * @package Tests\Feature\Controllers\Chart + */ class CategoryReportControllerTest extends TestCase { @@ -23,6 +33,17 @@ class CategoryReportControllerTest extends TestCase */ public function testAccountExpense() { + $generator = $this->mock(GeneratorInterface::class); + $pieChart = $this->mock(MetaPieChartInterface::class); + + $pieChart->shouldReceive('setAccounts')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCategories')->once()->andReturnSelf(); + $pieChart->shouldReceive('setStart')->once()->andReturnSelf(); + $pieChart->shouldReceive('setEnd')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCollectOtherObjects')->once()->andReturnSelf()->withArgs([false]); + $pieChart->shouldReceive('generate')->withArgs(['expense', 'account'])->andReturn([])->once(); + $generator->shouldReceive('pieChart')->andReturn([])->once(); + $this->be($this->user()); $response = $this->get(route('chart.category.account-expense', ['1', '1', '20120101', '20120131', 0])); $response->assertStatus(200); @@ -33,6 +54,17 @@ class CategoryReportControllerTest extends TestCase */ public function testAccountIncome() { + $generator = $this->mock(GeneratorInterface::class); + $pieChart = $this->mock(MetaPieChartInterface::class); + + $pieChart->shouldReceive('setAccounts')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCategories')->once()->andReturnSelf(); + $pieChart->shouldReceive('setStart')->once()->andReturnSelf(); + $pieChart->shouldReceive('setEnd')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCollectOtherObjects')->once()->andReturnSelf()->withArgs([false]); + $pieChart->shouldReceive('generate')->withArgs(['income', 'account'])->andReturn([])->once(); + $generator->shouldReceive('pieChart')->andReturn([])->once(); + $this->be($this->user()); $response = $this->get(route('chart.category.account-income', ['1', '1', '20120101', '20120131', 0])); $response->assertStatus(200); @@ -43,6 +75,17 @@ class CategoryReportControllerTest extends TestCase */ public function testCategoryExpense() { + $generator = $this->mock(GeneratorInterface::class); + $pieChart = $this->mock(MetaPieChartInterface::class); + + $pieChart->shouldReceive('setAccounts')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCategories')->once()->andReturnSelf(); + $pieChart->shouldReceive('setStart')->once()->andReturnSelf(); + $pieChart->shouldReceive('setEnd')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCollectOtherObjects')->once()->andReturnSelf()->withArgs([false]); + $pieChart->shouldReceive('generate')->withArgs(['expense', 'category'])->andReturn([])->once(); + $generator->shouldReceive('pieChart')->andReturn([])->once(); + $this->be($this->user()); $response = $this->get(route('chart.category.category-expense', ['1', '1', '20120101', '20120131', 0])); $response->assertStatus(200); @@ -53,6 +96,17 @@ class CategoryReportControllerTest extends TestCase */ public function testCategoryIncome() { + $generator = $this->mock(GeneratorInterface::class); + $pieChart = $this->mock(MetaPieChartInterface::class); + + $pieChart->shouldReceive('setAccounts')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCategories')->once()->andReturnSelf(); + $pieChart->shouldReceive('setStart')->once()->andReturnSelf(); + $pieChart->shouldReceive('setEnd')->once()->andReturnSelf(); + $pieChart->shouldReceive('setCollectOtherObjects')->once()->andReturnSelf()->withArgs([false]); + $pieChart->shouldReceive('generate')->withArgs(['income', 'category'])->andReturn([])->once(); + $generator->shouldReceive('pieChart')->andReturn([])->once(); + $this->be($this->user()); $response = $this->get(route('chart.category.category-income', ['1', '1', '20120101', '20120131', 0])); $response->assertStatus(200); @@ -60,9 +114,25 @@ class CategoryReportControllerTest extends TestCase /** * @covers \FireflyIII\Http\Controllers\Chart\CategoryReportController::mainChart + * @covers \FireflyIII\Http\Controllers\Chart\CategoryReportController::groupByCategory + * @covers \FireflyIII\Http\Controllers\Chart\CategoryReportController::getExpenses + * @covers \FireflyIII\Http\Controllers\Chart\CategoryReportController::getIncome */ public function testMainChart() { + $generator = $this->mock(GeneratorInterface::class); + $collector = $this->mock(JournalCollectorInterface::class); + + $collector->shouldReceive('setAccounts')->andReturnSelf(); + $collector->shouldReceive('setRange')->andReturnSelf(); + $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL, TransactionType::TRANSFER]])->andReturnSelf(); + $collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT, TransactionType::TRANSFER]])->andReturnSelf(); + $collector->shouldReceive('disableFilter')->andReturnSelf(); + $collector->shouldReceive('setCategories')->andReturnSelf(); + $collector->shouldReceive('withOpposingAccount')->andReturnSelf(); + $collector->shouldReceive('getJournals')->andReturn(new Collection); + $generator->shouldReceive('multiSet')->andReturn([])->once(); + $this->be($this->user()); $response = $this->get(route('chart.category.main', ['1', '1', '20120101', '20120131'])); $response->assertStatus(200); diff --git a/tests/Feature/Controllers/Chart/PiggyBankControllerTest.php b/tests/Feature/Controllers/Chart/PiggyBankControllerTest.php index 68a2d0f887..39b5870d68 100644 --- a/tests/Feature/Controllers/Chart/PiggyBankControllerTest.php +++ b/tests/Feature/Controllers/Chart/PiggyBankControllerTest.php @@ -12,8 +12,17 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers\Chart; +use FireflyIII\Generator\Chart\Basic\GeneratorInterface; +use FireflyIII\Models\PiggyBankEvent; +use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; +use Illuminate\Support\Collection; use Tests\TestCase; +/** + * Class PiggyBankControllerTest + * + * @package Tests\Feature\Controllers\Chart + */ class PiggyBankControllerTest extends TestCase { /** @@ -22,6 +31,13 @@ class PiggyBankControllerTest extends TestCase */ public function testHistory() { + $generator = $this->mock(GeneratorInterface::class); + $repository = $this->mock(PiggyBankRepositoryInterface::class); + $event = factory(PiggyBankEvent::class)->make(); + + $repository->shouldReceive('getEvents')->andReturn(new Collection([$event])); + $generator->shouldReceive('singleSet')->once()->andReturn([]); + $this->be($this->user()); $response = $this->get(route('chart.piggy-bank.history', [1])); $response->assertStatus(200); diff --git a/tests/Feature/Controllers/Chart/ReportControllerTest.php b/tests/Feature/Controllers/Chart/ReportControllerTest.php index d42aa62364..795abc80ff 100644 --- a/tests/Feature/Controllers/Chart/ReportControllerTest.php +++ b/tests/Feature/Controllers/Chart/ReportControllerTest.php @@ -12,17 +12,31 @@ declare(strict_types = 1); namespace Tests\Feature\Controllers\Chart; +use FireflyIII\Generator\Chart\Basic\GeneratorInterface; +use FireflyIII\Repositories\Account\AccountTaskerInterface; +use Steam; use Tests\TestCase; +/** + * Class ReportControllerTest + * + * @package Tests\Feature\Controllers\Chart + */ class ReportControllerTest extends TestCase { /** * @covers \FireflyIII\Http\Controllers\Chart\ReportController::netWorth + * @covers \FireflyIII\Http\Controllers\Chart\ReportController::arraySum * @covers \FireflyIII\Http\Controllers\Chart\ReportController::__construct */ public function testNetWorth() { + $generator = $this->mock(GeneratorInterface::class); + + Steam::shouldReceive('balancesById')->andReturn(['5', '10']); + $generator->shouldReceive('singleSet')->andReturn([]); + $this->be($this->user()); $response = $this->get(route('chart.report.net-worth', [1, '20120101', '20120131'])); $response->assertStatus(200); @@ -30,9 +44,17 @@ class ReportControllerTest extends TestCase /** * @covers \FireflyIII\Http\Controllers\Chart\ReportController::operations + * @covers \FireflyIII\Http\Controllers\Chart\ReportController::getChartData */ public function testOperations() { + $generator = $this->mock(GeneratorInterface::class); + $tasker = $this->mock(AccountTaskerInterface::class); + + $tasker->shouldReceive('amountOutInPeriod')->andReturn('-1'); + $tasker->shouldReceive('amountInInPeriod')->andReturn('1'); + $generator->shouldReceive('multiSet')->andReturn([]); + $this->be($this->user()); $response = $this->get(route('chart.report.operations', [1, '20120101', '20120131'])); $response->assertStatus(200); @@ -40,9 +62,17 @@ class ReportControllerTest extends TestCase /** * @covers \FireflyIII\Http\Controllers\Chart\ReportController::sum + * @covers \FireflyIII\Http\Controllers\Chart\ReportController::getChartData */ public function testSum() { + $generator = $this->mock(GeneratorInterface::class); + $tasker = $this->mock(AccountTaskerInterface::class); + + $tasker->shouldReceive('amountOutInPeriod')->andReturn('-1'); + $tasker->shouldReceive('amountInInPeriod')->andReturn('1'); + $generator->shouldReceive('multiSet')->andReturn([]); + $this->be($this->user()); $response = $this->get(route('chart.report.sum', [1, '20120101', '20120131'])); $response->assertStatus(200);