Make event handlers easier to test (and then ignore them).

This commit is contained in:
James Cole 2017-04-28 10:34:11 +02:00
parent 29ff92f833
commit 5de8fce156
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
4 changed files with 96 additions and 26 deletions

View File

@ -16,37 +16,44 @@ namespace FireflyIII\Handlers\Events;
use FireflyIII\Events\StoredTransactionJournal; use FireflyIII\Events\StoredTransactionJournal;
use FireflyIII\Models\Rule; use FireflyIII\Models\Rule;
use FireflyIII\Models\RuleGroup; use FireflyIII\Models\RuleGroup;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface as JRI;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface as PRI;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface as RGRI;
use FireflyIII\Rules\Processor; use FireflyIII\Rules\Processor;
use FireflyIII\Support\Events\BillScanner; use FireflyIII\Support\Events\BillScanner;
use Log; use Log;
/** /**
* @codeCoverageIgnore
*
* Class StoredJournalEventHandler * Class StoredJournalEventHandler
* *
* @package FireflyIII\Handlers\Events * @package FireflyIII\Handlers\Events
*/ */
class StoredJournalEventHandler class StoredJournalEventHandler
{ {
/** @var JournalRepositoryInterface */ /** @var JRI */
public $journalRepository; public $journalRepository;
/** @var PiggyBankRepositoryInterface */ /** @var PRI */
public $repository; public $repository;
/** @var RGRI */
public $ruleGroupRepository;
/** /**
* StoredJournalEventHandler constructor. * StoredJournalEventHandler constructor.
*/ */
public function __construct(PiggyBankRepositoryInterface $repository, JournalRepositoryInterface $journalRepository) public function __construct(PRI $repository, JRI $journalRepository, RGRI $ruleGroupRepository)
{ {
$this->repository = $repository; $this->repository = $repository;
$this->journalRepository = $journalRepository; $this->journalRepository = $journalRepository;
$this->ruleGroupRepository = $ruleGroupRepository;
} }
/** /**
* This method connects a new transfer to a piggy bank. * This method connects a new transfer to a piggy bank.
* *
* @codeCoverageIgnore *
* *
* @param StoredTransactionJournal $event * @param StoredTransactionJournal $event
* *
@ -108,16 +115,11 @@ class StoredJournalEventHandler
{ {
// get all the user's rule groups, with the rules, order by 'order'. // get all the user's rule groups, with the rules, order by 'order'.
$journal = $storedJournalEvent->journal; $journal = $storedJournalEvent->journal;
$groups = $journal->user->ruleGroups()->where('rule_groups.active', 1)->orderBy('order', 'ASC')->get(); $groups = $this->ruleGroupRepository->getActiveGroups($journal->user);
//
/** @var RuleGroup $group */ /** @var RuleGroup $group */
foreach ($groups as $group) { foreach ($groups as $group) {
$rules = $group->rules() $rules = $this->ruleGroupRepository->getActiveStoreRules($group);
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
->where('rule_triggers.trigger_type', 'user_action')
->where('rule_triggers.trigger_value', 'store-journal')
->where('rules.active', 1)
->get(['rules.*']);
/** @var Rule $rule */ /** @var Rule $rule */
foreach ($rules as $rule) { foreach ($rules as $rule) {
@ -125,9 +127,8 @@ class StoredJournalEventHandler
$processor->handleTransactionJournal($journal); $processor->handleTransactionJournal($journal);
if ($rule->stop_processing) { if ($rule->stop_processing) {
return true; break;
} }
} }
} }

View File

@ -17,16 +17,29 @@ namespace FireflyIII\Handlers\Events;
use FireflyIII\Events\UpdatedTransactionJournal; use FireflyIII\Events\UpdatedTransactionJournal;
use FireflyIII\Models\Rule; use FireflyIII\Models\Rule;
use FireflyIII\Models\RuleGroup; use FireflyIII\Models\RuleGroup;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\Rules\Processor; use FireflyIII\Rules\Processor;
use FireflyIII\Support\Events\BillScanner; use FireflyIII\Support\Events\BillScanner;
/** /**
* @codeCoverageIgnore
*
* Class UpdatedJournalEventHandler * Class UpdatedJournalEventHandler
* *
* @package FireflyIII\Handlers\Events * @package FireflyIII\Handlers\Events
*/ */
class UpdatedJournalEventHandler class UpdatedJournalEventHandler
{ {
/** @var RuleGroupRepositoryInterface */
public $repository;
/**
* StoredJournalEventHandler constructor.
*/
public function __construct(RuleGroupRepositoryInterface $ruleGroupRepository)
{
$this->repository = $ruleGroupRepository;
}
/** /**
* This method will check all the rules when a journal is updated. * This method will check all the rules when a journal is updated.
@ -39,16 +52,11 @@ class UpdatedJournalEventHandler
{ {
// get all the user's rule groups, with the rules, order by 'order'. // get all the user's rule groups, with the rules, order by 'order'.
$journal = $updatedJournalEvent->journal; $journal = $updatedJournalEvent->journal;
$groups = $journal->user->ruleGroups()->where('rule_groups.active', 1)->orderBy('order', 'ASC')->get(); $groups = $this->repository->getActiveGroups($journal->user);
//
/** @var RuleGroup $group */ /** @var RuleGroup $group */
foreach ($groups as $group) { foreach ($groups as $group) {
$rules = $group->rules() $rules = $this->repository->getActiveUpdateRules($group);
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
->where('rule_triggers.trigger_type', 'user_action')
->where('rule_triggers.trigger_value', 'update-journal')
->where('rules.active', 1)
->get(['rules.*']);
/** @var Rule $rule */ /** @var Rule $rule */
foreach ($rules as $rule) { foreach ($rules as $rule) {
$processor = Processor::make($rule); $processor = Processor::make($rule);

View File

@ -92,6 +92,46 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface
return $this->user->ruleGroups()->orderBy('order', 'ASC')->get(); return $this->user->ruleGroups()->orderBy('order', 'ASC')->get();
} }
/**
* @param User $user
*
* @return Collection
*/
public function getActiveGroups(User $user): Collection
{
return $user->ruleGroups()->where('rule_groups.active', 1)->orderBy('order', 'ASC')->get(['rule_groups.*']);
}
/**
* @param RuleGroup $group
*
* @return Collection
*/
public function getActiveStoreRules(RuleGroup $group): Collection
{
return $group->rules()
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
->where('rule_triggers.trigger_type', 'user_action')
->where('rule_triggers.trigger_value', 'store-journal')
->where('rules.active', 1)
->get(['rules.*']);
}
/**
* @param RuleGroup $group
*
* @return Collection
*/
public function getActiveUpdateRules(RuleGroup $group): Collection
{
return $group->rules()
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
->where('rule_triggers.trigger_type', 'user_action')
->where('rule_triggers.trigger_value', 'update-journal')
->where('rules.active', 1)
->get(['rules.*']);
}
/** /**
* @return int * @return int
*/ */

View File

@ -53,6 +53,27 @@ interface RuleGroupRepositoryInterface
*/ */
public function get(): Collection; public function get(): Collection;
/**
* @param User $user
*
* @return Collection
*/
public function getActiveGroups(User $user): Collection;
/**
* @param RuleGroup $group
*
* @return Collection
*/
public function getActiveStoreRules(RuleGroup $group): Collection;
/**
* @param RuleGroup $group
*
* @return Collection
*/
public function getActiveUpdateRules(RuleGroup $group): Collection;
/** /**
* @return int * @return int
*/ */