public function onWithdrawnFromSource(MoneyWereWithdrawnEnvelope $event) { if (!($process = $this->getProcessForTransaction($event->getTransaction()))) { return; } $this->assertFinalized($process); $process->withdrawnFromSource(); $process->depositOnTarget(); $this->bus->handle(new TransferDepositCommand((string) $process->getTargetAccountNumber(), (int) $process->getAmount(), (string) $process->getTransaction())); }
function it_emits_money_were_withdrawn_event(EventDispatcherInterface $dispatcher) { $dispatcher->dispatch(MoneyWereWithdrawnEnvelope::getEventName(), Argument::type(MoneyWereWithdrawnEnvelope::class))->shouldBeCalled(); $events = new EventCollection([new MoneyWereWithdrawnEvent(AccountNumber::fromString('123ABC'), new Withdraw(Transaction::fromString('000'), 100))]); $this->beConstructedWith($dispatcher); $this->emit($events); }
function it_appends_deposit_entry_when_money_were_withdrawn() { $accountNumber = AccountNumber::fromString('123ABC'); $openAccount = new AccountOpenedEvent($accountNumber); $this->onAccountOpened(AccountOpenedEnvelope::wrap($openAccount)); $withdraw = new MoneyWereWithdrawnEvent($accountNumber, new Withdraw(Transaction::generate(), 100)); $this->onMoneyWereWithdrawn(MoneyWereWithdrawnEnvelope::wrap($withdraw)); $this->getAccount('123ABC')->getHistory()[1]->getAmount()->shouldReturn(100); }
function it_decreases_balance_when_money_were_withdrawn() { $accountNumber = AccountNumber::fromString('123ABC'); $openAccount = new AccountOpenedEvent($accountNumber); $event = AccountOpenedEnvelope::wrap($openAccount); $this->onAccountOpened($event); $withdraw = new MoneyWereWithdrawnEvent($accountNumber, new Withdraw(Transaction::generate(), 100)); $event = MoneyWereWithdrawnEnvelope::wrap($withdraw); $this->onMoneyWereWithdrawn($event); $this->getAccount('123ABC')->getBalance()->shouldReturn(-100); }
function create_money_transfer_withdrawn_envelope() { return MoneyWereWithdrawnEnvelope::wrap(new MoneyWereWithdrawnEvent(AccountNumber::fromString('123ABC'), new Withdraw(Transaction::fromString('000'), 100))); }
public function onMoneyWereWithdrawn(MoneyWereWithdrawnEnvelope $event) { $this->accounts[(string) $event->getAccountNumber()]->decreaseBy($event->getAmount()); }
public function onMoneyWereWithdrawn(MoneyWereWithdrawnEnvelope $event) { $this->accounts[(string) $event->getAccountNumber()]->withdraw($event->getTimestamp(), $event->getAmount()); }