public void SubmitUserQuestionnaire_WhenClientIsDeleted_ThrowsException()
 {
     try {
         // Arrange
         var client = new ClientModel {
             Id = 1, IsDeleted = true
         };
         var user = new UserInfoModel {
             Id = 1, Client = client
         };
         var questionnaire = new UserQuestionnaireModel {
             UserId = user.Id
         };
         _mockDb.Setup(m => m.Users)
         .Returns(TestHelper.GetQueryableMockDbSet(new List <UserInfoModel> {
             user
         }));
         // Act
         _service.SubmitUserQuestionnaire(questionnaire);
     } catch {
         // Assert
         _mockDb.Verify(m => m.UserQuestionnaires.Add(It.IsAny <UserQuestionnaireModel>()), Times.Never,
                        "Expected NO questionnare to be added");
         _mockDb.Verify(m => m.SaveChanges(), Times.Never,
                        "Expected NO db changes to be saved");
         _mockMessageService.Verify(m =>
                                    m.SendQuestionnaireToClient(It.IsAny <UserQuestionnaireModel>()), Times.Never,
                                    "Expected NO message sent to client");
     }
 }
Beispiel #2
0
        /// <summary>
        /// Gets placeholder values from questionnaires
        /// </summary>
        public string GetPlaceHolderValueForQuestionnaire(string placeholder, UserQuestionnaireModel questionnaire)
        {
            switch (placeholder)
            {
            case HeaderPlaceholder:
                return(_resourceProvider.EmailHeader);

            case FooterPlaceholder:
                return(_resourceProvider.EmailFooter);

            case ClientNamePlaceholder:
                return(questionnaire.Client.Name);

            case MemberCodePlaceholder:
                return(questionnaire.Client.MemberCode);

            case FirstNamePlaceholder:
                return(questionnaire.User.FirstName);

            case LastNamePlaceholder:
                return(questionnaire.User.LastName);

            case PhoneNumberPlaceholder:
                return(questionnaire.User.PhoneNumber);

            case QuestionnairePlaceholder:
                return(questionnaire.ToStringQuestionsAndAnswers());
            }
            return(string.Empty);
        }
 public void Post_WhenError_LogsAndReturnsError() {
     // Arrange
     var questionnaire = new UserQuestionnaireModel { };
     var exception = new ApplicationException("An error has occurred.");
     _mockUserService.Setup(m => m.SubmitUserQuestionnaire(It.IsAny<UserQuestionnaireModel>())).Throws(exception);
     // Act
     var response = _controller.Post(questionnaire);
     // Assert
     Assert.AreEqual(HttpStatusCode.InternalServerError, response.StatusCode, "Expected InternalServerError");
     _mockUserService.Verify(m => m.SubmitUserQuestionnaire(questionnaire), Times.Once, "Expected questionnaire to be submitted");
     _mockLoggingService.Verify(m => m.LogCriticalError(exception), Times.Once, "Expected critical error to be logged.");
 }
        public void IsFit2Work_YesConditions(string qaData)
        {
            // Arrange
            var q = new UserQuestionnaireModel {
                QuestionsAndAnswersData = qaData
            };
            // Act
            var result = q.IsFit2Work;

            // Assert
            Assert.IsTrue(result);
        }
        public void QuestionsAndAnswersData_WithoutData_DeserializesToEmptyList()
        {
            // Arrange
            var q = new UserQuestionnaireModel {
                QuestionsAndAnswersData = string.Empty
            };
            // Act
            var qa = q.QuestionsAndAnswers;

            // Assert
            Assert.IsNotNull(qa);
            Assert.AreEqual(0, qa.Count, "Expected 0 question answers");
        }
Beispiel #6
0
        public HttpResponseMessage Post(UserQuestionnaireModel questionnaire)
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK);

            try {
                var result = _userService.SubmitUserQuestionnaire(questionnaire);
                response.Content = new StringContent(JsonConvert.SerializeObject(result));
            } catch (Exception ex) {
                _loggingService.LogCriticalError(ex);
                response = Request.CreateErrorResponse(
                    HttpStatusCode.InternalServerError, ex);
            }
            return(response);
        }
Beispiel #7
0
        private void SendUserQuestionnaire(UserQuestionnaireModel questionnaire)
        {
            var result = _messageService.SendQuestionnaireToClient(questionnaire);

            if (!result.IsOk)
            {
                throw new ApplicationException(
                          $"Failed to send questionnaire ({questionnaire.Id}) to {result.Recipient}.", result.Exception);
            }
            // Log each email sent otherwise we have no auditing
            _loggingService.LogMessage(
                $"Questionnaire ({questionnaire.Id}) for client {questionnaire.Client.Name} sent to {result.Recipient}.",
                result.MessageContent);
        }
 public void Post_NotFitToWork_ReturnsOk() {
     // Arrange
     var questionnaire = new UserQuestionnaireModel { };
     var questionnaireResult = new QuestionnaireResult { IsFitToWork = false, UserMessage = "NotFitToWork" };
     _mockUserService.Setup(m => m.SubmitUserQuestionnaire(questionnaire))
         .Returns(questionnaireResult);
     // Act
     var response = _controller.Post(questionnaire);
     // Assert
     Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "Expected OK");
     var result = JsonConvert.DeserializeObject<QuestionnaireResult>(response.Content.ReadAsStringAsync().Result);
     Assert.AreEqual(questionnaireResult.IsFitToWork, result.IsFitToWork);
     Assert.AreEqual(questionnaireResult.UserMessage, result.UserMessage);
     _mockUserService.Verify(m => m.SubmitUserQuestionnaire(questionnaire), Times.Once, "Expected questionnaire to be submitted");
 }
Beispiel #9
0
        private string PopulatePlaceHoldersForQuestionnaire(string content,
                                                            UserQuestionnaireModel questionnaire)
        {
            var result = content;

            foreach (var placeholder in _placeHolders)
            {
                if (content.Contains(placeholder))
                {
                    result = result.Replace(placeholder,
                                            GetPlaceHolderValueForQuestionnaire(placeholder, questionnaire));
                }
            }
            return(result);
        }
Beispiel #10
0
        public QuestionnaireResult SubmitUserQuestionnaire(UserQuestionnaireModel questionnaire)
        {
            QuestionnaireResult result = new QuestionnaireResult();

            try {
                CreateUserQuestionnaire(questionnaire);
                SendUserQuestionnaire(questionnaire);
                // Set the result for sending back to the user
                result.IsFitToWork = questionnaire.IsFit2Work;
                result.UserMessage = questionnaire.IsFit2Work
                    ? _resourceProvider.UserPrimaryMessageText
                    : _resourceProvider.UserSecondaryMessageText;
            } catch (Exception ex) {
                throw new ApplicationException($"Failed to submit questionniare ({questionnaire}).", ex);
            }
            return(result);
        }
 public void SubmitUserQuestionnaire_WithoutUser_ThrowsException()
 {
     try {
         // Arrange
         var questionnaire = new UserQuestionnaireModel();
         // Act
         _service.SubmitUserQuestionnaire(questionnaire);
     } catch {
         // Assert
         _mockDb.Verify(m => m.UserQuestionnaires.Add(It.IsAny <UserQuestionnaireModel>()), Times.Never,
                        "Expected NO questionnare to be added");
         _mockDb.Verify(m => m.SaveChanges(), Times.Never,
                        "Expected NO db changes to be saved");
         _mockMessageService.Verify(m =>
                                    m.SendQuestionnaireToClient(It.IsAny <UserQuestionnaireModel>()), Times.Never,
                                    "Expected NO message sent to client");
     }
 }
        public void QuestionsAndAnswersData_DeserializesToList(string qaData, string answers)
        {
            // Arrange
            var q = new UserQuestionnaireModel {
                QuestionsAndAnswersData = qaData
            };
            var expectedAnswers = answers.Split(',');
            // Act
            var qa = q.QuestionsAndAnswers;

            // Assert
            Assert.IsNotNull(qa);
            Assert.AreEqual(expectedAnswers.Length, qa.Count, "Expected count to match");
            for (var i = 0; i < expectedAnswers.Length; i++)
            {
                Assert.AreEqual(expectedAnswers[i], qa[i].Answer,
                                $"Expected answer {i} to match");
            }
        }
Beispiel #13
0
        public MessageResult SendQuestionnaireToClient(UserQuestionnaireModel questionnaire)
        {
            var    user = questionnaire.User;
            string from = _configurationProvider.ClientEmailFromAddress;
            string to   = questionnaire.IsFit2Work ?
                          questionnaire.Client.PrimaryEmailAddress :
                          questionnaire.Client.SecondaryEmailAddress;
            string subject = PopulatePlaceHoldersForQuestionnaire(
                questionnaire.IsFit2Work ?
                _resourceProvider.PrimaryEmailSubjectFormat :
                _resourceProvider.SecondaryEmailSubjectFormat,
                questionnaire);
            string body = PopulatePlaceHoldersForQuestionnaire(
                questionnaire.IsFit2Work ?
                _resourceProvider.PrimaryEmailBodyFormat :
                _resourceProvider.SecondaryEmailBodyFormat,
                questionnaire);
            var result = _emailProvider.SendMail(from, to, subject, body);

            result.MessageContent = body;
            return(result);
        }
Beispiel #14
0
 private void CreateUserQuestionnaire(UserQuestionnaireModel questionnaire)
 {
     questionnaire.User = Fit2WorkDb.Users.Include("Client")
                          .FirstOrDefault(u => u.Id == questionnaire.UserId);
     if (questionnaire.User == null)
     {
         throw new ApplicationException(
                   $"Failed to find user ({questionnaire.User.Id}) for questionnaire.");
     }
     if (questionnaire.User.Client == null)
     {
         throw new ApplicationException(
                   $"Failed to find client for user ({questionnaire.User.Id}) for questionnaire.");
     }
     questionnaire.Client = questionnaire.User.Client;
     if (questionnaire.User.Client.IsDeleted)
     {
         throw new ApplicationException(
                   $"Failed to find active client ({questionnaire.User.Client.Id}) for questionnaire.");
     }
     questionnaire.CreatedDate = DateTime.UtcNow;
     Fit2WorkDb.UserQuestionnaires.Add(questionnaire);
     Fit2WorkDb.SaveChanges();
 }
        public void SubmitUserQuestionnaire_NotFitToWork_Success()
        {
            // Arrange
            var client = new ClientModel {
                Id = 1, IsDeleted = false
            };
            var user = new UserInfoModel {
                Id = 1, Client = client
            };
            var questionnaire = new UserQuestionnaireModel {
                UserId = user.Id, QuestionsAndAnswers = { new UserAnswerModel {
                                                              Answer = "Yes"
                                                          } }
            };

            _mockDb.Setup(m => m.Users).Returns(TestHelper.GetQueryableMockDbSet(new List <UserInfoModel> {
                user
            }));
            _mockMessageService.Setup(m => m.SendQuestionnaireToClient(It.IsAny <UserQuestionnaireModel>())).Returns(new MessageResult());
            // Act
            var result = _service.SubmitUserQuestionnaire(questionnaire);

            // Assert
            Assert.IsNotNull(result);
            Assert.IsFalse(result.IsFitToWork, "Expected NOT result.IsFitToWork");
            Assert.AreEqual("UserSecondaryMessageText", result.UserMessage, "Expected UserSecondaryMessageText");
            Assert.IsTrue(questionnaire.CreatedDate > DateTime.MinValue, "Expected questionnaire created date to be set");
            _mockDb.Verify(m => m.UserQuestionnaires.Add(It.IsAny <UserQuestionnaireModel>()), Times.Once,
                           "Expected questionnare to be added");
            _mockDb.Verify(m => m.SaveChanges(), Times.Once, "Expected db changes to be saved");
            _mockMessageService.Verify(m =>
                                       m.SendQuestionnaireToClient(It.IsAny <UserQuestionnaireModel>()), Times.Once,
                                       "Expected message sent to client");
            _mockLoggingService.Verify(m => m.LogMessage(It.IsAny <string>(), It.IsAny <string>()), Times.Once,
                                       "Expeced message to be logged");
        }