public void Test_EventReplaying_evaluating_CurrentAccountBalance_using_a_stream_containing_both_past_and_future_events() { var currentAccountId = Guid.NewGuid(); var accountOpening = new AccountOpenedEvent { CurrentAccountId = currentAccountId, Balance = 200 }; EventStore.Save(accountOpening); var withdrawal1 = new WithdrawalEvent() { CurrentAccountId = currentAccountId, Amount = 100 }; withdrawal1.SetTimeStamp(DateTime.Now.AddMonths(1)); EventStore.Save(withdrawal1); var withdrawal2 = new WithdrawalEvent() { CurrentAccountId = currentAccountId, Amount = 100 }; withdrawal2.SetTimeStamp(DateTime.Now.AddMonths(3)); EventStore.Save(withdrawal2); WaitForIndexing(documentStore); var sut = new Repository(EventStore); var currentAccount = sut.GetById <CurrentAccount>(currentAccountId, DateTime.Now.AddMonths(2)); Assert.Equal(100, currentAccount.Balance); }
public void Handle(WithdrawalEvent domainEvent) { var account = dbContext.Accounts.SingleOrDefault(x => x.Id == domainEvent.AggregateRootId); account.Balance -= domainEvent.Value.Amount; dbContext.SaveChanges(); }
public void Test_EventReplaying_evaluating_CurrentAccountBalance_using_a_stream_containing_past_events_only_and_a_different_timeline() { var currentAccountId = Guid.NewGuid(); var accountOpening = new AccountOpenedEvent { CurrentAccountId = currentAccountId, Balance = 200 }; EventStore.Save(accountOpening); var withdrawal1 = new WithdrawalEvent() { CurrentAccountId = currentAccountId, Amount = 100 }; withdrawal1.SetTimeStamp(DateTime.Now.AddMonths(1)); EventStore.Save(withdrawal1); var withdrawal2 = new WithdrawalEvent() { CurrentAccountId = currentAccountId, Amount = 100, TimelineId = Guid.NewGuid() }; withdrawal2.SetTimeStamp(DateTime.Now.AddMonths(3)); EventStore.Save(withdrawal2); var sut = new Repository(EventStore); var currentAccount = sut.GetById <SelfRetrievingCurrentAccount>(currentAccountId, DateTime.Now.AddMonths(3)); Assert.AreEqual(100, currentAccount.Balance); }
public void Test_EventCount_at_a_specific_date() { var currentAccountId = Guid.NewGuid(); var accountOpening = new AccountOpenedEvent { CurrentAccountId = currentAccountId, Balance = 200 }; EventStore.Save(accountOpening); var withdrawal1 = new WithdrawalEvent() { CurrentAccountId = currentAccountId, Amount = 100 }; withdrawal1.SetTimeStamp(DateTime.Now.AddMonths(1)); EventStore.Save(withdrawal1); var sut = new Repository(EventStore); var currentAccount = sut.GetById <CurrentAccount>(currentAccountId, DateTime.Now.AddMonths(2)); Assert.AreEqual(2, ((IAggregate)currentAccount).OccurredEvents.Count); }
public void Saving_an_event_within_a_timeline_should_allow_for_later_retrieval() { var @event = new WithdrawalEvent() { CurrentAccountId = Guid.NewGuid(), TimelineId = Guid.NewGuid(), Amount = 101 }; EventStore.Save(@event); var events = EventStore.Find <WithdrawalEvent>(e => e.TimelineId == @event.TimelineId && e.CurrentAccountId == @event.CurrentAccountId); Assert.Single(events); Assert.Equal(@event.CurrentAccountId, events.First().CurrentAccountId); Assert.Equal(@event.Amount, events.First().Amount); }
public void Saving_an_event_should_allow_for_later_retrieval() { var @event = new WithdrawalEvent() { CurrentAccountId = Guid.NewGuid(), Amount = 101 }; EventStore.Save(@event); var events = EventStore.Find <WithdrawalEvent>(e => e.CurrentAccountId == @event.CurrentAccountId); Assert.AreEqual(1, events.Count()); Assert.AreEqual(@event.CurrentAccountId, events.First().CurrentAccountId); Assert.AreEqual(@event.Amount, events.First().Amount); }
public void Saving_an_event_should_dispatch_it_as_well() { DomainEvent @event = new WithdrawalEvent() { CurrentAccountId = Guid.NewGuid(), Amount = 101 }; var eventDispatcherMockBuilder = new Mock <IEventDispatcher>(); eventDispatcherMockBuilder.Setup(v => v.Dispatch(@event)); var sut = new InMemoryEventStore(eventDispatcherMockBuilder.Object); sut.Save(@event); eventDispatcherMockBuilder.Verify(v => v.Dispatch(@event), Times.Once()); }
public void Event_retrieval_should_discriminate_between_timelines() { var eventDispatcherMockBuilder = new Mock <IEventDispatcher>(); var sut = new InMemoryEventStore(eventDispatcherMockBuilder.Object); var sourceAccountId = Guid.NewGuid(); var destinationAccountId = Guid.NewGuid(); var withdrawalEvent = new WithdrawalEvent() { CurrentAccountId = sourceAccountId, Amount = 101 }; sut.Save(withdrawalEvent); var depositEvent = new DepositEvent() { CurrentAccountId = sourceAccountId, Amount = 42 }; sut.Save(depositEvent); var moneyTransferredEvent = new MoneyTransferredEvent() { SourceAccountId = sourceAccountId, DestinationAccountId = destinationAccountId, Amount = 42, TimelineId = Guid.NewGuid() }; sut.Save(moneyTransferredEvent); var eventDescriptors = new List <EventMapping>() { new EventMapping { AggregateIdPropertyName = nameof(WithdrawalEvent.CurrentAccountId), EventType = typeof(WithdrawalEvent) }, new EventMapping { AggregateIdPropertyName = nameof(MoneyTransferredEvent.SourceAccountId), EventType = typeof(MoneyTransferredEvent) } }; var events = sut.RetrieveEvents(sourceAccountId, DateTime.Now, eventDescriptors, null); Assert.Single(events); }
private void StoreIntoWithdrawalHistory(WithdrawalEvent @event) { var repository = Container.Resolve <IPaymentRepository>(); repository.OfflineWithdrawalHistories.Add(new OfflineWithdrawalHistory() { Id = Guid.NewGuid(), UserId = @event.UserId, Action = @event.Status, DateCreated = @event.DateCreated, OfflineWithdrawalId = @event.WithdrawalId, Remark = @event.Remark, TransactionNumber = @event.TransactionNumber, //Kristian: TODO this is temporary. I have to remove it from here after Konstantin is ready with Core.Auth. //Kristian: TODO: There's a task related to that refactoring(https://jira.afusion.com/browse/AFTREGO-3615) Username = @event.Username }); repository.SaveChanges(); }
public void Saving_two_events_should_allow_for_later_retrieval_of_one_of_them() { var withdrawalEvent = new WithdrawalEvent() { CurrentAccountId = Guid.NewGuid(), Amount = 101 }; EventStore.Save(withdrawalEvent); var depositEvent = new DepositEvent() { CurrentAccountId = Guid.NewGuid(), Amount = 42 }; EventStore.Save(depositEvent); var events = EventStore.Find <WithdrawalEvent>(e => e.CurrentAccountId == withdrawalEvent.CurrentAccountId); Assert.Single(events); Assert.Equal(withdrawalEvent.CurrentAccountId, events.First().CurrentAccountId); Assert.Equal(withdrawalEvent.Amount, events.First().Amount); }
public void Test_EventCount() { var currentAccountId = Guid.NewGuid(); var accountOpening = new AccountOpenedEvent { CurrentAccountId = currentAccountId, Balance = 200 }; EventStore.Save(accountOpening); var withdrawal1 = new WithdrawalEvent() { CurrentAccountId = currentAccountId, Amount = 100 }; EventStore.Save(withdrawal1); var sut = new Repository(EventStore); var currentAccount = sut.GetById <CurrentAccount>(currentAccountId); Assert.AreEqual(2, ((IAggregate)currentAccount).OccurredEvents.Count); }
public void ApplyEvent(WithdrawalEvent @event) { this.Balance -= @event.Amount; }
public void OnWithdrawal(WithdrawalEvent evt) { Balance = new SimpleMoney(Balance.Amount - evt.Value.Amount); }
public void Consume(WithdrawalEvent message) { _eventHandlers.Handle(message); }
/// <summary> /// For the handle method, when we add ctivity to the admin log we should pas a concrete event but not a common parent as WithdrawalEvent is /// in the case of all the withdrawal events. This is why, based on the WithdrawalEvent.Status we return an instance of the corresponding object. /// </summary> /// <param name="wdEvent"></param> /// <returns></returns> private IDomainEvent GetConcreteWithdrawalEvent(WithdrawalEvent wdEvent) { var wdId = wdEvent.WithdrawalId; var amnt = wdEvent.Amount; var dtCreated = wdEvent.DateCreated; var uId = wdEvent.UserId; var status = wdEvent.Status; var remark = wdEvent.Remark; var transNum = wdEvent.TransactionNumber; var wdMadeBy = wdEvent.WithdrawalMadeBy; var uname = wdEvent.Username; switch (wdEvent.Status) { case WithdrawalStatus.Accepted: return(new WithdrawalAccepted(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Approved: return(new WithdrawalApproved(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Canceled: return(new WithdrawalCancelled(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Reverted: return(new WithdrawalReverted(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Investigation: return(new WithdrawalInvestigated(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Documents: return(new WithdrawalDocumentsChecked(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Verified: return(new WithdrawalVerified(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Unverified: return(new WithdrawalUnverified(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.New: return(new WithdrawalCreated(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); case WithdrawalStatus.Rejected: return(new WithdrawalRejected(wdId, amnt, dtCreated, uId, wdMadeBy, status, remark, transNum, uname) { EventCreated = dtCreated }); default: return(null); } }
public void Handle(WithdrawalEvent @event) { AddActivityLog(AdminActivityLogCategory.Withdrawal, GetConcreteWithdrawalEvent(@event), @event.Username); }
public void Handle(WithdrawalEvent @event) { AddActivityLog(string.Format("Withdrawal created. Amount: {0}", @event.Amount), @event, @event.UserId, GetPlayerName(@event.UserId)); }
//This is an event handler that is common for all the possible events for withdrawal public void Handle(WithdrawalEvent @event) { AddActivityLog(GetEnumDescription(@event.Status), @event, @event.WithdrawalMadeBy, @event.Remark); StoreIntoWithdrawalHistory(@event); }