예제 #1
0
        public SaveResultModel <User> RemoveFriend(string username, string friendUsername)
        {
            var user   = GetUserByUsername(username);
            var result = new SaveResultModel <User> {
                Model = user
            };
            var friend = GetUserByUsername(friendUsername);

            if (user.Friends != null)
            {
                if (friend == null)
                {
                    result.ErrorMessages = new List <string> {
                        "The person you are trying to remove is not a valid user."
                    };
                }
                else if (user.Friends.Contains(friend))
                {
                    user.Friends.Remove(friend);
                    this._userRepository.Update(user);
                    _unitOfWork.Commit();

                    result.Success = true;
                }
                else
                {
                    result.ErrorMessages = new List <string> {
                        "The person you are trying to remove is not your friend."
                    };
                }
            }

            return(result);
        }
        public dynamic Save()
        {
            ProjectAggregateViewModel viewModel = this.Bind <ProjectAggregateViewModel>();

            ProjectRequestAggregateModel model = new ProjectRequestAggregateModel();

            model.ProjectId         = viewModel.ProjectId;
            model.AggregateTarget   = viewModel.AggregateTarget;
            model.RegularExpression = viewModel.RegularExpression;
            SaveResultModel result = null;

            _dbContext.BeginTransaction();
            try
            {
                _createProjectRequestAggregateCommand.Execute(model);
                _dbContext.Commit();
                result = new SaveResultModel(model.Id.ToString(), true, Enumerable.Empty <string>().ToArray());
            }
            catch (ValidationException vex)
            {
                result = new SaveResultModel(String.Empty, false, vex.ValidationErrors);
                _dbContext.Rollback();
            }

            return(this.Response.AsJson(result));
        }
예제 #3
0
        public void CreateUser_UserIsCreated()
        {
            string originalPwd = "somePwd";
            User   userToSave  = new User();

            userToSave.Id          = 1;
            userToSave.Username    = "******";
            userToSave.Email       = "*****@*****.**";
            userToSave.Password    = originalPwd;
            userToSave.Currency    = Models.Enums.Currency.CAD;
            userToSave.PhoneNumber = "51878928";

            List <User> userTable = new List <User>();

            SetupMocks(new List <User>());

            SaveResultModel <User> result = _userService.CreateUser(userToSave);
            User createdUser = _userService.GetUser(userToSave.Id);

            _dataMock.Verify(m => m.Add(It.IsAny <User>()), Times.Once);
            Assert.IsTrue(result.Success);
            Assert.IsNotNull(createdUser);
            Assert.AreEqual(createdUser.Username, userToSave.Username);
            Assert.IsTrue(SecurePasswordHasher.Verify(originalPwd, createdUser.Password));
            Assert.AreEqual(createdUser.Currency, userToSave.Currency);
            Assert.AreEqual(createdUser.PhoneNumber, userToSave.PhoneNumber);
        }
예제 #4
0
        public void PostGroup_CorrectGroup_ReturnsOk()
        {
            var fakeGroup = new Group
            {
                Name     = "MyGroup",
                Category = GroupCategory.Friends,
                Users    = new List <User>()
                {
                    new User {
                        Username = "******"
                    }
                },
                CurrentBalance = 0
            };

            var fakeSaveResult = new SaveResultModel <Group>
            {
                Model   = fakeGroup,
                Success = true
            };

            var groupServiceMock = new Mock <IGroupService>();

            groupServiceMock.Setup(m => m.CreateGroup(It.IsAny <Group>())).Returns(fakeSaveResult);
            controller = new GroupsController(groupServiceMock.Object, null);

            var result = controller.Post(fakeGroup);

            Assert.IsTrue(result != null);
            Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult <Group>));
        }
예제 #5
0
        public void RemoveFriend_Validate_CannotEliminateLinkOfInexistentUsername()
        {
            User userPrincipal = new User();

            userPrincipal.Id          = 1;
            userPrincipal.Username    = "******";
            userPrincipal.Email       = "*****@*****.**";
            userPrincipal.PhoneNumber = "514111111";

            User friendOfUser = new User();

            friendOfUser.Id          = 2;
            friendOfUser.Username    = "******";
            friendOfUser.Email       = "*****@*****.**";
            friendOfUser.PhoneNumber = "514111111";

            userPrincipal.Friends = new List <User>();
            userPrincipal.Friends.Add(friendOfUser);

            string usernameInExistent = "usernameInExistent";

            SetupMocks(new List <User> {
                userPrincipal,
                friendOfUser
            });

            SaveResultModel <User> result = _userService.RemoveFriend(userPrincipal.Username, usernameInExistent);
            User UserModified             = _userService.GetUser(userPrincipal.Id);

            Assert.IsFalse(result.Success);
            Assert.IsTrue(UserModified.Friends.Count == 1);
        }
예제 #6
0
        public void RemoveFriend_EliminateLinkBetweenUserAndFriend()
        {
            User userPrincipal = new User();

            userPrincipal.Id          = 1;
            userPrincipal.Username    = "******";
            userPrincipal.Email       = "*****@*****.**";
            userPrincipal.PhoneNumber = "514111111";

            User friendOfUser = new User();

            friendOfUser.Id          = 2;
            friendOfUser.Username    = "******";
            friendOfUser.Email       = "*****@*****.**";
            friendOfUser.PhoneNumber = "514111111";

            userPrincipal.Friends = new List <User>();
            userPrincipal.Friends.Add(friendOfUser);

            SetupMocks(new List <User> {
                userPrincipal,
                friendOfUser
            });

            SaveResultModel <User> result = _userService.RemoveFriend(userPrincipal.Username, friendOfUser.Username);
            User UserModified             = _userService.GetUser(userPrincipal.Id);

            Assert.IsTrue(result.Success);
            Assert.IsTrue(UserModified.Friends.Count == 0);
        }
예제 #7
0
        public void PutExpense_CorrectExpense_ReturnOk()
        {
            var fakeExpense = new Expense
            {
                Description   = "tmp",
                Type          = ExpenseType.Entertainment,
                Date          = DateTime.Now,
                Currency      = Currency.CAD,
                IsTaxIncluded = true,
                CurrentAmount = 1,
                InitialAmount = 1,
                Payer         = new User()
            };

            var fakeSaveResult = new SaveResultModel <Expense>
            {
                Model   = fakeExpense,
                Success = true
            };

            var expenseServiceMock = new Mock <IExpenseService>();
            var groupServiceMock   = new Mock <IGroupService>();

            groupServiceMock.Setup(m => m.GetGroup(It.IsAny <int>())).Returns(new Group());
            expenseServiceMock.Setup(m => m.UpdateExpense(It.IsAny <Expense>())).Returns(fakeSaveResult);
            controller = new GroupsController(groupServiceMock.Object, expenseServiceMock.Object);

            var result = controller.PutExpense(10, 5, new Expense());

            Assert.IsTrue(result != null);
            Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult <Expense>));
        }
예제 #8
0
        public void AddFriend_CreateLinkBetweenUserAndFriend()
        {
            User userPrincipal = new User();

            userPrincipal.Id          = 1;
            userPrincipal.Username    = "******";
            userPrincipal.Email       = "*****@*****.**";
            userPrincipal.PhoneNumber = "514111111";

            User friendToAdd = new User();

            friendToAdd.Id          = 2;
            friendToAdd.Username    = "******";
            friendToAdd.Email       = "*****@*****.**";
            friendToAdd.PhoneNumber = "514111111";

            SetupMocks(new List <User> {
                userPrincipal,
                friendToAdd
            });

            SaveResultModel <User> result = _userService.AddFriend(userPrincipal.Username, friendToAdd.Username);
            User UserModified             = _userService.GetUser(userPrincipal.Id);

            Assert.IsTrue(result.Success);
            Assert.IsTrue(UserModified.Friends.Count == 1);
        }
예제 #9
0
        private TransactionResponseModel HandleSaving(SaveResultModel saveResult, TransactionResponseModel result, IUnitOfWork unit, string accountNumber)
        {
            if (saveResult.IsSuccessful)
            {
                var account = unit.Repository <Account>().Get().SingleOrDefault(a => a.AccountNumber == accountNumber);

                if (account != null)
                {
                    return(new TransactionResponseModel
                    {
                        IsSuccessful = saveResult.IsSuccessful,
                        Message = saveResult.Message,
                        CurrentBalance = result.CurrentBalance,
                        RowVersion = Convert.ToBase64String(account.RowVersion)
                    });
                }

                return(new TransactionResponseModel
                {
                    IsSuccessful = false,
                    Message = Message.AccountNotFound
                });
            }
            return(new TransactionResponseModel
            {
                IsSuccessful = saveResult.IsSuccessful,
                Message = saveResult.Message,
                RowVersion = result.RowVersion
            });
        }
예제 #10
0
        public SaveResultModel <User> CreateUser(User userToSave)
        {
            var result = new SaveResultModel <User> {
                Model = userToSave
            };

            IList <string> errorMessages = new List <string>();

            if (!_userValidator.Validate(userToSave, out errorMessages))
            {
                result.Success       = false;
                result.ErrorMessages = errorMessages;
                return(result);
            }

            var nameAlreadyExists = _userRepository.Get(g => g.Username == userToSave.Username) != null;

            if (nameAlreadyExists)
            {
                result.Success       = false;
                result.ErrorMessages = new List <string> {
                    "Username already exists."
                };
                return(result);
            }

            userToSave.Password = SecurePasswordHasher.Hash(userToSave.Password);

            this._userRepository.Add(userToSave);
            _unitOfWork.Commit();

            result.Success = true;
            return(result);
        }
예제 #11
0
        public void CreateUser_Validate_ShouldDetectInvalidInput()
        {
            SetupMocks(new List <User>());
            User userToSave = new User();
            SaveResultModel <User> result = _userService.CreateUser(userToSave);

            Assert.IsFalse(result.Success);
        }
예제 #12
0
        private SaveResultModel <User> ReturnSimpleErrorResult(string message)
        {
            var result = new SaveResultModel <User> {
                ErrorMessages = new List <string>()
            };

            result.Success = false;
            result.ErrorMessages.Add(message);
            return(result);
        }
예제 #13
0
        public async Task <IActionResult> SaveResult(string tournamentName, SaveResultModel saveResultModel)
        {
            var request = new CreateGameResultRequest(tournamentName,
                                                      saveResultModel.GuestTeamName, saveResultModel.GuestTeamResult,
                                                      saveResultModel.HomeTeamName, saveResultModel.HomeTeamResult);

            await _mediator.Send(request);

            return(Ok());
        }
예제 #14
0
        public void Save_ValidProject_Saves()
        {
            // setup
            ProjectModel project = DataHelper.CreateProjectModel();

            project.Name = "TestProject";

            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };

            currentUser.Claims = new string[] { Claims.ProjectEdit };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new ProjectModule(_dbContext, _projectValidator, _createProjectCommand, _deleteProjectCommand, _projectRepo, _logFileRepo, _requestRepo, _projectRequestAggregateRepo))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );

            _createProjectCommand.Execute(Arg.Any <ProjectModel>()).Returns(project);
            _projectValidator.Validate(Arg.Any <ProjectModel>()).Returns(new ValidationResult());

            // execute
            var response = browser.Post(Actions.Project.Save, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("Name", project.Name);
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            // check the result
            SaveResultModel result = JsonConvert.DeserializeObject <SaveResultModel>(response.Body.AsString());

            Assert.IsTrue(result.Success);
            Assert.AreEqual(project.Id.ToString(), result.Id);
            Assert.AreEqual(0, result.Messages.Length);

            // the project should have been added
            _createProjectCommand.Received(1).Execute(Arg.Any <ProjectModel>());
            _dbContext.Received(1).BeginTransaction();
            _dbContext.Received(1).Commit();
        }
예제 #15
0
        public dynamic ProjectSave()
        {
            ProjectFormViewModel model   = this.Bind <ProjectFormViewModel>();
            ProjectModel         project = Mapper.Map <ProjectFormViewModel, ProjectModel>(model);

            ValidationResult validationResult = _projectValidator.Validate(project);

            if (validationResult.Success)
            {
                _dbContext.BeginTransaction();
                project = _createProjectCommand.Execute(project);
                _dbContext.Commit();
            }

            SaveResultModel result = new SaveResultModel(project.Id.ToString(), validationResult.Success, validationResult.Messages.ToArray());

            return(this.Response.AsJson(result));
        }
예제 #16
0
        public void ModifyGroup_InvalidGroup_ReturnsBadRequest()
        {
            var fakeSaveResult = new SaveResultModel <Group>
            {
                Model   = null,
                Success = false
            };

            var groupServiceMock = new Mock <IGroupService>();

            groupServiceMock.Setup(m => m.ModifyGroup(It.IsAny <Group>())).Returns(fakeSaveResult);
            controller = new GroupsController(groupServiceMock.Object, Mock.Of <IExpenseService>());

            var result = controller.Put(null);

            Assert.IsTrue(result != null);
            Assert.IsInstanceOfType(result, typeof(BadRequestResult));
        }
예제 #17
0
        public void ModifyGroup_ValidGroup_ReturnsOk()
        {
            var fakeSaveResult = new SaveResultModel <Group>
            {
                Model   = null,
                Success = true
            };

            var groupServiceMock = new Mock <IGroupService>();

            groupServiceMock.Setup(m => m.ModifyGroup(It.IsAny <Group>())).Returns(fakeSaveResult);
            controller = new GroupsController(groupServiceMock.Object, Mock.Of <IExpenseService>());

            var result = controller.Put(new Group {
                Name = "Group"
            });

            Assert.IsTrue(result != null);
            Assert.IsInstanceOfType(result, typeof(OkNegotiatedContentResult <Group>));
        }
예제 #18
0
        public void Save_InvalidProject_ReturnsFailure()
        {
            // setup
            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };

            currentUser.Claims = new string[] { Claims.ProjectEdit };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new ProjectModule(_dbContext, _projectValidator, _createProjectCommand, _deleteProjectCommand, _projectRepo, _logFileRepo, _requestRepo, _projectRequestAggregateRepo))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );

            _projectValidator.Validate(Arg.Any <ProjectModel>()).Returns(new ValidationResult("error"));

            // execute
            var response = browser.Post(Actions.Project.Save, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("Name", "password");
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            // check the result
            SaveResultModel result = JsonConvert.DeserializeObject <SaveResultModel>(response.Body.AsString());

            Assert.AreEqual("0", result.Id);
            Assert.IsFalse(result.Success);
            Assert.AreEqual(1, result.Messages.Length);

            // the project should not have been added
            _createProjectCommand.DidNotReceive().Execute(Arg.Any <ProjectModel>());
        }
예제 #19
0
        public void RemoveFriend_Validate_IfEliminateFriendNotExitingAsFriend()
        {
            User userPrincipal = new User();

            userPrincipal.Id          = 1;
            userPrincipal.Username    = "******";
            userPrincipal.Email       = "*****@*****.**";
            userPrincipal.PhoneNumber = "514111111";

            User friendOfUser = new User();

            friendOfUser.Id          = 2;
            friendOfUser.Username    = "******";
            friendOfUser.Email       = "*****@*****.**";
            friendOfUser.PhoneNumber = "514111111";

            User notFriendOfUser = new User();

            notFriendOfUser.Id          = 2;
            notFriendOfUser.Username    = "******";
            notFriendOfUser.Email       = "*****@*****.**";
            notFriendOfUser.PhoneNumber = "514111112";

            userPrincipal.Friends = new List <User>();
            userPrincipal.Friends.Add(friendOfUser);

            SetupMocks(new List <User> {
                userPrincipal,
                friendOfUser,
                notFriendOfUser
            });

            SaveResultModel <User> result = _userService.RemoveFriend(userPrincipal.Username, notFriendOfUser.Username);
            User UserModified             = _userService.GetUser(userPrincipal.Id);

            Assert.IsFalse(result.Success);
            Assert.IsTrue(UserModified.Friends.Count == 1);
        }
예제 #20
0
        public void PutExpense_ErrorUpdateExpense_ReturnBadRequest()
        {
            var fakeSaveResult = new SaveResultModel <Expense>
            {
                Model         = null,
                Success       = false,
                ErrorMessages = new List <string> {
                    "error."
                }
            };

            var expenseServiceMock = new Mock <IExpenseService>();
            var groupServiceMock   = new Mock <IGroupService>();

            groupServiceMock.Setup(m => m.GetGroup(It.IsAny <int>())).Returns(new Group());
            expenseServiceMock.Setup(m => m.UpdateExpense(It.IsAny <Expense>())).Returns(fakeSaveResult);
            controller = new GroupsController(groupServiceMock.Object, expenseServiceMock.Object);

            var result = controller.PutExpense(10, 5, new Expense());

            Assert.IsTrue(result != null);
            Assert.IsInstanceOfType(result, typeof(BadRequestErrorMessageResult));
        }
예제 #21
0
        public void CreateUser_Validate_ShouldDetectExistingUser()
        {
            SetupMocks(new List <User> {
                new User()
                {
                    Id          = 101,
                    Username    = "******",
                    Password    = "******",
                    Currency    = Models.Enums.Currency.CAD,
                    PhoneNumber = "51878928"
                }
            });
            User userToSave = new User();

            userToSave.Id          = 1;
            userToSave.Username    = "******";
            userToSave.Password    = "******";
            userToSave.Currency    = Models.Enums.Currency.CAD;
            userToSave.PhoneNumber = "51878928";
            SaveResultModel <User> result = _userService.CreateUser(userToSave);

            Assert.IsFalse(result.Success);
        }
        public void Save_OnSaveValidationError_ErrorReturnedInResponse()
        {
            int    projectId        = new Random().Next(1, 100);
            string exceptionMessage = Guid.NewGuid().ToString();

            // setup
            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };

            currentUser.Claims = new string[] { Claims.ProjectEdit };
            _createProjectRequestAggregateCommand.When(x => x.Execute(Arg.Any <ProjectRequestAggregateModel>()))
            .Do((c) => { throw new ValidationException(exceptionMessage); });
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new ProjectRequestAggregateModule(_dbContext, _createProjectRequestAggregateCommand, _deleteProjectRequestAggregateCommand))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );
            // execute
            var url      = Actions.ProjectRequestAggregate.Save();
            var response = browser.Post(url, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("projectId", projectId.ToString());
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            SaveResultModel result = JsonConvert.DeserializeObject <SaveResultModel>(response.Body.AsString());

            Assert.IsFalse(result.Success);
            _createProjectRequestAggregateCommand.Received(1).Execute(Arg.Any <ProjectRequestAggregateModel>());
            _dbContext.Received(1).Rollback();
        }
예제 #23
0
        public ActionResult Save(FormCollection formCollection)
        {
            string id                = formCollection["Id"];
            bool   enableCaptcha     = Convert.ToBoolean(formCollection["EnableCaptcha"]);
            string thankYouMessage   = formCollection["ThankYouMessage"];
            string redirectUrl       = formCollection["RedirectUrl"];
            string emailAddress      = formCollection["EmailAddress"];
            string contentBlockTitle = formCollection["ContentBlockTitle"];
            string formUrl           = formCollection["FormUrl"];

            #region Validate Captcha

            if (enableCaptcha)
            {
                var recaptchaVerificationHelper = this.GetRecaptchaVerificationHelper(captchaSettings.Value.PrivateKey);

                if (string.IsNullOrEmpty(recaptchaVerificationHelper.Response))
                {
                    var result = new SaveResultModel
                    {
                        Success     = false,
                        Message     = T(KoreCmsLocalizableStrings.ContentBlocks.FormBlock.PleaseEnterCaptcha).Text,
                        RedirectUrl = Request.UrlReferrer != null?Request.UrlReferrer.ToString() : Url.Content("~/")
                    };

                    if (Request.IsAjaxRequest())
                    {
                        return(Json(result));
                    }

                    return(View("Kore.Web.ContentManagement.Areas.Admin.ContentBlocks.Views.FormBlock.SaveResult", result));
                }

                var recaptchaVerificationResult = recaptchaVerificationHelper.VerifyRecaptchaResponse();

                if (recaptchaVerificationResult != RecaptchaVerificationResult.Success)
                {
                    var result = new SaveResultModel
                    {
                        Success     = false,
                        Message     = T(KoreCmsLocalizableStrings.ContentBlocks.FormBlock.PleaseEnterCorrectCaptcha).Text,
                        RedirectUrl = Request.UrlReferrer != null?Request.UrlReferrer.ToString() : Url.Content("~/")
                    };

                    if (Request.IsAjaxRequest())
                    {
                        return(Json(result));
                    }

                    return(View("Kore.Web.ContentManagement.Areas.Admin.ContentBlocks.Views.FormBlock.SaveResult", result));
                }
            }

            #endregion Validate Captcha

            var values = Request.Form.AllKeys.ToDictionary(key => key, key => (object)formCollection[key]);

            // Remove some items
            values.Remove("Id");
            values.Remove("EnableCaptcha");
            values.Remove("captcha_challenge");
            values.Remove("captcha_response");
            values.Remove("ThankYouMessage");
            values.Remove("RedirectUrl");
            values.Remove("EmailAddress");
            values.Remove("ContentBlockTitle");
            values.Remove("X-Requested-With");
            values.Remove("__RequestVerificationToken");

            var subject = contentBlockTitle;

            #region Render Email Body

            string body = string.Empty;

            var viewEngineResult = ViewEngines.Engines.FindView(ControllerContext, "MessageTemplate", null);

            // If someone has provided a custom template (see LocationFormatProvider)
            if (viewEngineResult.View != null)
            {
                body = RenderRazorPartialViewToString("MessageTemplate", values);
            }
            else
            {
                body = RenderRazorPartialViewToString(
                    "Kore.Web.ContentManagement.Areas.Admin.ContentBlocks.Views.FormBlock.MessageTemplate",
                    values);
            }

            #endregion Render Email Body

            #region Create Mail Message

            var mailMessage = new MailMessage
            {
                Subject         = subject,
                SubjectEncoding = Encoding.UTF8,
                Body            = body,
                BodyEncoding    = Encoding.UTF8,
                IsBodyHtml      = true
            };
            //mailMessage.To.Add(emailAddress);

            if (Request.Files.Count > 0)
            {
                foreach (var fileName in Request.Files.AllKeys)
                {
                    var file = Request.Files[fileName];
                    if (file != null && file.ContentLength > 0)
                    {
                        mailMessage.Attachments.Add(new Attachment(file.InputStream, file.FileName));
                    }
                }
            }

            #endregion Create Mail Message

            #region Custom Form Processing

            try
            {
                foreach (var processor in processors)
                {
                    processor.Process(formCollection, mailMessage);
                }
            }
            catch (Exception x)
            {
                Logger.Error("Error while trying to process form block.", x);
            }

            #endregion Custom Form Processing

            if (!string.IsNullOrWhiteSpace(formUrl))
            {
                #region Custom Form URL

                var content = new FormUrlEncodedContent(
                    formCollection.AllKeys.ToDictionary(k => k, v => formCollection[v]));

                HttpResponseMessage httpResponseMessage;
                using (var client = new HttpClient())
                {
                    httpResponseMessage = client.PostAsync(formUrl, content).Result;
                }

                bool success = httpResponseMessage.IsSuccessStatusCode;
                var  result  = new SaveResultModel
                {
                    Success = success,
                    Message = success
                        ? thankYouMessage
                        : string.Format("{0}: {1}", (int)httpResponseMessage.StatusCode, httpResponseMessage.ReasonPhrase),
                    RedirectUrl = !string.IsNullOrWhiteSpace(redirectUrl) ? redirectUrl : Url.Content("~/")
                };

                if (Request.IsAjaxRequest())
                {
                    return(Json(result));
                }

                return(View("Kore.Web.ContentManagement.Areas.Admin.ContentBlocks.Views.FormBlock.SaveResult", result));

                #endregion Custom Form URL
            }
            else
            {
                #region Default Behaviour (Email)

                try
                {
                    // Clear the Recipients list in case it's been set by an IFormBlockProcessor
                    mailMessage.To.Clear();
                    mailMessage.To.Add(emailAddress);
                    emailSender.Send(mailMessage);

                    var result = new SaveResultModel
                    {
                        Success     = true,
                        Message     = thankYouMessage,
                        RedirectUrl = !string.IsNullOrWhiteSpace(redirectUrl) ? redirectUrl : Url.Content("~/")
                    };

                    if (Request.IsAjaxRequest())
                    {
                        return(Json(result));
                    }

                    return(View("Kore.Web.ContentManagement.Areas.Admin.ContentBlocks.Views.FormBlock.SaveResult", result));
                }
                catch (Exception x)
                {
                    Logger.Error(x.Message, x);

                    var result = new SaveResultModel
                    {
                        Success     = false,
                        Message     = x.GetBaseException().Message,
                        RedirectUrl = Request.UrlReferrer != null?Request.UrlReferrer.ToString() : Url.Content("~/")
                    };

                    if (Request.IsAjaxRequest())
                    {
                        return(Json(result));
                    }

                    return(View("Kore.Web.ContentManagement.Areas.Admin.ContentBlocks.Views.FormBlock.SaveResult", result));
                }

                #endregion Default Behaviour (Email)
            }
        }