//!! 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); }
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); }
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); }
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); }
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)); }