public void TestDepositGuidIsTaken() { var accountId = Guid.NewGuid(); var publishedEvents = new List <IEvent>(); var depositServiceMock = new Mock <IAggregateService <DepositAggregate> >(); var counter = 0; var depositGuid = Guid.Empty; depositServiceMock.Setup(m => m.Load(It.IsAny <Guid>())).Returns((Guid guid) => { var aggregate = new DepositAggregate(); if (counter > 3) { depositGuid = guid; return(aggregate); } counter++; aggregate.Apply(new CreateDepositEvent { ItemGuid = guid }); return(aggregate); }); var accountServiceMock = new Mock <IAggregateService <AccountAggregate> >(); accountServiceMock.Setup(m => m.Load(It.IsAny <Guid>())).Returns(() => new MockAggregate(accountId)); var eventPublisherMock = new Mock <IEventPublisher>(); eventPublisherMock.Setup(m => m.Publish(It.IsAny <IEvent>())).Callback((IEvent e) => publishedEvents.Add(e)); var commandHandler = new CreateDepositCommandHandler(depositServiceMock.Object, accountServiceMock.Object, eventPublisherMock.Object); var command = new CreateDepositCommand { AccountId = accountId }; commandHandler.Handle(command); Assert.Equal(2, publishedEvents.Count); var first = publishedEvents[0]; Assert.True(first is CreateDepositEvent); var createDepositEvent = (CreateDepositEvent)first; Assert.NotEqual(Guid.Empty, depositGuid); Assert.Equal(depositGuid, createDepositEvent.ItemGuid); Assert.Equal(Guid.Empty, publishedEvents[0].EventGuid); Assert.Equal(Guid.Empty, publishedEvents[1].EventGuid); }
public void TestCreateDeposit() { var aggregate = new DepositAggregate(); var accountGuid = Guid.NewGuid(); var depositGuid = Guid.NewGuid(); var eventGuid = Guid.NewGuid(); var createDepositEvent = new CreateDepositEvent { AccountGuid = accountGuid, ItemGuid = depositGuid, EventGuid = eventGuid }; aggregate.Apply(createDepositEvent); Assert.Equal(depositGuid, aggregate.Guid); Assert.Equal(accountGuid, aggregate.AccountGuid); }