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)); }
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); }
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); }
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)); }
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)); }
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)); }
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); }
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 })); }
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)); }
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()); }
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); }
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)); }