示例#1
0
        public void CreateCustomProduct_WithInValidIngredients_ShouldThrow()
        {
            //Arrange
            var db   = this.SetDb();
            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var service = new CustomCakeService(null, repo, this.Mapper, logger);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "NoFilling",
                SideDecoration   = "White_Chocolate_Cigarettes",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            //Act

            //Assert
            Assert.Throws <AutoMapperMappingException
                           >(() => service.CreateCustomProduct(model));
        }
示例#2
0
        public async Task AssignImgAndPrice_ShouldReturnModelWithPriceAndJmg()
        {
            //Arrange
            var db = this.SetDb();

            await this.SeedCustomCakeImg(db);

            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var service = new CustomCakeService(null, repo, this.Mapper, logger);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "NoFilling",
                SideDecoration   = "White Cigarettes",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            //Act
            var result = service.AssignImgAndPrice(model);

            var expectedPrice = 6 * 2.75m;
            var actualPrice   = result.Price;

            //Assert
            Assert.Equal(expectedPrice, actualPrice);
            Assert.NotNull(result.Img);
        }
示例#3
0
        public void CreateCustomProduct_ShouldReturnProduct()
        {
            //Arrange
            var db   = this.SetDb();
            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var service = new CustomCakeService(null, repo, this.Mapper, logger);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "No_Filling",
                SideDecoration   = "White_Chocolate_Cigarettes",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            //Act
            var product = service.CreateCustomProduct(model);

            //Assert
            Assert.NotNull(product);
            Assert.IsType <Product>(product);
        }
示例#4
0
        public async Task AssignImgAndPrice_WithInvalidSide_ShouldThrow()
        {
            //Arrange
            var db = this.SetDb();

            await this.SeedCustomCakeImg(db);

            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var service = new CustomCakeService(null, repo, this.Mapper, logger);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "NoFilling",
                SideDecoration   = "White Dots",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            //Act

            //Assert
            Assert.Throws <NullReferenceException>(() => service.AssignImgAndPrice(model));
        }
示例#5
0
        public IActionResult Index(CustomCakeOrderViewModel model)
        {
            if (!ModelState.IsValid)
            {
                this.logger.LogDebug("Model is not valid.");

                var errors = this.ModelState.Values.SelectMany(p => p.Errors).Select(e => e.ErrorMessage).ToList();

                var errorModel = this.errorService.GetErrorModel(errors);

                return(View("Error", errorModel));
            }

            CustomCakeOrderViewModel result = null;

            try
            {
                result = this.customCakeService.AssignImgAndPrice(model);
            }
            catch (Exception e)
            {
                ViewData["Errors"] = e.Message;

                return(this.View("Error"));
            }

            return(this.View("CustomCakeDetails", result));
        }
示例#6
0
        public async Task SoftDelete_WithInValidCustomCakeId_ShouldMarkCakeAsDeleted()
        {
            //Assert
            var db   = this.SetDb();
            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var productRepo = new Repository <Product>(db);

            var productService = new CakeService(null, productRepo, this.Mapper);

            var service = new CustomCakeService(productRepo, repo, this.Mapper, logger);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "No_Filling",
                SideDecoration   = "White_Chocolate_Cigarettes",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            var product = service.CreateCustomProduct(model);

            await productService.AddCakeToDb(product);

            //Act


            //Assert
            await Assert.ThrowsAsync <InvalidOperationException>(async() => await productService.SoftDelete(2));
        }
示例#7
0
        public CustomCakeOrderViewModel AssignImgAndPrice(CustomCakeOrderViewModel model)
        {
            if (model.Sponge.Contains("Choose") || model.FirstLayerCream.Contains("Choose") || model.SecondLayerCream.Contains("Choose") || model.Filling.Contains("Choose") || model.SideDecoration.Contains("Choose") || model.TopDecoration.Contains("Choose"))
            {
                throw new InvalidOperationException("Please fill the form correctlly.");
            }

            var side = model.SideDecoration.ToLower();

            var top = model.TopDecoration.ToLower();

            var customCakeImg = customCakeImgRepo.All().SingleOrDefault(c => c.Side.ToLower() == side && c.Top.ToLower() == top);

            if (customCakeImg == null)
            {
                throw new NullReferenceException("Sorry, we are out of this product. Please choose other Side - Top combination.");
            }

            model.Img = customCakeImg.Img;

            if (!Uri.TryCreate(model.Img, UriKind.Absolute, out Uri result))
            {
                throw new InvalidOperationException("Sorry. Error occurred while processing your order. Please, contact us.");
            }

            return(model);
        }
示例#8
0
        public async Task <IActionResult> AddToCart()
        {
            CustomCakeOrderViewModel model = null;

            if (TempData["OrderCustomCake"] != null)
            {
                model = JsonConvert.DeserializeObject <CustomCakeOrderViewModel>(TempData["OrderCustomCake"].ToString());
            }

            Product product = null;

            try
            {
                product = this.customCakeService.CreateCustomProduct(model);
            }
            catch (Exception e)
            {
                ViewData["Errors"] = e.Message;

                return(this.View("Error"));
            }

            if (!ModelState.IsValid)
            {
                this.logger.LogDebug("Model is not valid.");

                var errors = this.ModelState.Values.SelectMany(p => p.Errors).Select(e => e.ErrorMessage).ToList();

                var errorModel = this.errorService.GetErrorModel(errors);

                return(View("Error", errorModel));
            }


            int?customProductId = null;

            try
            {
                await this.cakeService.AddCakeToDb(product);

                customProductId = product.Id;
            }
            catch (Exception e)
            {
                ViewData["Errors"] = e.Message;

                return(this.View("Error"));
            }

            return(RedirectToAction("AddToCart", "Cart", new { Id = customProductId }));
        }
示例#9
0
        public void CreateCustomProduct_WithNullIngredients_ShouldThrow()
        {
            //Arrange
            var db   = this.SetDb();
            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var service = new CustomCakeService(null, repo, this.Mapper, logger);

            CustomCakeOrderViewModel model = null;

            //Act

            //Assert
            Assert.Throws <AutoMapperMappingException
                           >(() => service.CreateCustomProduct(model));
        }
示例#10
0
        public Product CreateCustomProduct(CustomCakeOrderViewModel model)
        {
            var ingredients = this.mapper.Map <CustomCakeOrderViewModel, Ingredients>(model);

            if (ingredients == null)
            {
                throw new AutoMapperMappingException("Ingredients not set.");
            }

            var product = new Product
            {
                Name        = model.TopDecoration.Replace('_', ' ') + " with " + model.SideDecoration.Replace('_', ' '),
                CategoryId  = 2,
                Image       = model.Img,
                Ingredients = ingredients,
                Price       = model.Price
            };

            return(product);
        }
        public async Task RemoveFromCart_WithItemCategoryTwo_ShouldReturnEmptyCart()
        {
            //Arrange
            var db = this.SetDb();

            var repo              = new Repository <CustomCakeImg>(db);
            var productRepo       = new Repository <Product>(db);
            var productService    = new CakeService(null, productRepo, this.Mapper);
            var customCakeService = new CustomCakeService(productRepo, repo, this.Mapper, null);

            var wrapper     = new TestCartSessionWrapper();
            var cartManager = new CartManager(wrapper);

            var cartService = new CartService(productRepo, cartManager);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "No_Filling",
                SideDecoration   = "White_Chocolate_Cigarettes",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            var product = customCakeService.CreateCustomProduct(model);

            await productService.AddCakeToDb(product);

            await cartService.AddToCart(1);

            //Act
            await cartService.RemoveFromCart(1);

            //Assert
            Assert.Empty(cartManager.GetCartItem());
        }
示例#12
0
        public async Task SoftDelete_WithValidCustomCakeId_ShouldMarkCakeAsDeleted()
        {
            //Assert
            var db   = this.SetDb();
            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var productRepo = new Repository <Product>(db);

            var productService = new CakeService(null, productRepo, this.Mapper);

            var service = new CustomCakeService(productRepo, repo, this.Mapper, logger);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "No_Filling",
                SideDecoration   = "White_Chocolate_Cigarettes",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            var product = service.CreateCustomProduct(model);

            await productService.AddCakeToDb(product);

            //Act
            await productService.SoftDelete(1);

            var expectedIsDeleted = true;
            var actualIsDeleted   = (await productRepo.GetByIdAsync(1)).IsDeleted;

            //Assert
            Assert.Equal(expectedIsDeleted, actualIsDeleted);
        }
示例#13
0
        public async Task AssignImgAndPrice_WhithInvalidImgUrn_ShouldThrow()
        {
            //Arrange
            var db = this.SetDb();

            var repo = new Repository <CustomCakeImg>(db);
            var mock = new Mock <ILogger <CustomCakeService> >();
            ILogger <CustomCakeService> logger = mock.Object;
            var service = new CustomCakeService(null, repo, this.Mapper, logger);

            CustomCakeImgViewModel imgModel = new CustomCakeImgViewModel
            {
                Side = "White Cigarettes",
                Top  = "Habana",
                Name = "Habana" + " " + "White Cigarettes",
                Img  = "null"
            };

            await service.AddCustomCakeImg(imgModel);

            CustomCakeOrderViewModel model = new CustomCakeOrderViewModel
            {
                Sponge           = "Vanilla",
                FirstLayerCream  = "Whipped",
                SecondLayerCream = "Whipped",
                Filling          = "NoFilling",
                SideDecoration   = "White Cigarettes",
                TopDecoration    = "Habana",
                NumberOfSlices   = 6,
                Img = null,
            };

            //Act

            //Assert
            Assert.Throws <InvalidOperationException>(() => service.AssignImgAndPrice(model));
        }