예제 #1
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);
            }
        }
예제 #2
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");
                }
            }
        }
예제 #3
0
        public void Init()
        {
            var options = EfInMemory.CreateOptions <MWDBContext>();

            _context = new MWDBContext(options);
            DbInitializer.Initialize(_context);
            _boardRepository = new BoardRepository(_context);

            _boardController = new BoardController(_boardRepository);
        }
예제 #4
0
        public void GetAllProductsReturnsEmptyList()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                var products = context.Product.ToList();
                products.Count().ShouldEqual(0);
            }
        }
예제 #5
0
        public void UpdateProductNotFoundError()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);
                Assert.Throws <KeyNotFoundException>(() => repository.UpdateProduct(ProductMocks.ProductSamsungGalaxyS7));
            }
        }
예제 #6
0
        public void DeleteProductNotFound()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);
                Assert.Throws <KeyNotFoundException>(() => repository.DeleteProduct(ProductMocks.NewProductiPhoneXS));
            }
        }
예제 #7
0
        public void AddRangeGetAllReturnsAll2Items()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var products = context.Product.ToList();
                products.Count().ShouldEqual(2);
            }
        }
예제 #8
0
        public void GetProductOptionNotFoundError()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);
                Assert.Throws <KeyNotFoundException>(() => repository.GetProductOption(new Guid(), new Guid()));
            }
        }
예제 #9
0
        public void DeleteProductSuccess()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);
                repository.DeleteProduct(ProductMocks.ProductSamsungGalaxyS7).ShouldBeTrue();
            }
        }
예제 #10
0
        public void DeleteProductOptionNotFoundError()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                var option     = ProductMocks.ProductSamsungGalaxyS7.ProductOptions.First();
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);
                Assert.Throws <KeyNotFoundException>(() => repository.DeleteProductOption(option.ProductId, option.Id));
            }
        }
예제 #11
0
        public void AddProductDuplicateKeyError()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);
                Assert.Throws <InvalidOperationException>(() => repository.AddProduct(ProductMocks.ProductSamsungGalaxyS7));
            }
        }
예제 #12
0
        public void TestInMemorySupportsSchema()
        {
            //SETUP
            var options = EfInMemory.CreateOptions <DbContextWithSchema>();

            using (var context = new DbContextWithSchema(options))
            {
                //ATTEMPT
                context.Database.EnsureCreated();

                //VERIFY
            }
        }
예제 #13
0
        public void TestInMemoryAcceptsComputedCol()
        {
            //SETUP
            var options = EfInMemory.CreateOptions <MyEntityComputedColDbContext>();

            using (var context = new MyEntityComputedColDbContext(options))
            {
                //ATTEMPT
                context.Database.EnsureCreated();

                //VERIFY
            }
        }
예제 #14
0
        public void GetProductOptionsSuccess()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger         = new Mock <ILogger <ProductsRepository> >();
                var repository     = new ProductsRepository(context, logger.Object);
                var productOptions = repository.GetProductOptions(ProductMocks.ProductSamsungGalaxyS7.Id);
                productOptions.Count().ShouldEqual(ProductMocks.ProductSamsungGalaxyS7.ProductOptions.Count());
            }
        }
예제 #15
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);
            }
        }
        public void Setup()
        {
            var options = EfInMemory
                          .CreateOptions <TestDBContext>();

            Context = new TestDBContext(options);
            Context.Database.EnsureCreated();

            DbSeeder.Feed(Context);

            Context.SaveChanges();

            _repository = new TestRepository <TestEntity>(Context);
        }
예제 #17
0
        public void GetProductByNameReturnsEmpty()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);

                var matches = repository.SearchByName("Microsoft");
                matches.Count().ShouldEqual(0);
            }
        }
예제 #18
0
        public void TestInMemoryOk()
        {
            //SETUP
            var options = EfInMemory.CreateOptions <BookContext>();

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

                //ATTEMPT
                context.SeedDatabaseFourBooks();

                //VERIFY
                context.Books.Count().ShouldEqual(4);
            }
        }
예제 #19
0
        public void TestInMemoryAcceptsComputedColButDoesntWork()
        {
            //SETUP
            var options = EfInMemory.CreateOptions <MyEntityComputedColDbContext>();

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

                //ATTEMPT
                context.Add(new MyEntity());
                context.SaveChanges();

                //VERIFY
                context.Set <MyEntity>().First().MyDateTime.ShouldEqual(new DateTime());
            }
        }
예제 #20
0
        public void GetProductOptionSuccess()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var targetOption = ProductMocks.ProductSamsungGalaxyS7.ProductOptions.First();
                var logger       = new Mock <ILogger <ProductsRepository> >();
                var repository   = new ProductsRepository(context, logger.Object);
                var sourceOption = repository.GetProductOption(targetOption.ProductId, targetOption.Id);
                var compareLogic = new CompareLogic();

                var result = compareLogic.Compare(targetOption, sourceOption);
                result.AreEqual.ShouldBeTrue();
            }
        }
예제 #21
0
        public void GetProductByNameReturnsSuccess()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);

                var matches = repository.SearchByName("Samsung");
                matches.Count().ShouldEqual(1);

                var product = matches.First();
                product.Name.ShouldEqual(ProductMocks.ProductSamsungGalaxyS7.Name);
            }
        }
예제 #22
0
        public void GetProductByIdReturnsSucessAndWithOptions()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger       = new Mock <ILogger <ProductsRepository> >();
                var repository   = new ProductsRepository(context, logger.Object);
                var product      = repository.GetProduct(ProductMocks.ProductSamsungGalaxyS7.Id);
                var compareLogic = new CompareLogic();

                var result = compareLogic.Compare(product, ProductMocks.ProductSamsungGalaxyS7);
                result.AreEqual.ShouldBeTrue();
                product.ProductOptions.Count().ShouldEqual(2);
            }
        }
예제 #23
0
        public void UpdateProductSuccess()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);
                var logger     = new Mock <ILogger <ProductsRepository> >();
                var repository = new ProductsRepository(context, logger.Object);
                var product    = ProductMocks.ProductSamsungGalaxyS7;
                product.Description = "TestDescription";
                product.Name        = "TestName";
                repository.UpdateProduct(product);
                var updatedProduct = repository.GetProduct(product.Id);
                updatedProduct.Name.ShouldBeSameAs(product.Name);
                updatedProduct.Description.ShouldBeSameAs(product.Description);
            }
        }
예제 #24
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);
            }
        }
예제 #25
0
        public void UpdateProductOptionSuccess()
        {
            var options = EfInMemory.CreateOptions <ProductsContext>();

            using (var context = new ProductsContext(options))
            {
                var option       = ProductMocks.ProductSamsungGalaxyS7.ProductOptions.First();
                var logger       = new Mock <ILogger <ProductsRepository> >();
                var repository   = new ProductsRepository(context, logger.Object);
                var compareLogic = new CompareLogic();
                context.FeedDataContext(ProductMocks.ProductsBaseDataset);

                option.Name        = "UpdatedName";
                option.Description = "UpdatedDescription";
                repository.UpdateProductOption(option);
                var updatedOption = repository.GetProductOption(option.ProductId, option.Id);
                var result        = compareLogic.Compare(option, updatedOption);
                result.AreEqual.ShouldBeTrue();
            }
        }
예제 #26
0
        public void AddProductSuccess()
        {
            try
            {
                var options = EfInMemory.CreateOptions <ProductsContext>();
                using (var context = new ProductsContext(options))
                {
                    var logger     = new Mock <ILogger <ProductsRepository> >();
                    var repository = new ProductsRepository(context, logger.Object);
                    repository.AddProduct(ProductMocks.NewProductiPhoneXS);

                    var product = repository.GetProduct(ProductMocks.NewProductiPhoneXS.Id);
                    product.ShouldBeSameAs(ProductMocks.NewProductiPhoneXS);
                }
            }
            catch (Exception ex)
            {
                var s = ex.Message;
            }
        }
예제 #27
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);
            }
        }
예제 #28
0
 public SurveyRepositoryTests()
 {
     _options = EfInMemory.CreateOptions <ApplicationDataContext>();
 }