public void WhenICreateANewReview(Table table) { var reviewCreateViewModel = new ReviewCreateEditModel { Name = table.Rows.First()["Name"], LengthOfReviewRoundInWeeks = Convert.ToInt32(table.Rows.First()["Length in weeks"]), AddedCategories = new List <CategoryAddModel> { new CategoryAddModel { Name = table.Rows.First()["Category 1 Name"], Description = table.Rows.First()["Category 1 description"] }, new CategoryAddModel { Name = table.Rows.First()["Category 2 Name"], Description = table.Rows.First()["Category 2 description"] } } }; ActionResult result = _context.ReviewController.Value.Create(reviewCreateViewModel, "Save"); ScenarioContext.Current.Set(table); ScenarioContext.Current.Set(result); ScenarioContext.Current.Set(_context.ReviewController.Value.TempData); }
private void ValidateModel(ReviewCreateEditModel reviewCreateModel) { // 1. Remove empty entries from categories and peers for (var index = 0; index < reviewCreateModel.AddedCategories.Count; index++) { var category = reviewCreateModel.AddedCategories[index]; if (string.IsNullOrWhiteSpace(category.Name) && string.IsNullOrWhiteSpace(category.Description)) { reviewCreateModel.AddedCategories.Remove(category); } } for (var index = 0; index < reviewCreateModel.AddedPeers.Count; index++) { var peer = reviewCreateModel.AddedPeers[index]; if (string.IsNullOrWhiteSpace(peer.UserName) && string.IsNullOrWhiteSpace(peer.EmailAddress)) { reviewCreateModel.AddedPeers.Remove(peer); } } // 2. Check for categories with only a description for (var i = 0; i < reviewCreateModel.AddedCategories.Count; i++) { var index = i; var category = reviewCreateModel.AddedCategories[index]; if (string.IsNullOrWhiteSpace(category.Name)) { Expression <Func <ReviewCreateEditModel, string> > expression = x => x.AddedCategories[index].Name; var key = ExpressionHelper.GetExpressionText(expression); ModelState.AddModelError(key, "Please give your category a name."); } } // 3. Check for peers without one of the fields for (var i = 0; i < reviewCreateModel.AddedPeers.Count; i++) { var index = i; var peer = reviewCreateModel.AddedPeers[index]; if (string.IsNullOrWhiteSpace(peer.UserName)) { Expression <Func <ReviewCreateEditModel, string> > expression = x => x.AddedPeers[index].UserName; var key = ExpressionHelper.GetExpressionText(expression); ModelState.AddModelError(key, "Please enter your peer's name."); } else if (string.IsNullOrWhiteSpace(peer.EmailAddress)) { Expression <Func <ReviewCreateEditModel, string> > expression = x => x.AddedPeers[index].EmailAddress; var key = ExpressionHelper.GetExpressionText(expression); ModelState.AddModelError(key, "Please enter your peer's email address."); } } }
public ActionResult Create(ReviewCreateEditModel reviewCreateModel, string submit) { // manual model validation ValidateModel(reviewCreateModel); if (!ModelState.IsValid) { return(View(reviewCreateModel)); } // TODO: raise model state errors for duplicate email addresses var newReview = Mapper.Map <ReviewConfiguration>(reviewCreateModel); newReview.EnsureName(); _db.ReviewConfigurations.Add(newReview); foreach (var cat in reviewCreateModel.AddedCategories.Select(Mapper.Map <ReviewCategory>)) { newReview.Categories.Add(cat); } foreach (var newPeer in reviewCreateModel.AddedPeers.Select(Mapper.Map <UserProfile>)) { var fromDb = _db.UserProfiles.SingleOrDefault(userProfile => userProfile.EmailAddress == newPeer.EmailAddress); newReview.Peers.Add(fromDb ?? newPeer); } var loggedInUser = _db.UserProfiles.FirstOrDefault(userProfile => userProfile.EmailAddress == User.Identity.Name); if (loggedInUser != null) { newReview.Peers.Add(loggedInUser); } _db.SaveChanges(); if (submit == "Save and Start the Review") { // there will be a redirect at the end of StartReview return(StartReview(newReview.Id)); } TempData["Message"] = "Review has been created"; return(RedirectToAction("Index")); }
public ActionResult CreateExtension(ReviewCreateEditModel reviewCreateModel) { var action = Request.Form["submit.add"]; if (action != null) { if (action == "addCategory") { reviewCreateModel.AddedCategories.Add(new CategoryAddModel()); return(View("Create", reviewCreateModel)); } if (action == "addPeer") { reviewCreateModel.AddedPeers.Add(new PeerAddModel()); return(View("Create", reviewCreateModel)); } } // ReSharper disable once NotResolvedInText throw new ArgumentNullException("submit.add", "The given form field must not be empty!"); }