public ActionResult Users(int id, InviteViewModel model) { if (ModelState.IsValid) { var emails = model.Emails .Split(Environment.NewLine.ToArray()) .Select(str => str.Trim().ToLower()) .ToList(); DB.Use(db => { var existingUsers = db.Users.Where(u => emails.Contains(u.Email)).Select(u => new { u.UserId, u.Email }).ToList(); var newEmails = emails.Except(existingUsers.Select(u => u.Email)); foreach (var email in newEmails) { var invite = new Invite { Email = email, InstanceId = id, Code = GetRandomString() }; db.Invites.Add(invite); } db.SaveChanges(); }); return RedirectToAction(""); } return View(model); }
public void Users_POST_NewMember_ShouldSendInvite() { var instance = InitWithSingleMember(); var controller = new InviteController(); controller.UserInfo = new UserInfo { Id = 12 }; var vm = new InviteViewModel { Emails = "*****@*****.**" }; var result = controller.Users(instance.Id, vm) as RedirectToRouteResult; Assert.IsNotNull(result); DB.Use(db => { var invite = db.Invites.Single(); Assert.AreEqual("*****@*****.**", invite.Email); Assert.IsNotNull(invite.Code); Assert.AreEqual(instance.Id, invite.InstanceId); Assert.AreEqual(1, db.Users.Count()); }); }