//!! Please Ran integration tests only one by one otherwise it leads to EventStoreCommunicationException "Unable to access persistence layer"
        public async Task ShouldUpdateReadModel()
        {
            subscriber.Subscribe <ProductItemCreated>(async @event => await HandleAsync(productItemCreatedHandlers, @event));
            subscriber.Subscribe <ProductItemChanged>(async @event => await HandleAsync(productItemChangedHandlers, @event));
            subscriber.Subscribe <ProductPriceChanged>(async @event => await HandleAsync(productItemPriceChangedHandlers, @event));

            var ProductItem = new Product(DefaultProductItemId);

            string priceId = Guid.NewGuid().ToString();

            ProductItem.ChangeProductItem(Code, ImageSource, ProductUrl, Description);
            ProductItem.ChangeProductItem(null, null, null, updatedDescription);
            ProductItem.ChangeProductPrice(priceId, priceValue);
            await sut1.SaveAsync(ProductItem);

            var productReadModel = await productItemRepository.GetByIdAsync(DefaultProductItemId.ToString());

            var productPriceReadModel = await productItemPriceRepository.FindAllAsync(price => price.ItemId == DefaultProductItemId.ToString());

            Assert.Equal(productReadModel.Id, DefaultProductItemId.ToString());
            Assert.Equal(priceValue, productReadModel.Price);
            Assert.Equal(updatedDescription, productReadModel.Description);
            Assert.Equal(ImageSource, productReadModel.ImageSource);
            Assert.Equal(ProductUrl, productReadModel.ProductUrl);

            Assert.Equal(priceValue, productPriceReadModel.ToList().First().CurrentPrice);
        }
Exemplo n.º 2
0
        public async Task AddProductAsync(string cartId, string productId, int quantity)
        {
            var cart = await cartRepository.GetByIdAsync(new CartId(cartId));

            subscriber.Subscribe <ProductAddedEvent>(async @event => await HandleAsync(productAddedEventHandlers, @event));
            cart.AddProduct(new CartItem(new ProductId(productId), quantity));
            await cartRepository.SaveAsync(cart);
        }
Exemplo n.º 3
0
        public async Task AddProductAsync(string cartId, string productId, int quantity)
        {
            var order = await orderRepository.GetByIdAsync(new OrderId(cartId));

            subscriber.Subscribe <ProductAdded>(async @event => await HandleAsync(productAddedEventHandlers, @event));
            order.AddProduct(new ProductId(productId), quantity);
            await orderRepository.SaveAsync(order);
        }
Exemplo n.º 4
0
        public async Task AddProductAsync(string cartId, string productId, int quantity)
        {
            var cartResult = await _cartRepository.GetByIdAsync(new CartId(cartId));

            if (cartResult.HasNoValue)
            {
                throw new ArgumentException(nameof(cartId));
            }

            var cart = cartResult.Value;

            _subscriber.Subscribe <ProductAddedEvent>(async @event => await HandleAsync(_productAddedEventHandlers, @event));

            cart.AddProduct(new ProductId(productId), quantity);
            await _cartRepository.SaveAsync(cart);
        }
Exemplo n.º 5
0
        public ProductWriteService(IRepository <Product, ProductId> ProductRepository,
                                   ITransientDomainEventSubscriber subscriber,
                                   IEnumerable <IDomainEventHandler <ProductId, ProductItemCreated> > ProductCreatedEventHandlers,
                                   IEnumerable <IDomainEventHandler <ProductId, ProductItemChanged> > productAddedEventHandlers,
                                   IEnumerable <IDomainEventHandler <ProductId, ProductPriceChanged> > productQuantityChangedEventHandlers)
        {
            this.ProductRepository                   = ProductRepository;
            this.subscriber                          = subscriber;
            this.productCreatedEventHandlers         = ProductCreatedEventHandlers;
            this.productAddedEventHandlers           = productAddedEventHandlers;
            this.productQuantityChangedEventHandlers = productQuantityChangedEventHandlers;


            subscriber.Subscribe <ProductItemCreated>(async @event => await HandleAsync(productCreatedEventHandlers, @event));
            subscriber.Subscribe <ProductItemChanged>(async @event => await HandleAsync(productAddedEventHandlers, @event));
            subscriber.Subscribe <ProductPriceChanged>(async @event => await HandleAsync(productQuantityChangedEventHandlers, @event));
        }