コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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);
        }