public void EventsArePublishedOnSaveChangesAndThisInteractsWithUnitOfWorkParticipations()
{
var bus = new MockServiceBus();
var store = new MockEventStore();
var users = 1.Through(9).Select(i => { var u = new User(); u.Register(i + "@test.com", "abcd", Guid.NewGuid()); u.ChangeEmail("new" + i + "@test.com"); return u; }).ToList();
using (var session = new EventStoreSession(bus, store, new SingleThreadUseGuard(), DateTimeNowTimeSource.Instance))
{
var uow = new UnitOfWork(new SingleThreadUseGuard());
uow.AddParticipant(session);
users.Take(3).ForEach(u => session.Save(u));
Assert.That(bus.Published.Count, Is.EqualTo(0));
session.SaveChanges();
Assert.That(bus.Published.Count, Is.EqualTo(6));
users.Skip(3).Take(3).ForEach(u => session.Save(u));
Assert.That(bus.Published.Count, Is.EqualTo(6));
session.SaveChanges();
Assert.That(bus.Published.Count, Is.EqualTo(12));
users.Skip(6).Take(3).ForEach(u => session.Save(u));
Assert.That(bus.Published.Count, Is.EqualTo(12));
Assert.That(store.SavedEvents.Count, Is.EqualTo(0));
uow.Commit();
Assert.That(bus.Published.Count, Is.EqualTo(18));
Assert.That(bus.Published.Select(e => e.EventId).Distinct().Count(), Is.EqualTo(18));
Assert.That(bus.Published, Is.EquivalentTo(store.SavedEvents));
}
}