public void Base() { Converts.Repository .AddJsonEnumSearchHandler() .AddJsonPrimitivesSearchHandler() .AddJsonObjectSearchHandler() .AddJsonKey() .AddJsonTimeSpan(); CompositeEventFormatter formatter = new CompositeEventFormatter( new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory()), Factory.Default <JsonCompositeStorage>() ); MockEventStore eventStore = new MockEventStore(); // Creation of state. Order order = new Order(KeyFactory.Create(typeof(Order))); order.AddItem(KeyFactory.Create(typeof(T_EventSourcing_ReadModels_Rebuilder)), 2); order.AddItem(KeyFactory.Create(typeof(Rebuilder)), 5); eventStore.Save(order.Events.Select(e => new EventModel(order.Key, e.Key, formatter.Serialize(e), e.Version))); // Rebuilding model. Rebuilder rebuilder = new Rebuilder(eventStore, formatter); ReadModelHandler handler = new ReadModelHandler(); rebuilder.AddAll(handler); rebuilder.RunAsync().Wait(); Assert.AreEqual(1, handler.Totals.Count); Assert.AreEqual( order.Events.OfType <OrderTotalRecalculated>().Last().TotalPrice, handler.Totals.FirstOrDefault().Value ); }
public void SerializeAndDeserializeEventWithEnumerationOfKeys() { Converts.Repository .AddJsonEnumSearchHandler() .AddJsonObjectSearchHandler() .AddJsonPrimitivesSearchHandler() .AddJsonKey() .AddJsonTimeSpan(); IFormatter formatter = new CompositeEventFormatter( new ReflectionCompositeTypeProvider( new ReflectionCompositeDelegateFactory(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public ), new DefaultFactory <JsonCompositeStorage>() ); IKey orderKey = KeyFactory.Create(typeof(Order)); Order order = new Order(orderKey); order.AddItem(KeyFactory.Create(typeof(Product)), 4); OrderItemSummaryChanged changed = order.Events.OfType <OrderItemSummaryChanged>().First(); string json = formatter.Serialize(changed); changed = formatter.Deserialize <OrderItemSummaryChanged>(json); Assert.AreEqual(1, changed.ProductKeys.Count()); }
private void Domain() { Converts.Repository .AddJsonEnumSearchHandler() .AddJsonPrimitivesSearchHandler() .AddJsonObjectSearchHandler() .AddJsonKey() .AddJsonTimeSpan() .Add(new ColorConverter()); EventStore = new EntityEventStore(Factory.Default <EventSourcingContext>()); eventDispatcher = new PersistentEventDispatcher(new EmptyEventStore()); eventDispatcher.DispatcherExceptionHandlers.Add(this); eventDispatcher.EventExceptionHandlers.Add(this); IFactory <ICompositeStorage> compositeStorageFactory = Factory.Default <JsonCompositeStorage>(); ICompositeTypeProvider typeProvider = new ReflectionCompositeTypeProvider( new ReflectionCompositeDelegateFactory(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public ); EventFormatter = new CompositeEventFormatter(typeProvider, compositeStorageFactory); OutcomeRepository = new AggregateRootRepository <Outcome>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <Outcome>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); CategoryRepository = new AggregateRootRepository <Category>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <Category>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); PriceFactory = new PriceFactory("CZK"); DomainFacade = new DefaultDomainFacade( OutcomeRepository, CategoryRepository, PriceFactory ); }
public void SerializeAndDeserializeEventWithMetadata() { Converts.Repository .AddJsonEnumSearchHandler() .AddJsonObjectSearchHandler() .AddJsonPrimitivesSearchHandler() .AddJsonKey() .AddJsonTimeSpan(); IFormatter formatter = new CompositeEventFormatter( new ReflectionCompositeTypeProvider( new ReflectionCompositeDelegateFactory(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public ), new DefaultFactory <JsonCompositeStorage>() ); TimeSpan delay = TimeSpan.FromSeconds(50); string sourceID = "AbcDef"; int value = 15; IKey orderKey = KeyFactory.Create(typeof(Order)); Order order = new Order(orderKey); OrderPlaced payload = order.Events.OfType <OrderPlaced>().First(); IKey key = payload.Key; Envelope <OrderPlaced> envelope = new Envelope <OrderPlaced>(payload) .AddDelay(delay) .AddSourceID(sourceID); envelope.Metadata.Add("Value", value); string json = formatter.Serialize(envelope); envelope = formatter.Deserialize <Envelope <OrderPlaced> >(json); Assert.AreEqual(delay, envelope.GetDelay()); Assert.AreEqual(sourceID, envelope.GetSourceID()); Assert.AreEqual(value, envelope.Metadata.Get <int>("Value")); Assert.AreEqual(key, envelope.Body.Key); Assert.AreEqual(orderKey, envelope.Body.AggregateKey); }
private void Domain() { Converts.Repository .AddStringTo <int>(Int32.TryParse) .AddStringTo <bool>(Boolean.TryParse) .AddEnumSearchHandler(false) .AddJsonEnumSearchHandler() .AddJsonPrimitivesSearchHandler() .AddJsonObjectSearchHandler() .AddJsonKey() .AddJsonTimeSpan() .Add(new ColorConverter()) .AddToStringSearchHandler(); EventStore = new EntityEventStore(ServiceProvider.EventSourcingContextFactory); eventDispatcher = new PersistentEventDispatcher(new EmptyEventStore()); eventDispatcher.DispatcherExceptionHandlers.Add(this); eventDispatcher.EventExceptionHandlers.Add(this); IFactory <ICompositeStorage> compositeStorageFactory = Factory.Default <JsonCompositeStorage>(); typeProvider = new ReflectionCompositeTypeProvider( new ReflectionCompositeDelegateFactory(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public ); CommandFormatter = new CompositeCommandFormatter(typeProvider, compositeStorageFactory); EventFormatter = new CompositeEventFormatter(typeProvider, compositeStorageFactory, new List <ICompositeFormatterExtender>() { new UserKeyEventExtender() }); commandDispatcher = new PersistentCommandDispatcher(new SerialCommandDistributor(), new EmptyCommandStore(), CommandFormatter); OutcomeRepository = new AggregateRootRepository <Outcome>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <Outcome>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); CategoryRepository = new AggregateRootRepository <Category>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <Category>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); CurrencyListRepository = new AggregateRootRepository <CurrencyList>( EventStore, EventFormatter, new ReflectionAggregateRootFactory <CurrencyList>(), eventDispatcher, new NoSnapshotProvider(), new EmptySnapshotStore() ); Money.BootstrapTask bootstrapTask = new Money.BootstrapTask( commandDispatcher.Handlers, Factory.Instance(OutcomeRepository), Factory.Instance(CategoryRepository), Factory.Instance(CurrencyListRepository) ); bootstrapTask.Initialize(); }