Пример #1
0
        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());
            });
        }