public void DoesNotMixUpEventsFromDifferentStores()
{
//Two histories with the same in different event stores.
var aggregateId = Guid.NewGuid();
var aggregate1Events = 1.Through(3).Select(j => new SomeEvent(aggregateRootId: aggregateId, version: j)).ToList();
var aggregate2Events = 1.Through(5).Select(j => new SomeEvent(aggregateRootId: aggregateId, version: j)).ToList();
var store1Events = Seq.Empty<IAggregateRootEvent>();
var store2Events = Seq.Empty<IAggregateRootEvent>();
var store1NewStoreEvents = Seq.Empty<IAggregateRootEvent>();
var store2NewStoreEvents = Seq.Empty<IAggregateRootEvent>();
try
{
using (var store1 = CreateEventStore())
using(var store2 = CreateEventStore2())
{
store1.SaveEvents(aggregate1Events);
store2.SaveEvents(aggregate2Events);
store1Events = store1.GetAggregateHistory(aggregateId);
store2Events = store2.GetAggregateHistory(aggregateId);
}
using(var store1 = CreateEventStore())
using(var store2 = CreateEventStore2())
{
store1NewStoreEvents = store1.GetAggregateHistory(aggregateId);
store2NewStoreEvents = store2.GetAggregateHistory(aggregateId);
}
store1Events.ShouldAllBeEquivalentTo(aggregate1Events, config => config.WithStrictOrdering());
store2Events.ShouldAllBeEquivalentTo(aggregate2Events, config => config.WithStrictOrdering());
store1NewStoreEvents.ShouldAllBeEquivalentTo(aggregate1Events, config => config.WithStrictOrdering());
store2NewStoreEvents.ShouldAllBeEquivalentTo(aggregate2Events, config => config.WithStrictOrdering());
}
catch(Exception)
{
Console.WriteLine("aggregate1 events");
aggregate1Events.ForEach(e => Console.WriteLine($" {e}"));
Console.WriteLine("\n\naggregate2 events");
aggregate2Events.ForEach(e => Console.WriteLine($" {e}"));
Console.WriteLine("\n\nloaded events from eventstore 1");
store1Events.ForEach(e => Console.WriteLine($" {e}"));
Console.WriteLine("\n\nloaded events from eventstore 2");
store2Events.ForEach(e => Console.WriteLine($" {e}"));
Console.WriteLine("\n\nloaded events from new eventstore 1");
store1NewStoreEvents.ForEach(e => Console.WriteLine($" {e}"));
Console.WriteLine("\n\nloaded events from new eventstore 2");
store2NewStoreEvents.ForEach(e => Console.WriteLine($" {e}"));
throw;
}
}
}