private function handleEvent(Account $aggregate, DomainEvent $event) { $handlingMethod = $aggregate->getHandlerMethodFor($event); if (!method_exists($aggregate, $handlingMethod)) { throw new \InvalidArgumentException('Unknown event received: ' . get_class($event)); } $aggregate->{$handlingMethod}($event); }
function it_handles_deposit_command(AccountingInterface $accounting, Account $account) { $account->deposit(Argument::type(Deposit::class))->shouldBeCalled(); $accounting->getAccount(Argument::type(AccountNumber::class))->willReturn($account); $accounting->commit()->shouldBeCalled(); $command = new DepositCommand('123ABC', 100); $this->beConstructedWith($accounting); $this->handle($command); }
function it_handles_transfer_withdraw_command(AccountingInterface $accounting, Account $account) { $account->withdraw(Argument::type(Withdraw::class))->shouldBeCalled(); $accounting->getAccount(Argument::type(AccountNumber::class))->willReturn($account); $accounting->commit()->shouldBeCalled(); $command = new TransferWithdrawCommand('123ABC', 100, Transaction::fromString('000')); $this->beConstructedWith($accounting); $this->handle($command); }
public function handle(OpenAccountCommand $command) { $account = Account::open(AccountNumber::fromString($command->getAccountNumber())); $this->accounting->addAccount($account); $this->accounting->commit(); }