Exemple #1
0
        public void PlaceOrderWithPromotionOk()
        {
            //SETUP
            var mockDbA   = new MockPlaceOrderDbAccess(false, 999);
            var service   = new PlaceOrderAction(mockDbA);
            var lineItems = new List <OrderLineItem>
            {
                new OrderLineItem {
                    BookId = 1, NumBooks = 1
                },
                new OrderLineItem {
                    BookId = 2, NumBooks = 1
                },
            };
            var userId = Guid.NewGuid();

            //ATTEMPT
            var result = service.Action(new PlaceOrderInDto(true, userId, lineItems.ToImmutableList()));

            //VERIFY
            service.Errors.Any().ShouldEqual(false);

            var orderLineItems = mockDbA.AddedOrder.LineItems.ToList();

            orderLineItems.First().BookPrice.ShouldEqual(999);
            orderLineItems.Last().BookPrice.ShouldEqual(2);
        }
Exemple #2
0
        public void MissingBookError()
        {
            //SETUP
            var mockDbA   = new MockPlaceOrderDbAccess();
            var service   = new PlaceOrderAction(mockDbA);
            var lineItems = new List <OrderLineItem>
            {
                new OrderLineItem {
                    BookId = 1, NumBooks = 4
                },
                new OrderLineItem {
                    BookId = 1000, NumBooks = 5
                },
                new OrderLineItem {
                    BookId = 3, NumBooks = 6
                }
            };
            var userId = Guid.NewGuid();

            //ATTEMPT
            var ex = Assert.Throws <InvalidOperationException>(
                () => service.Action(new PlaceOrderInDto(true, userId, lineItems.ToImmutableList())));

            //VERIFY
            ex.Message.ShouldEqual("An order failed because book, id = 1000 was missing.");
        }
        public void TestAddOrderViaBizLogicOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <EfCoreContext>();

            using (var context = new EfCoreContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();

                var service = new PlaceOrderAction(new PlaceOrderDbAccess(context));
                var dto     = new PlaceOrderInDto
                {
                    AcceptTAndCs      = true,
                    CheckoutLineItems = new List <OrderLineItem>
                    {
                        new OrderLineItem {
                            BookId = 1, NumBooks = 2
                        }
                    }
                };

                //ATTEMPT
                var order = service.BizAction(dto);

                //VERIFY
                service.HasErrors.ShouldBeFalse();
                order.LineItems.Count().ShouldEqual(1);
                order.LineItems.Single().BookPrice.ShouldEqual(context.Books.Find(1).ActualPrice);
            }
        }
        public PlaceOrderServiceWithVal(
            IRequestCookieCollection cookiesIn,
            IResponseCookies cookiesOut,
            DataContext dataContext)
        {
            IPlaceOrderDbAccess dbAccess         = new PlaceOrderDbAccess(dataContext);
            IPlaceOrderAction   placeOrderAction = new PlaceOrderAction(dbAccess);

            runner         = new RunnerWriteDbWithValidation <PlaceOrderInDto, Order>(placeOrderAction, dataContext);
            checkoutCookie = new CheckoutCookie(cookiesIn, cookiesOut);
        }
Exemple #5
0
        public void NotAcceptTsAndCs()
        {
            //SETUP
            var mockDbA = new MockPlaceOrderDbAccess(true);
            var service = new PlaceOrderAction(mockDbA);
            var userId  = Guid.NewGuid();

            //ATTEMPT
            service.Action(new PlaceOrderInDto(false, userId, null));

            //VERIFY
            service.Errors.Any().ShouldEqual(true);
            service.Errors.Count.ShouldEqual(1);
            service.Errors.First().ErrorMessage.ShouldEqual("You must accept the T&Cs to place an order.");
        }
Exemple #6
0
        public void BookNotForSale()
        {
            //SETUP
            var mockDbA   = new MockPlaceOrderDbAccess(false, -1);
            var service   = new PlaceOrderAction(mockDbA);
            var lineItems = new List <OrderLineItem>
            {
                new OrderLineItem {
                    BookId = 1, NumBooks = 1
                },
            };
            var userId = Guid.NewGuid();

            //ATTEMPT
            service.Action(new PlaceOrderInDto(true, userId, lineItems.ToImmutableList()));

            //VERIFY
            service.Errors.Any().ShouldEqual(true);
            service.Errors.Count.ShouldEqual(1);
            service.Errors.First().ErrorMessage.ShouldEqual("Sorry, the book 'Book0000 Title' is not for sale.");
        }
Exemple #7
0
        public void ExampleOfMockingOk()
        {
            //SETUP                                           //#A
            var lineItems = new List <OrderLineItem>          //#A
            {                                                 //#A
                new OrderLineItem {
                    BookId = 1, NumBooks = 4
                },                                                         //#A
            };                                                             //#A
            var userId = Guid.NewGuid();                                   //#A
            var input  = new PlaceOrderInDto(true, userId,                 //#A
                                             lineItems.ToImmutableList()); //#A

            var mockDbA = new MockPlaceOrderDbAccess();                    //#B
            var service = new PlaceOrderAction(mockDbA);                   //#C

            //ATTEMPT
            service.Action(input); //#D

            //VERIFY
            service.Errors.Any().ShouldEqual(false); //#
            mockDbA.AddedOrder.CustomerId            //#F
            .ShouldEqual(userId);                    //#F
        }
Exemple #8
0
        public void PlaceOrderOk()
        {
            //SETUP
            var mockDbA   = new MockPlaceOrderDbAccess();
            var service   = new PlaceOrderAction(mockDbA);
            var lineItems = new List <OrderLineItem>
            {
                new OrderLineItem {
                    BookId = 1, NumBooks = 4
                },
                new OrderLineItem {
                    BookId = 2, NumBooks = 5
                },
                new OrderLineItem {
                    BookId = 3, NumBooks = 6
                }
            };
            var userId = Guid.NewGuid();

            //ATTEMPT
            var result = service.Action(new PlaceOrderInDto(true, userId, lineItems.ToImmutableList()));

            //VERIFY
            service.Errors.Any().ShouldEqual(false);
            mockDbA.AddedOrder.CustomerId.ShouldEqual(userId);
            mockDbA.AddedOrder.DateOrderedUtc.Subtract(DateTime.UtcNow).TotalSeconds.ShouldBeInRange(-1, 0);
            mockDbA.AddedOrder.LineItems.Count.ShouldEqual(lineItems.Count);
            var orderLineItems = mockDbA.AddedOrder.LineItems.ToImmutableList();

            for (int i = 0; i < lineItems.Count; i++)
            {
                orderLineItems[i].LineNum.ShouldEqual((byte)(i + 1));
                orderLineItems[i].ChosenBook.BookId.ShouldEqual(lineItems[i].BookId);
                orderLineItems[i].NumBooks.ShouldEqual(lineItems[i].NumBooks);
            }
        }
        public void TestAddOrderNoAcceptBad()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <EfCoreContext>();

            using (var context = new EfCoreContext(options))
            {
                context.Database.EnsureCreated();
                context.SeedDatabaseFourBooks();

                var service = new PlaceOrderAction(new PlaceOrderDbAccess(context));
                var dto     = new PlaceOrderInDto
                {
                    AcceptTAndCs = false,
                };

                //ATTEMPT
                var order = service.BizAction(dto);

                //VERIFY
                service.HasErrors.ShouldBeTrue();
                service.Errors.Single().ErrorResult.ErrorMessage.ShouldEqual("You must accept the T&Cs to place an order.");
            }
        }