/// <summary> /// Метод для подготовки и маппинга модели <see cref="UserFeedbackRequestModel"/> в <see cref="EmailRequestModel"/>. /// </summary> /// <param name="input"></param> /// <returns></returns> public EmailRequestModel PrepareUserFeedbackRequestForEmailService(UserFeedbackRequestModel input) { if (input == null) { throw new ArgumentNullException(nameof(input)); } var emailRequestModel = _mapper.Map <EmailRequestModel>(input); // из файла с конфигом достаем настройки аккаунта emailRequestModel.EmailAccount = new EmailAccountModel { EmailFrom = _emailServiceConfigurationModel.EmailFrom, Id = _emailServiceConfigurationModel.Id, HiddenEmail = _emailServiceConfigurationModel.HiddenEmail, InputEnableSSL = _emailServiceConfigurationModel.InputEnableSSL, InputHost = _emailServiceConfigurationModel.InputHost, Login = _emailServiceConfigurationModel.Login, OutputPort = _emailServiceConfigurationModel.OutputPort, Password = _emailServiceConfigurationModel.Password, UseDefaultCredentials = _emailServiceConfigurationModel.UseDefaultCredentials, OutputEnableSSL = _emailServiceConfigurationModel.OutputEnableSSL, OutputHost = _emailServiceConfigurationModel.OutputHost, InputPort = _emailServiceConfigurationModel.InputPort }; return(emailRequestModel); }
public UserFeedbackResultModel SendFeedback(UserFeedbackRequestModel input) { if (input == null) { throw new ArgumentNullException(nameof(input)); } // подготовка модели для отправки фидбека через почтовый сервис var emailRequestModel = PrepareUserFeedbackRequestForEmailService(input); // отправка фидбека через почтовый сервис var resultEmailModel = _emailService.Send(emailRequestModel); var feedbackResultModel = _mapper.Map <UserFeedbackResultModel>(resultEmailModel); return(feedbackResultModel); }
public IActionResult SendFeedback([FromBody] UserFeedbackRequestModel userFeedbackRequestModel) { try { if (userFeedbackRequestModel == null) { return(BadRequest("Запрос не содержит данных.")); } // валидируем и в случае наличия ошибок подготавливаем модель для ответа клиенту if (!ModelState.IsValid) { var modelsErrors = ModelState.Values.SelectMany(v => v.Errors); var errorMessages = _validationService.ValidateRequest(modelsErrors); // отправляем код 400 и результат валидации return(BadRequest(errorMessages)); } // отправляем фидбек var resultSendFeedback = _userSupportService.SendFeedback(userFeedbackRequestModel); // если сообщение не отправлено, подготавливаем ответ с текстом ошибки if (!resultSendFeedback.IsSended) { var errorMessages = _validationService.PrepareErrorResult(resultSendFeedback); return(BadRequest(errorMessages)); } // отправляем код 200 и результат отправки сообщения return(Ok(resultSendFeedback)); } catch (Exception ex) { // log return(BadRequest(ex)); } }
public void SendFeedback_ReturnsModelWithResult_ShouldBeReturnsError() { // Arrange var fixture = new Fixture(); fixture.Customize(new AutoMoqCustomization()); var emailServiceConfigurationModel = fixture.Freeze <Mock <IOptions <EmailServiceConfigurationModel> > >(); var userFeedbackRequestModel = new UserFeedbackRequestModel { EmailTo = "EmailTo", Subject = "Subject", TextBody = "TextBody", UserName = "******" }; var emailAccountModel = new EmailAccountModel { EmailFrom = emailServiceConfigurationModel.Object.Value.EmailFrom, Id = emailServiceConfigurationModel.Object.Value.Id, HiddenEmail = emailServiceConfigurationModel.Object.Value.HiddenEmail, InputEnableSSL = emailServiceConfigurationModel.Object.Value.InputEnableSSL, InputHost = emailServiceConfigurationModel.Object.Value.InputHost, Login = emailServiceConfigurationModel.Object.Value.Login, OutputPort = emailServiceConfigurationModel.Object.Value.OutputPort, Password = emailServiceConfigurationModel.Object.Value.Password, UseDefaultCredentials = emailServiceConfigurationModel.Object.Value.UseDefaultCredentials, OutputEnableSSL = emailServiceConfigurationModel.Object.Value.OutputEnableSSL, OutputHost = emailServiceConfigurationModel.Object.Value.OutputHost, InputPort = emailServiceConfigurationModel.Object.Value.InputPort }; var emailRequestModel = new EmailRequestModel { EmailTo = "EmailTo", EmailAccount = emailAccountModel }; var userSupportService = fixture.Freeze <Mock <IUserSupportService> >(); // new UserSupportService(mapper.Object, emailService.Object, emailServiceConfigurationModel.Object); var emailService = fixture.Freeze <Mock <IEmailService> >(); emailService.Setup(s => s.Send(emailRequestModel)) .Returns(new EmailResultModel { IsSended = true, Message = "Сообщение успешно отправлено." }); userSupportService.Setup(s => s.PrepareUserFeedbackRequestForEmailService(userFeedbackRequestModel)) .Returns(emailRequestModel); fixture.Inject(emailService); fixture.Inject(userSupportService); // Act var resultService = fixture.Create <IUserSupportService>(); var result = resultService.SendFeedback(userFeedbackRequestModel); // Assert Assert.AreEqual(false, result.IsSended); }