QuestionGroupController extends QuestionnaireController { public String addQuestion(QuestionGroupForm questionGroupForm, RequestContext requestContext) { MessageContext context = requestContext.getMessageContext(); boolean result = validateQuestion(questionGroupForm, context); if (result) { questionGroupForm.addCurrentSection(); } return result? "success": "failure"; } @SuppressWarnings({"UnusedDeclaration"})  QuestionGroupController();  QuestionGroupController(QuestionnaireServiceFacade questionnaireServiceFacade); @RequestMapping("/viewQuestionGroups.ftl") String getAllQuestionGroups(ModelMap model, HttpServletRequest request); @RequestMapping("/viewQuestionGroupDetail.ftl") String getQuestionGroup(ModelMap model, HttpServletRequest httpServletRequest); @RequestMapping(value="/getHiddenVisibleQuestions.ftl", method=RequestMethod.POST) @ResponseBody Map<String, Map<Integer, Boolean>> getHiddenVisibleQuestions(
            @RequestParam Integer questionId, @RequestParam String response); @RequestMapping(value="/hideAttachedQuestions.ftl", method=RequestMethod.POST) @ResponseBody Map<String, List<String>> hideAttachedQuestions(
            @RequestParam String questionsId, @RequestParam String sectionsId); @SuppressWarnings({"ThrowableInstanceNeverThrown"}) String defineQuestionGroup(QuestionGroupForm questionGroupForm, RequestContext requestContext, boolean createMode); Map<String, String> getAllQgEventSources(); QuestionLinkDetail setQuestionLinkDetail(QuestionGroupForm questionGroupForm, String sourceQuestionId, 
            String affectedQuestionId, String value, String additionalValue, String linkType, String linkTypeDisplay); SectionLinkDetail setSectionLinkDetail(QuestionGroupForm questionGroupForm, String sourceQuestionId, 
            String affectedSectionName, String value, String additionalValue, String linkType, String linkTypeDisplay); SectionQuestionDetail findQuestionDetailById(QuestionGroupDetail questionGroupDetail, String questionId); SectionQuestionDetail findQuestionDetailByNickname(QuestionGroupDetail questionGroupDetail, String nickname); SectionDetail findSectionDetailByName(QuestionGroupDetail questionGroupDetail, String sectionName); List<QuestionLinkDetail> setFilledQuestionDetailForQuestionLinks(List<QuestionLinkDetail> questionLinkDetails, QuestionGroupDetail questionGroupDetail); List<SectionLinkDetail> setFilledSectionDetailForQuestionLinks(List<SectionLinkDetail> sectionLinkDetails, QuestionGroupDetail questionGroupDetail); String addLink(QuestionGroupForm questionGroupForm,
            String sourceQuestionId, String linkType, String appliesTo,
            String affectedQuestionId, String affectedSectionName,
            String value, String additionalValue, Map<String, String> linkTypes, RequestContext requestContext); String removeLink(QuestionGroupForm questionGroupForm,
            String sourceQuestionId, String affectedQuestionId, String affectedSectionName, String value, String additionalValue, RequestContext requestContext); String addSection(QuestionGroupForm questionGroupForm, RequestContext requestContext); String deleteSection(QuestionGroupForm questionGroupForm, String sectionName); String deleteQuestion(QuestionGroupForm questionGroupForm, String sectionName, String questionId); String moveQuestionUp(QuestionGroupForm questionGroupForm, String sectionName, String questionId); String moveQuestionDown(QuestionGroupForm questionGroupForm, String sectionName, String questionId); String moveSectionUp(QuestionGroupForm questionGroupForm, String sectionName); String moveSectionDown(QuestionGroupForm questionGroupForm, String sectionName); List<SectionQuestionDetail> getAllSectionQuestions(); List<SectionQuestionDetail> getAllSectionQuestions(QuestionGroupForm questionGroupForm); Map<String, String> getAllLinkTypes(); String saveQuestionnaire(QuestionGroupDetails questionGroupDetails, int questionGroupIndex, RequestContext requestContext); String addQuestion(QuestionGroupForm questionGroupForm, RequestContext requestContext); String addSmartChoiceTag(QuestionGroupForm questionGroupForm, RequestContext requestContext, int choiceIndex);  }
@Test public void testAddQuestion() { QuestionGroupForm questionGroupForm = getQuestionGroupForm(TITLE, "Create.Client", "Default"); questionGroupForm.getCurrentQuestion().setText("Question1"); questionGroupForm.getCurrentQuestion().setType("freeText"); when(requestContext.getMessageContext()).thenReturn(messageContext); String result = questionGroupController.addQuestion(questionGroupForm, requestContext); assertThat(result, is("success")); verify(requestContext, times(1)).getMessageContext(); }
@Test public void testAddQuestionForEmptyTitle() { QuestionGroupForm questionGroupForm = getQuestionGroupForm(TITLE, "Create.Client", "Default"); questionGroupForm.setValidator(validator); questionGroupForm.getCurrentQuestion().setText(null); questionGroupForm.getCurrentQuestion().setType("freeText"); when(messageContext.hasErrorMessages()).thenReturn(true); when(requestContext.getMessageContext()).thenReturn(messageContext); String result = questionGroupController.addQuestion(questionGroupForm, requestContext); assertThat(result, is("failure")); verify(requestContext, times(1)).getMessageContext(); verify(messageContext).addMessage(argThat(new MessageMatcher("NotNull.QuestionGroupForm.currentQuestion.text"))); }
@Test public void testAddQuestionForEmptyType() { QuestionGroupForm questionGroupForm = getQuestionGroupForm(TITLE, "Create.Client", "Default"); questionGroupForm.setValidator(validator); questionGroupForm.getCurrentQuestion().setText(TITLE); questionGroupForm.getCurrentQuestion().setType(null); when(messageContext.hasErrorMessages()).thenReturn(true); when(requestContext.getMessageContext()).thenReturn(messageContext); String result = questionGroupController.addQuestion(questionGroupForm, requestContext); assertThat(result, is("failure")); verify(requestContext, times(1)).getMessageContext(); verify(messageContext).addMessage(argThat(new MessageMatcher("NotNull.QuestionGroupForm.currentQuestion.type"))); }
@Test public void testAddQuestionForDuplicateTitle() { QuestionGroupForm questionGroupForm = getQuestionGroupForm(TITLE, "Create.Client", "Default"); questionGroupForm.setValidator(validator); questionGroupForm.getCurrentQuestion().setText(TITLE); questionGroupForm.getCurrentQuestion().setType("freeText"); when(questionnaireServiceFacade.isDuplicateQuestion(TITLE)).thenReturn(true); when(requestContext.getMessageContext()).thenReturn(messageContext); String result = questionGroupController.addQuestion(questionGroupForm, requestContext); assertThat(result, is("failure")); verify(requestContext, times(1)).getMessageContext(); verify(messageContext).addMessage(argThat(new MessageMatcher("questionnaire.error.question.duplicate"))); }
@Test public void testAddQuestionForInvalidAnswerChoices() { QuestionGroupForm questionGroupForm = getQuestionGroupForm(TITLE, "Create.Client", "Default"); questionGroupForm.setValidator(validator); questionGroupForm.getCurrentQuestion().setText(TITLE); questionGroupForm.getCurrentQuestion().setType("singleSelect"); questionGroupForm.getCurrentQuestion().setCurrentChoice("Choice1"); questionGroupForm.getCurrentQuestion().addAnswerChoice(); when(requestContext.getMessageContext()).thenReturn(messageContext); String result = questionGroupController.addQuestion(questionGroupForm, requestContext); assertThat(result, is("failure")); verify(requestContext, times(1)).getMessageContext(); verify(messageContext).addMessage(argThat(new MessageMatcher("questionnaire.error.question.choices"))); }
@Test public void testAddQuestionForInvalidNumericBounds() { QuestionGroupForm questionGroupForm = getQuestionGroupForm(TITLE, "Create.Client", "Default"); questionGroupForm.setValidator(validator); questionGroupForm.getCurrentQuestion().setText(TITLE); questionGroupForm.getCurrentQuestion().setType("number"); questionGroupForm.getCurrentQuestion().setNumericMin(100); questionGroupForm.getCurrentQuestion().setNumericMax(10); when(requestContext.getMessageContext()).thenReturn(messageContext); String result = questionGroupController.addQuestion(questionGroupForm, requestContext); assertThat(result, is("failure")); verify(requestContext, times(1)).getMessageContext(); verify(messageContext).addMessage(argThat(new MessageMatcher(QuestionnaireConstants.INVALID_NUMERIC_BOUNDS))); }