package org.mifos.application.questionnaire.struts;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import junit.framework.Assert;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mifos.application.util.helpers.ActionForwards;
import org.mifos.platform.questionnaire.service.QuestionDetail;
import org.mifos.platform.questionnaire.service.QuestionGroupDetail;
import org.mifos.platform.questionnaire.service.QuestionType;
import org.mifos.platform.questionnaire.service.QuestionnaireServiceFacade;
import org.mifos.platform.questionnaire.service.SectionDetail;
import org.mifos.platform.questionnaire.service.SectionQuestionDetail;
import org.mifos.platform.questionnaire.service.dtos.EventSourceDto;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class QuestionnaireFlowAdapterTest {
@Mock
private QuestionResponseCapturer questionForm;
@Mock
private ActionMapping mapping;
@Mock
private ActionForward captureResponseActFwd;
@Mock
HttpServletRequest request;
@Mock
private ActionForward schedulePreview_successFwd;
@Mock
QuestionnaireServiceFacadeLocator serviceLocator;
@Mock
QuestionnaireServiceFacade questionnaireServiceFacade;
@Before
public void setUp() {
/* questionForm = new QuestionResponseCapturer() {
private List<QuestionGroupDetail> questionGroups;
@Override
public void setQuestionGroups(List<QuestionGroupDetail> questionGroups) {
this.questionGroups = questionGroups;
}
@Override
public List<QuestionGroupDetail> getQuestionGroups() {
return this.questionGroups;
}
};*/
}
@Test
public void testShouldFetchQuestions() {
QuestionnaireFlowAdapter createLoanQuestionnaire =
new QuestionnaireFlowAdapter("Create","Loan",
ActionForwards.schedulePreview_success,
"clientsAndAccounts.ftl", serviceLocator);
List<QuestionGroupDetail> applicableGroups = getQuestionGroups();
when(mapping.findForward("captureQuestionResponses")).thenReturn(captureResponseActFwd);
when(mapping.findForward("schedulePreview_success")).thenReturn(schedulePreview_successFwd);
when(serviceLocator.getService(request)).thenReturn(questionnaireServiceFacade);
when(request.getRequestURI()).thenReturn("/mifos/loanAccountAction.do");
when(request.getContextPath()).thenReturn("/mifos");
when(questionnaireServiceFacade.getQuestionGroups("Create", "Loan")).thenReturn(applicableGroups);
ActionForward fwdTo = createLoanQuestionnaire.fetchAppliedQuestions(mapping, questionForm, request, ActionForwards.schedulePreview_success);
Assert.assertEquals(captureResponseActFwd, fwdTo);
//Assert.assertEquals(applicableGroups, questionForm.getQuestionGroups());
verify(questionForm).setQuestionGroups(applicableGroups);
verify(request).setAttribute("questionsHostForm", questionForm);
verify(request).setAttribute("origFlowRequestURI", "/loanAccountAction.do");
verify(request).setAttribute("cancelToURL", "clientsAndAccounts.ftl");
}
private List<QuestionGroupDetail> getQuestionGroups() {
List<QuestionDetail> questions = Arrays.asList(new QuestionDetail(12, "Question1", QuestionType.FREETEXT, true, true));
List<SectionDetail> section = Arrays.asList(getSectionDetailWithQuestions("Section1", questions, null, true));
QuestionGroupDetail questionGroup = getQuestionGroupDetail("Group1", "Create", "Loan", section);
return Arrays.asList(questionGroup);
}
private QuestionGroupDetail getQuestionGroupDetail(String title, String event, String source, List<SectionDetail> sections) {
return new QuestionGroupDetail(1, title, Arrays.asList(new EventSourceDto(event, source, null)), sections, true);
}
private SectionDetail getSectionDetailWithQuestions(String sectionName, List<QuestionDetail> questionDetails,
String value, boolean mandatory) {
SectionDetail section = new SectionDetail();
section.setName(sectionName);
List<SectionQuestionDetail> sectionQuestions = new ArrayList<SectionQuestionDetail>();
for (QuestionDetail questionDetail : questionDetails) {
SectionQuestionDetail sectionQuestion = new SectionQuestionDetail(questionDetail, mandatory);
sectionQuestion.setValue(value);
sectionQuestions.add(sectionQuestion);
}
section.setQuestionDetails(sectionQuestions);
return section;
}
public void testShouldCaptureResponses() {
}
public void testShouldAllowEditResponses() {
}
}