public function onAccountOpened(AccountOpenedEnvelope $event) { if (array_key_exists((string) $event->getAccountNumber(), $this->accounts)) { throw new \InvalidArgumentException('Duplicate AccountOpened event for ' . $event->getAccountNumber()); } $this->accounts[(string) $event->getAccountNumber()] = new AccountBalance($event->getAccountNumber()); }
function it_emits_account_opened_event(EventDispatcherInterface $dispatcher) { $dispatcher->dispatch(AccountOpenedEnvelope::getEventName(), Argument::type(AccountOpenedEnvelope::class))->shouldBeCalled(); $events = new EventCollection([new AccountOpenedEvent(AccountNumber::fromString('123ABC'))]); $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); }