示例#1
0
        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");
        }
示例#2
0
 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!");
 }
示例#3
0
 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 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);
        }