Esempio n. 1
0
        public void ShouldUpdateProductProjection()
        {
            var rootId     = Guid.NewGuid();
            var resolver   = new MemoryResolver();
            var eventBus   = new MemoryEventBus(resolver);
            var appendOnly = new MemoryAppendOnlyStore(eventBus);
            var eventStore = new EventStore(appendOnly, eventBus);
            var view       = new ProductView();

            resolver.Register <ProductCreated>(view);

            var factory    = new AggregateFactory(eventStore);
            var rootToSave = factory.Create <ProductCatalogAggregate>(rootId);

            eventStore.AppendToStream <ProductCatalogAggregate>(rootToSave.Id, 1, rootToSave.Changes, rootToSave.DomainEvents.ToArray());

            var stream = eventStore.LoadEventStream(rootId);
            var root   = new ProductCatalogAggregate(stream);

            root.CreateProduct(new CreateProductCommand(rootId, Guid.NewGuid(), "Notebook", "Dell Inspiron 15000"));

            eventStore.AppendToStream <ProductCatalogAggregate>(root.Id, root.Version, root.Changes, root.DomainEvents.ToArray());

            Assert.True(1 == view.Products.Count);
            Assert.Equal("Notebook", view.Products[0].Name);
        }
Esempio n. 2
0
        public void AppendOnlyShouldPublish()
        {
            var rootId     = Guid.NewGuid();
            var productId  = Guid.NewGuid();
            var resolver   = new MemoryResolver();
            var eventBus   = new MemoryEventBus(resolver);
            var appendOnly = new MemoryAppendOnlyStore(eventBus);
            var eventStore = new EventStore(appendOnly, eventBus);

            var productView = new ProductView();

            resolver.Register <ProductCreated>(productView);

            var events = new List <IEvent>
            {
                new ProductCreated(productId, "test", "")
            };

            var domainEvents = new List <IDomainEvent>
            {
                new ProductCreated(productId, "test", "")
            };

            eventStore.AppendToStream <Guid>(rootId, 0, events, domainEvents.ToArray());

            Assert.True(productView.Products.Count == 1);
            Assert.True(productView.Products.ElementAt(0).Id == productId);
        }
Esempio n. 3
0
 public ProjectionTests()
 {
     _resolver     = new MemoryResolver();
     _eventBus     = new MemoryEventBus(_resolver);
     _appendOnly   = new MemoryAppendOnlyStore(_eventBus);
     _eventStore   = new EventStore(_appendOnly, _eventBus);
     _snapShotRepo = new SnapshotRepository();
     _factory      = new AggregateFactory(_eventStore, _snapShotRepo);
 }
Esempio n. 4
0
        public void ShouldApplyEventsAfterSnapshot()
        {
            var rootId       = Guid.NewGuid();
            var resolver     = new MemoryResolver();
            var eventBus     = new MemoryEventBus(resolver);
            var appendOnly   = new MemoryAppendOnlyStore(eventBus);
            var eventStore   = new EventStore(appendOnly, eventBus);
            var snapShotRepo = new SnapshotRepository();
            var factory      = new AggregateFactory(eventStore, snapShotRepo);
            var view         = new ProductView();

            resolver.Register <ProductCreated>(view);

            var productAggregate = factory.Create <ProductCatalogAggregate>(rootId);

            productAggregate.CreateProduct(new CreateProductCommand(rootId, Guid.NewGuid(), "Notebook Acer Aspire 3", "Notebook Acer Aspire 3 A315-53-348W Intel Core i3-6006U  RAM de 4GB HD de 1TB Tela de 15.6” HD Windows 10"));
            productAggregate.CreateProduct(new CreateProductCommand(rootId, Guid.NewGuid(), "Notebook Asus Vivobook", "Notebook Asus Vivobook X441B-CBA6A de 14 Con AMD A6-9225/4GB Ram/500GB HD/W10"));
            eventStore.AppendToStream <ProductCatalogAggregate>(productAggregate.Id, productAggregate.Version, productAggregate.Changes, productAggregate.DomainEvents.ToArray());
            var stream = eventStore.LoadEventStream(rootId);

            snapShotRepo.SaveSnapshot(rootId, productAggregate, stream.Version);


            productAggregate = factory.Load <ProductCatalogAggregate>(rootId);
            productAggregate.CreateProduct(new CreateProductCommand(rootId, Guid.NewGuid(), "Notebook 2 em 1 Dell", "Notebook 2 em 1 Dell Inspiron i14-5481-M11F 8ª Geração Intel Core i3 4GB 128GB SSD 14' Touch Windows 10 Office 365 McAfe"));
            productAggregate.CreateProduct(new CreateProductCommand(rootId, Guid.NewGuid(), "Notebook Gamer Dell", "Notebook Gamer Dell G3-3590-M60P 9ª Geração Intel Core i7 8GB 512GB SSD Placa Vídeo NVIDIA 1660Ti 15.6' Windows 10"));
            productAggregate.CreateProduct(new CreateProductCommand(rootId, Guid.NewGuid(), "Notebook Lenovo 2 em 1 ideapad C340", "Notebook Lenovo 2 em 1 ideapad C340 i7-8565U 8GB 256GB SSD Win10 14' FHD IPS - 81RL0001BR"));
            eventStore.AppendToStream <ProductCatalogAggregate>(productAggregate.Id, productAggregate.Version, productAggregate.Changes, productAggregate.DomainEvents.ToArray());


            ProductCatalogAggregate root;
            long snapshotVersion = 0;
            var  snap            = snapShotRepo.TryGetSnapshotById(rootId, out root, out snapshotVersion);

            stream = eventStore.LoadEventStreamAfterVersion(rootId, snapshotVersion);
            var aggregateReloadedFromSnapshot = factory.Load <ProductCatalogAggregate>(rootId);

            Assert.True(snap);
            Assert.True(root != null);
            Assert.True(3 == snapshotVersion);
            Assert.True(stream.Events.Count == 3);
            Assert.True(aggregateReloadedFromSnapshot.Changes.Count == 0);
            Assert.True(aggregateReloadedFromSnapshot.Id == rootId);
            Assert.True(view.Products.Count == 5);
        }
Esempio n. 5
0
 public EventBusTests()
 {
     _resolver = new MemoryResolver();
     _eventBus = new MemoryEventBus(_resolver);
 }