diff --git a/app/Generator/Report/Budget/MonthReportGenerator.php b/app/Generator/Report/Budget/MonthReportGenerator.php index 3f470595b8..a79e69517a 100644 --- a/app/Generator/Report/Budget/MonthReportGenerator.php +++ b/app/Generator/Report/Budget/MonthReportGenerator.php @@ -16,8 +16,9 @@ namespace FireflyIII\Generator\Report\Budget; use Carbon\Carbon; use FireflyIII\Generator\Report\ReportGeneratorInterface; -use FireflyIII\Generator\Report\Support; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionType; @@ -29,7 +30,7 @@ use Log; * * @package FireflyIII\Generator\Report\Budget */ -class MonthReportGenerator extends Support implements ReportGeneratorInterface +class MonthReportGenerator implements ReportGeneratorInterface { /** @var Collection */ private $accounts; @@ -160,9 +161,10 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface ->setBudgets($this->budgets)->withOpposingAccount(); $collector->removeFilter(TransferFilter::class); - $accountIds = $this->accounts->pluck('id')->toArray(); + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(PositiveAmountFilter::class); + $transactions = $collector->getJournals(); - $transactions = self::filterExpenses($transactions, $accountIds); $this->expenses = $transactions; return $transactions; diff --git a/app/Generator/Report/Category/MonthReportGenerator.php b/app/Generator/Report/Category/MonthReportGenerator.php index f787628184..5537ef1e27 100644 --- a/app/Generator/Report/Category/MonthReportGenerator.php +++ b/app/Generator/Report/Category/MonthReportGenerator.php @@ -16,8 +16,10 @@ namespace FireflyIII\Generator\Report\Category; use Carbon\Carbon; use FireflyIII\Generator\Report\ReportGeneratorInterface; -use FireflyIII\Generator\Report\Support; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionType; @@ -29,7 +31,7 @@ use Log; * * @package FireflyIII\Generator\Report\Category */ -class MonthReportGenerator extends Support implements ReportGeneratorInterface +class MonthReportGenerator implements ReportGeneratorInterface { /** @var Collection */ private $accounts; @@ -170,9 +172,10 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface ->setCategories($this->categories)->withOpposingAccount(); $collector->removeFilter(TransferFilter::class); - $accountIds = $this->accounts->pluck('id')->toArray(); + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(PositiveAmountFilter::class); + $transactions = $collector->getJournals(); - $transactions = self::filterExpenses($transactions, $accountIds); $this->expenses = $transactions; return $transactions; @@ -192,9 +195,11 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface $collector->setAccounts($this->accounts)->setRange($this->start, $this->end) ->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) ->setCategories($this->categories)->withOpposingAccount(); - $accountIds = $this->accounts->pluck('id')->toArray(); + + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(NegativeAmountFilter::class); + $transactions = $collector->getJournals(); - $transactions = self::filterIncome($transactions, $accountIds); $this->income = $transactions; return $transactions; diff --git a/app/Generator/Report/Support.php b/app/Generator/Report/Support.php deleted file mode 100644 index d12c1159cb..0000000000 --- a/app/Generator/Report/Support.php +++ /dev/null @@ -1,210 +0,0 @@ -filter( - function (Transaction $transaction) use ($accounts, $modifier) { - $opposing = $transaction->opposing_account_id; - // remove internal transfer - if (in_array($opposing, $accounts)) { - Log::debug(sprintf('Filtered #%d because its opposite is in accounts.', $transaction->id)); - - return null; - } - // remove positive amount - if (bccomp($transaction->transaction_amount, '0') === $modifier) { - Log::debug(sprintf('Filtered #%d because amount is %f.', $transaction->id, $transaction->transaction_amount)); - - return null; - } - - return $transaction; - } - ); - - return $result; - } - - /** - * @return Collection - */ - public function getTopExpenses(): Collection - { - $transactions = $this->getExpenses()->sortBy('transaction_amount'); - - return $transactions; - } - - /** - * @return Collection - */ - public function getTopIncome(): Collection - { - $transactions = $this->getIncome()->sortByDesc('transaction_amount'); - - return $transactions; - } - - /** - * @param Collection $collection - * @param int $sortFlag - * - * @return array - */ - protected function getAverages(Collection $collection, int $sortFlag): array - { - $result = []; - /** @var Transaction $transaction */ - foreach ($collection as $transaction) { - // opposing name and ID: - $opposingId = $transaction->opposing_account_id; - - // is not set? - if (!isset($result[$opposingId])) { - $name = $transaction->opposing_account_name; - $result[$opposingId] = [ - 'name' => $name, - 'count' => 1, - 'id' => $opposingId, - 'average' => $transaction->transaction_amount, - 'sum' => $transaction->transaction_amount, - ]; - continue; - } - $result[$opposingId]['count']++; - $result[$opposingId]['sum'] = bcadd($result[$opposingId]['sum'], $transaction->transaction_amount); - $result[$opposingId]['average'] = bcdiv($result[$opposingId]['sum'], strval($result[$opposingId]['count'])); - } - - // sort result by average: - $average = []; - foreach ($result as $key => $row) { - $average[$key] = floatval($row['average']); - } - - array_multisort($average, $sortFlag, $result); - - return $result; - } - - /** - * @SuppressWarnings(PHPMD.CyclomaticComplexity) // it's exactly five. - * @param array $spent - * @param array $earned - * - * @return array - */ - protected function getObjectSummary(array $spent, array $earned): array - { - $return = []; - - /** - * @var int $accountId - * @var string $entry - */ - foreach ($spent as $objectId => $entry) { - if (!isset($return[$objectId])) { - $return[$objectId] = ['spent' => 0, 'earned' => 0]; - } - - $return[$objectId]['spent'] = $entry; - } - unset($entry); - - /** - * @var int $accountId - * @var string $entry - */ - foreach ($earned as $objectId => $entry) { - if (!isset($return[$objectId])) { - $return[$objectId] = ['spent' => 0, 'earned' => 0]; - } - - $return[$objectId]['earned'] = $entry; - } - - - return $return; - } - - /** - * @param Collection $collection - * - * @return array - */ - protected function summarizeByAccount(Collection $collection): array - { - $result = []; - /** @var Transaction $transaction */ - foreach ($collection as $transaction) { - $accountId = $transaction->account_id; - $result[$accountId] = $result[$accountId] ?? '0'; - $result[$accountId] = bcadd($transaction->transaction_amount, $result[$accountId]); - } - - return $result; - } - -} diff --git a/app/Generator/Report/Tag/MonthReportGenerator.php b/app/Generator/Report/Tag/MonthReportGenerator.php index 71e1be2db6..f8a253defd 100644 --- a/app/Generator/Report/Tag/MonthReportGenerator.php +++ b/app/Generator/Report/Tag/MonthReportGenerator.php @@ -14,8 +14,10 @@ namespace FireflyIII\Generator\Report\Tag; use Carbon\Carbon; use FireflyIII\Generator\Report\ReportGeneratorInterface; -use FireflyIII\Generator\Report\Support; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; @@ -28,7 +30,7 @@ use Log; * * @package FireflyIII\Generator\Report\Tag */ -class MonthReportGenerator extends Support implements ReportGeneratorInterface +class MonthReportGenerator implements ReportGeneratorInterface { /** @var Collection */ @@ -166,9 +168,11 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface ->setTags($this->tags)->withOpposingAccount(); $collector->removeFilter(TransferFilter::class); - $accountIds = $this->accounts->pluck('id')->toArray(); - $transactions = $collector->getJournals(); - $transactions = self::filterExpenses($transactions, $accountIds); + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(PositiveAmountFilter::class); + + $transactions = $collector->getJournals(); + $this->expenses = $transactions; return $transactions; @@ -188,9 +192,11 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface $collector->setAccounts($this->accounts)->setRange($this->start, $this->end) ->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) ->setTags($this->tags)->withOpposingAccount(); - $accountIds = $this->accounts->pluck('id')->toArray(); + + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(NegativeAmountFilter::class); + $transactions = $collector->getJournals(); - $transactions = self::filterIncome($transactions, $accountIds); $this->income = $transactions; return $transactions; diff --git a/app/Helpers/Chart/MetaPieChart.php b/app/Helpers/Chart/MetaPieChart.php index 0e2b409e49..c3b8297cd1 100644 --- a/app/Helpers/Chart/MetaPieChart.php +++ b/app/Helpers/Chart/MetaPieChart.php @@ -12,8 +12,10 @@ declare(strict_types=1); namespace FireflyIII\Helpers\Chart; use Carbon\Carbon; -use FireflyIII\Generator\Report\Support; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; @@ -24,7 +26,6 @@ use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Repositories\Tag\TagRepositoryInterface; use FireflyIII\User; use Illuminate\Support\Collection; -use Log; use Steam; /** @@ -236,19 +237,22 @@ class MetaPieChart implements MetaPieChartInterface */ protected function getTransactions(string $direction): Collection { - $types = [TransactionType::DEPOSIT, TransactionType::TRANSFER]; - $modifier = -1; - if ($direction === 'expense') { - $types = [TransactionType::WITHDRAWAL, TransactionType::TRANSFER]; - $modifier = 1; - } /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); + $types = [TransactionType::DEPOSIT, TransactionType::TRANSFER]; + $collector->addFilter(NegativeAmountFilter::class); + if ($direction === 'expense') { + $types = [TransactionType::WITHDRAWAL, TransactionType::TRANSFER]; + $collector->addFilter(PositiveAmountFilter::class); + $collector->removeFilter(NegativeAmountFilter::class); + } + $collector->setUser($this->user); $collector->setAccounts($this->accounts); $collector->setRange($this->start, $this->end); $collector->setTypes($types); $collector->withOpposingAccount(); + $collector->addFilter(OpposingAccountFilter::class); if ($direction === 'income') { $collector->removeFilter(TransferFilter::class); @@ -266,23 +270,7 @@ class MetaPieChart implements MetaPieChartInterface $collector->withBudgetInformation(); } - $accountIds = $this->accounts->pluck('id')->toArray(); - $transactions = $collector->getJournals(); - Log::debug(sprintf('Modifier is %d', $modifier)); - foreach ($transactions as $transaction) { - Log::debug( - sprintf( - 'Included %s #%d (part of #%d) ("%s") amount %f', - $transaction->transaction_type_type, $transaction->id, - $transaction->journal_id - , $transaction->description, $transaction->transaction_amount - ) - ); - } - - $set = Support::filterTransactions($transactions, $accountIds, $modifier); - - return $set; + return $collector->getJournals(); } /** diff --git a/app/Helpers/Collector/JournalCollector.php b/app/Helpers/Collector/JournalCollector.php index 1aff3caa46..bfdd04617c 100644 --- a/app/Helpers/Collector/JournalCollector.php +++ b/app/Helpers/Collector/JournalCollector.php @@ -20,7 +20,9 @@ use DB; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Filter\FilterInterface; use FireflyIII\Helpers\Filter\InternalTransferFilter; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\AccountType; use FireflyIII\Models\Budget; @@ -575,6 +577,8 @@ class JournalCollector implements JournalCollectorInterface InternalTransferFilter::class => new InternalTransferFilter($this->accountIds), OpposingAccountFilter::class => new OpposingAccountFilter($this->accountIds), TransferFilter::class => new TransferFilter, + PositiveAmountFilter::class => new PositiveAmountFilter, + NegativeAmountFilter::class => new NegativeAmountFilter, ]; Log::debug(sprintf('Will run %d filters on the set.', count($this->filters))); foreach ($this->filters as $enabled) { diff --git a/app/Helpers/Filter/NegativeAmountFilter.php b/app/Helpers/Filter/NegativeAmountFilter.php new file mode 100644 index 0000000000..f2ef34bcc4 --- /dev/null +++ b/app/Helpers/Filter/NegativeAmountFilter.php @@ -0,0 +1,47 @@ +filter( + function (Transaction $transaction) { + // remove by amount + if (bccomp($transaction->transaction_amount, '0') === -1) { + Log::debug(sprintf('Filtered #%d because amount is %f.', $transaction->id, $transaction->transaction_amount)); + + return null; + } + + return $transaction; + } + ); + } +} \ No newline at end of file diff --git a/app/Helpers/Filter/PositiveAmountFilter.php b/app/Helpers/Filter/PositiveAmountFilter.php new file mode 100644 index 0000000000..ddb71841da --- /dev/null +++ b/app/Helpers/Filter/PositiveAmountFilter.php @@ -0,0 +1,50 @@ +filter( + function (Transaction $transaction) { + // remove by amount + if (bccomp($transaction->transaction_amount, '0') === 1) { + Log::debug(sprintf('Filtered #%d because amount is %f.', $transaction->id, $transaction->transaction_amount)); + + return null; + } + + return $transaction; + } + ); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Chart/BudgetReportController.php b/app/Http/Controllers/Chart/BudgetReportController.php index e68819245d..091448e599 100644 --- a/app/Http/Controllers/Chart/BudgetReportController.php +++ b/app/Http/Controllers/Chart/BudgetReportController.php @@ -16,9 +16,10 @@ namespace FireflyIII\Http\Controllers\Chart; use Carbon\Carbon; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; -use FireflyIII\Generator\Report\Support; use FireflyIII\Helpers\Chart\MetaPieChartInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Budget; @@ -237,11 +238,13 @@ class BudgetReportController extends Controller $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) ->setBudgets($budgets)->withOpposingAccount(); $collector->removeFilter(TransferFilter::class); - $accountIds = $accounts->pluck('id')->toArray(); - $transactions = $collector->getJournals(); - $set = Support::filterExpenses($transactions, $accountIds); - return $set; + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(PositiveAmountFilter::class); + + $transactions = $collector->getJournals(); + + return $transactions; } /** diff --git a/app/Http/Controllers/Chart/CategoryReportController.php b/app/Http/Controllers/Chart/CategoryReportController.php index 00e938471e..572a8a3432 100644 --- a/app/Http/Controllers/Chart/CategoryReportController.php +++ b/app/Http/Controllers/Chart/CategoryReportController.php @@ -19,6 +19,9 @@ use FireflyIII\Generator\Chart\Basic\GeneratorInterface; use FireflyIII\Generator\Report\Category\MonthReportGenerator; use FireflyIII\Helpers\Chart\MetaPieChartInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Category; @@ -274,11 +277,13 @@ class CategoryReportController extends Controller $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) ->setCategories($categories)->withOpposingAccount(); $collector->removeFilter(TransferFilter::class); - $accountIds = $accounts->pluck('id')->toArray(); - $transactions = $collector->getJournals(); - $set = MonthReportGenerator::filterExpenses($transactions, $accountIds); - return $set; + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(PositiveAmountFilter::class); + + $transactions = $collector->getJournals(); + + return $transactions; } /** @@ -295,11 +300,13 @@ class CategoryReportController extends Controller $collector = app(JournalCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) ->setCategories($categories)->withOpposingAccount(); - $accountIds = $accounts->pluck('id')->toArray(); - $transactions = $collector->getJournals(); - $set = MonthReportGenerator::filterIncome($transactions, $accountIds); - return $set; + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(NegativeAmountFilter::class); + + $transactions = $collector->getJournals(); + + return $transactions; } /** diff --git a/app/Http/Controllers/Chart/TagReportController.php b/app/Http/Controllers/Chart/TagReportController.php index f6b2a7e8b7..2aca50bc77 100644 --- a/app/Http/Controllers/Chart/TagReportController.php +++ b/app/Http/Controllers/Chart/TagReportController.php @@ -14,9 +14,11 @@ namespace FireflyIII\Http\Controllers\Chart; use Carbon\Carbon; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; -use FireflyIII\Generator\Report\Tag\MonthReportGenerator; use FireflyIII\Helpers\Chart\MetaPieChartInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Tag; @@ -306,11 +308,13 @@ class TagReportController extends Controller $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::WITHDRAWAL, TransactionType::TRANSFER]) ->setTags($tags)->withOpposingAccount(); $collector->removeFilter(TransferFilter::class); - $accountIds = $accounts->pluck('id')->toArray(); - $transactions = $collector->getJournals(); - $set = MonthReportGenerator::filterExpenses($transactions, $accountIds); - return $set; + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(PositiveAmountFilter::class); + + $transactions = $collector->getJournals(); + + return $transactions; } /** @@ -327,11 +331,13 @@ class TagReportController extends Controller $collector = app(JournalCollectorInterface::class); $collector->setAccounts($accounts)->setRange($start, $end)->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER]) ->setTags($tags)->withOpposingAccount(); - $accountIds = $accounts->pluck('id')->toArray(); - $transactions = $collector->getJournals(); - $set = MonthReportGenerator::filterIncome($transactions, $accountIds); - return $set; + $collector->addFilter(OpposingAccountFilter::class); + $collector->addFilter(NegativeAmountFilter::class); + + $transactions = $collector->getJournals(); + + return $transactions; } /** diff --git a/tests/Feature/Controllers/Chart/BudgetReportControllerTest.php b/tests/Feature/Controllers/Chart/BudgetReportControllerTest.php index b9f2ec12b5..a00de386f1 100644 --- a/tests/Feature/Controllers/Chart/BudgetReportControllerTest.php +++ b/tests/Feature/Controllers/Chart/BudgetReportControllerTest.php @@ -16,6 +16,8 @@ use Carbon\Carbon; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; use FireflyIII\Helpers\Chart\MetaPieChartInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\Transaction; @@ -104,6 +106,8 @@ class BudgetReportControllerTest extends TestCase $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL, TransactionType::TRANSFER]])->andReturnSelf(); $collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT, TransactionType::TRANSFER]])->andReturnSelf(); $collector->shouldReceive('removeFilter')->withArgs([TransferFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([OpposingAccountFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([PositiveAmountFilter::class])->andReturnSelf(); $collector->shouldReceive('setBudgets')->andReturnSelf(); $collector->shouldReceive('withOpposingAccount')->andReturnSelf(); $collector->shouldReceive('getJournals')->andReturn(new Collection([$transaction])); diff --git a/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php b/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php index db8fe61071..9f7dd992fd 100644 --- a/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php +++ b/tests/Feature/Controllers/Chart/CategoryReportControllerTest.php @@ -15,10 +15,12 @@ namespace Tests\Feature\Controllers\Chart; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; use FireflyIII\Helpers\Chart\MetaPieChartInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionType; -use Illuminate\Support\Collection; use Tests\TestCase; /** @@ -122,8 +124,8 @@ class CategoryReportControllerTest extends TestCase */ public function testMainChart() { - $generator = $this->mock(GeneratorInterface::class); - $collector = $this->mock(JournalCollectorInterface::class); + $generator = $this->mock(GeneratorInterface::class); + $collector = $this->mock(JournalCollectorInterface::class); $transactions = factory(Transaction::class, 10)->make(); $collector->shouldReceive('setAccounts')->andReturnSelf(); @@ -131,6 +133,9 @@ class CategoryReportControllerTest extends TestCase $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL, TransactionType::TRANSFER]])->andReturnSelf(); $collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT, TransactionType::TRANSFER]])->andReturnSelf(); $collector->shouldReceive('removeFilter')->withArgs([TransferFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([OpposingAccountFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([PositiveAmountFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([NegativeAmountFilter::class])->andReturnSelf(); $collector->shouldReceive('setCategories')->andReturnSelf(); $collector->shouldReceive('withOpposingAccount')->andReturnSelf(); $collector->shouldReceive('getJournals')->andReturn($transactions); diff --git a/tests/Feature/Controllers/Chart/TagReportControllerTest.php b/tests/Feature/Controllers/Chart/TagReportControllerTest.php index f86d58fb70..059633fe08 100644 --- a/tests/Feature/Controllers/Chart/TagReportControllerTest.php +++ b/tests/Feature/Controllers/Chart/TagReportControllerTest.php @@ -15,6 +15,9 @@ namespace Tests\Feature\Controllers\Chart; use FireflyIII\Generator\Chart\Basic\GeneratorInterface; use FireflyIII\Helpers\Chart\MetaPieChartInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use FireflyIII\Helpers\Filter\NegativeAmountFilter; +use FireflyIII\Helpers\Filter\OpposingAccountFilter; +use FireflyIII\Helpers\Filter\PositiveAmountFilter; use FireflyIII\Helpers\Filter\TransferFilter; use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; @@ -141,6 +144,9 @@ class TagReportControllerTest extends TestCase $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL, TransactionType::TRANSFER]])->andReturnSelf(); $collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT, TransactionType::TRANSFER]])->andReturnSelf(); $collector->shouldReceive('removeFilter')->withArgs([TransferFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([OpposingAccountFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([PositiveAmountFilter::class])->andReturnSelf(); + $collector->shouldReceive('addFilter')->withArgs([NegativeAmountFilter::class])->andReturnSelf(); $collector->shouldReceive('setTags')->andReturnSelf(); $collector->shouldReceive('withOpposingAccount')->andReturnSelf(); $collector->shouldReceive('getJournals')->andReturn($set); diff --git a/tests/Unit/Helpers/MetaPieChartTest.php b/tests/Unit/Helpers/MetaPieChartTest.php index 7ab6deb787..3234c33241 100644 --- a/tests/Unit/Helpers/MetaPieChartTest.php +++ b/tests/Unit/Helpers/MetaPieChartTest.php @@ -14,6 +14,8 @@ namespace Tests\Unit\Helpers; use Carbon\Carbon; use FireflyIII\Helpers\Chart\MetaPieChart; +use FireflyIII\Helpers\Collector\JournalCollectorInterface; +use Illuminate\Support\Collection; use Tests\TestCase; class MetaPieChartTest extends TestCase @@ -29,6 +31,12 @@ class MetaPieChartTest extends TestCase { $som = (new Carbon())->startOfMonth(); $eom = (new Carbon())->endOfMonth(); + $collection = new Collection; + + // mock collector so the correct set of journals is returned: + // then verify the results. + $collector = $this->mock(JournalCollectorInterface::class); + $helper = new MetaPieChart(); $helper->setUser($this->user());