Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
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();
        }