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 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.");
            }
        }