public async Task ManageItemsInBasket_IfAddOrRemoveMessageReceived() { var prob = CreateTestProbe(); var product = GetProduct(); var dataSource = new Mock <IProductsDataSource>(); dataSource .Setup(x => x.GetAll()) .Returns(new List <Product> { product }); var productActor = Sys.ActorOf(ProductActor.Props(dataSource.Object)); var target = Sys.ActorOf(BasketActor.Props(1, productActor)); target.Tell(new AddItemToTheBasket( correlationId: 1, customerId: 1, amount: 1, productId: 1), prob); prob.ExpectMsg <ItemAddedToTheBasket>(x => x.CorrelationId == 1 && x.CustomerId == 1); var actual = await target.Ask <BasketFound>(new GetBasket(2, 1)); actual.Items.Should().ContainKey(1); actual.Items[1].Should().Be(1); target.Tell(new RemoveItemFromTheBasket(3, 1, 1)); await target.Ask <BasketFound>(new GetBasket(2, 1)); actual.Items.Should().BeEmpty(); }
public void ReturnNotEnoughItemsInStock_WhenThereIsNotEnoughItemsInStock() { //arrange var expectedProduct = GetProduct(); var dataSource = new Mock <IProductsDataSource>(); dataSource.Setup(x => x.GetAll()).Returns(new List <Product> { expectedProduct }); var prob = CreateTestProbe(); var target = Sys.ActorOf(ProductActor.Props(dataSource.Object)); target.Tell(new TakeProductFromStock(1, productId: 1, amountToTakeFromStock: 10), prob.Ref); var response = prob.ExpectMsg <NotEnoughItemsInStock>(x => x.CorrelationId == 1); response.ItemsAvailableInStock.Should().Be(1); }
public void ReturnAllProducts_OnGetAllProductsMessage() { //arrange var expectedProduct = GetProduct(); var dataSource = new Mock <IProductsDataSource>(); dataSource.Setup(x => x.GetAll()).Returns(new List <Product> { expectedProduct }); var prob = CreateTestProbe(); var target = Sys.ActorOf(ProductActor.Props(dataSource.Object)); target.Tell(new GetAllProducts(1), prob.Ref); var response = prob.ExpectMsg <AllProducts>(x => x.CorrelationId == 1); response.Products.Count.Should().Be(1); response.Products.Should().Contain(expectedProduct); }
public void ReturnProductNotFound_WhenProductIsNotInDataSet() { //arrange var dataSource = new Mock <IProductsDataSource>(); dataSource.Setup(x => x.GetAll()).Returns(new List <Product> { GetProduct() }); var prob = CreateTestProbe(); var target = Sys.ActorOf(ProductActor.Props(dataSource.Object)); target.Tell(new GetProduct(1, 777), prob.Ref); prob.ExpectMsg <ProductNotFound>(x => x.CorrelationId == 1); target.Tell(new TakeProductFromStock(2, 777, 100), prob.Ref); prob.ExpectMsg <ProductNotFound>(x => x.CorrelationId == 2); }
public void ReturnProductNotFound_IfProductIsNotInTheBasket() { var prob = CreateTestProbe(); var product = GetProduct(); var dataSource = new Mock <IProductsDataSource>(); dataSource .Setup(x => x.GetAll()) .Returns(new List <Product> { product }); var productActor = Sys.ActorOf(ProductActor.Props(dataSource.Object)); var target = Sys.ActorOf(BasketActor.Props(1, productActor)); target.Tell(new RemoveItemFromTheBasket(1, 1, 333), prob); prob.ExpectMsg <ProductNotFound>(x => x.CorrelationId == 1 && x.CustomerId == 1); }
public async Task ReturnProductTakenFromStock_WhenProductIsTakenFromStock() { //arrange var expectedProduct = GetProduct(); var dataSource = new Mock <IProductsDataSource>(); dataSource.Setup(x => x.GetAll()).Returns(new List <Product> { expectedProduct }); var prob = CreateTestProbe(); var target = Sys.ActorOf(ProductActor.Props(dataSource.Object)); target.Tell(new TakeProductFromStock(1, productId: 1, amountToTakeFromStock: 1), prob.Ref); prob.ExpectMsg <ProductTakenFromStock>(x => x.CorrelationId == 1); var actual = await target.Ask <ProductFound>(new GetProduct(2, 1)); actual.Product.AmountInStock.Should().Be(0); }
public void ReturnNewBasket_IfItDoesNotExistsButRequested() { var prob = CreateTestProbe(); var product = GetProduct(); var dataSource = new Mock <IProductsDataSource>(); dataSource .Setup(x => x.GetAll()) .Returns(new List <Product> { product }); var productActor = Sys.ActorOf(ProductActor.Props(dataSource.Object)); var target = Sys.ActorOf(BasketActor.Props(1, productActor)); target.Tell(new GetBasket(1, 1), prob); var actual = prob.ExpectMsg <BasketFound>(x => x.CorrelationId == 1 && x.CustomerId == 1); actual.Items.Should().BeEmpty(); }