예제 #1
0
        public async Task RunActionAsync(MockBizActionWithWriteModes mode)
        {
            //SETUP
            var options = EfInMemory.CreateNewContextOptions();

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

                var action = new MockBizActionWithWriteAsync(context);
                var runner = new RunnerWriteDbWithValidationAsync <MockBizActionWithWriteModes, string>(action, context);

                //ATTEMPT
                var output = await runner.RunActionAsync(mode);

                //VERIFY
                output.ShouldEqual(mode.ToString());
                runner.HasErrors.ShouldEqual(mode != MockBizActionWithWriteModes.Ok);
                context.Orders.Count().ShouldEqual(mode != MockBizActionWithWriteModes.Ok ? 0 : 1);

                if (mode == MockBizActionWithWriteModes.BizError)
                {
                    runner.Errors.Single().ErrorMessage.ShouldEqual("There is a biz error.");
                }
                if (mode == MockBizActionWithWriteModes.SaveChangesError)
                {
                    runner.Errors.Single().ErrorMessage.ShouldEqual("If you want to order a 100 or more books please phone us on 01234-5678-90");
                }
            }
        }
예제 #2
0
        public void TestPlaceOrderOk()
        {
            //SETUP
            var options = EfInMemory.CreateNewContextOptions();

            using (var context = new EfCoreContext(options))
            {
                context.SeedDatabaseFourBooks();
            }
            using (var context = new EfCoreContext(options))
            {
                var mockCookieRequests = new MockHttpCookieAccess(CheckoutCookie.CheckoutCookieName, $"{Guid.NewGuid()},1,2");
                var service            = new PlaceOrderService(mockCookieRequests.CookiesIn, mockCookieRequests.CookiesOut, context);

                //ATTEMPT
                var orderId = service.PlaceOrder(true);
                context.SaveChanges();

                //VERIFY
                orderId.ShouldNotEqual(0);
                service.Errors.Count.ShouldEqual(0);
                context.Orders.Count().ShouldEqual(1);
                context.Orders.First().OrderId.ShouldEqual(orderId);
            }
        }
예제 #3
0
파일: Ch04_Order.cs 프로젝트: krossa/nauka
        public void TestUpdateLineItemInOrder()
        {
            //SETUP
            var options = EfInMemory.CreateNewContextOptions();

            using (var context = new EfCoreContext(options))
            {
                context.SeedDatabaseFourBooks();
                var userId = Guid.NewGuid();
                var order  = new Order
                {
                    CustomerName = userId,
                    LineItems    = new List <LineItem>
                    {
                        new LineItem
                        {
                            BookId    = 1,
                            LineNum   = 0,
                            BookPrice = 123,
                            NumBooks  = 1
                        }
                    }
                };
                context.Orders.Add(order);
                context.SaveChanges();
            }

            //ATTEMPT
            using (var context = new EfCoreContext(options))
            {
                var order = context.Orders.Include(x => x.LineItems).First();
                order.LineItems = new List <LineItem>
                {
                    new LineItem
                    {
                        BookId    = 1,
                        LineNum   = 0,
                        BookPrice = 456,
                        NumBooks  = 1
                    }
                };
                context.SaveChanges();
            }

            //VERIFY
            using (var context = new EfCoreContext(options))
            {
                var order = context.Orders.Include(x => x.LineItems).First();
                order.LineItems.First().BookPrice.ShouldEqual(456);
            }
        }
예제 #4
0
        public void RunAction(int input, bool hasErrors)
        {
            //SETUP
            var options = EfInMemory.CreateNewContextOptions();

            using (var context = new EfCoreContext(options))
            {
                var action = new MockBizAction(context);
                var runner = new RunnerWriteDb <int, string>(action, context);

                //ATTEMPT
                var output = runner.RunAction(input);

                //VERIFY
                output.ShouldEqual(input.ToString());
                runner.HasErrors.ShouldEqual(hasErrors);
                context.Authors.Count().ShouldEqual(hasErrors ? 0 : 1);
            }
        }
예제 #5
0
        public void TestCheckoutListOneBookDatabaseOneBook()
        {
            //SETUP
            var options = EfInMemory.CreateNewContextOptions();

            using (var context = new EfCoreContext(options))
            {
                context.SeedDatabaseDummyBooks(1);
            }
            //two line items: BookId:1 NumBooks:1
            var mockCookieRequests = new MockHttpCookieAccess(CheckoutCookie.CheckoutCookieName, $"{Guid.NewGuid()},1,1");

            //ATTEMPT
            using (var context = new EfCoreContext(options))
            {
                var service = new CheckoutListService(context, mockCookieRequests.CookiesIn);
                var list    = service.GetCheckoutList();

                //VERIFY
                list.Count.ShouldEqual(1);
                list.First().BookId.ShouldEqual(1);
                list.First().BookPrice.ShouldEqual(1);
            }
        }