/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.platform.questionnaire.parsers; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; import java.io.InputStream; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mifos.platform.questionnaire.service.QuestionType; import org.mifos.platform.questionnaire.service.dtos.ChoiceDto; import org.mifos.platform.questionnaire.service.dtos.EventSourceDto; import org.mifos.platform.questionnaire.service.dtos.QuestionDto; import org.mifos.platform.questionnaire.service.dtos.QuestionGroupDto; import org.mifos.platform.questionnaire.service.dtos.SectionDto; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class QuestionGroupDefinitionParserTest { @Test public void shouldParseQuestionDefinitionXml() throws Exception { QuestionGroupDefinitionParser questionGroupDefinitionParser = new QuestionGroupDefinitionParserImpl(); String questionGroupDefXml = "/org/mifos/platform/questionnaire/QuestionGroupDefinition.xml"; InputStream inputStream = getClass().getResourceAsStream(questionGroupDefXml); QuestionGroupDto questionGroupDto = questionGroupDefinitionParser.parse(inputStream); assertQuestionGroupDto(questionGroupDto); EventSourceDto eventSourceDto = questionGroupDto.getEventSourceDtos().get(0); assertEventSource(eventSourceDto); List<SectionDto> sectionDtos = questionGroupDto.getSections(); assertSections(sectionDtos); } private void assertSections(List<SectionDto> sectionDtos) { assertThat(sectionDtos, is(notNullValue())); assertThat(sectionDtos.size(), is(2)); assertFirstSection(sectionDtos.get(0)); assertSecondSection(sectionDtos.get(1)); } private void assertFirstSection(SectionDto sectionDto) { assertThat(sectionDto.getName(), is("default")); assertThat(sectionDto.getOrder(), is(1)); List<QuestionDto> questions = sectionDto.getQuestions(); assertThat(questions, is(notNullValue())); assertThat(questions.size(), is(2)); QuestionDto questionDto = questions.get(0); assertThat(questionDto.getNickname(), is("date_of_birth")); assertThat(questionDto.getText(), is("Your DOB")); assertThat(questionDto.getType(), is(QuestionType.DATE)); assertThat(questionDto.getOrder(), is(1)); questionDto = questions.get(1); assertThat(questionDto.getNickname(), is("num_family_members")); assertThat(questionDto.getText(), is("How many family members")); assertThat(questionDto.getType(), is(QuestionType.NUMERIC)); assertThat(questionDto.getOrder(), is(2)); assertThat(questionDto.getMinValue(), is(3)); assertThat(questionDto.getMaxValue(), is(10)); assertThat(questionDto.isMandatory(), is(true)); } private void assertSecondSection(SectionDto sectionDto) { assertThat(sectionDto.getName(), is("misc")); assertThat(sectionDto.getOrder(), is(2)); List<QuestionDto> questions = sectionDto.getQuestions(); assertThat(questions, is(notNullValue())); assertThat(questions.size(), is(3)); QuestionDto questionDto = questions.get(0); assertThat(questionDto.getNickname(), is("father_name")); assertThat(questionDto.getText(), is("Father's name'")); assertThat(questionDto.getType(), is(QuestionType.FREETEXT)); assertThat(questionDto.getOrder(), is(1)); questionDto = questions.get(1); assertThat(questionDto.getNickname(), is("num_dependents")); assertThat(questionDto.getText(), is("No of dependents")); assertThat(questionDto.getType(), is(QuestionType.SINGLE_SELECT)); assertThat(questionDto.getOrder(), is(2)); assertThat(questionDto.isMandatory(), is(true)); List<ChoiceDto> choices = questionDto.getChoices(); assertThat(choices, is(notNullValue())); assertThat(choices.size(), is(3)); assertChoiceDetail(choices.get(0), "Less than 2", 1); assertChoiceDetail(choices.get(1), "Less than 5", 2); assertChoiceDetail(choices.get(2), "Less than 10", 3); questionDto = questions.get(2); assertThat(questionDto.getNickname(), is("previous_loans")); assertThat(questionDto.getText(), is("Previous Loans taken for")); assertThat(questionDto.getType(), is(QuestionType.SMART_SELECT)); assertThat(questionDto.getOrder(), is(3)); assertThat(questionDto.isMandatory(), is(true)); choices = questionDto.getChoices(); assertThat(choices, is(notNullValue())); assertThat(choices.size(), is(4)); assertFirstChoiceWithTags(choices.get(0)); assertSecondChoiceWithTags(choices.get(1)); assertThirdChoiceWithTags(choices.get(2)); assertFourthChoiceWithTags(choices.get(3)); } private void assertFirstChoiceWithTags(ChoiceDto choiceDto) { assertChoiceDetail(choiceDto, "No Product", 1); List<String> tags = choiceDto.getTags(); assertThat(tags, is(notNullValue())); assertThat(tags.size(), is(1)); assertThat(tags.get(0), is("Never")); } private void assertSecondChoiceWithTags(ChoiceDto choiceDto) { assertChoiceDetail(choiceDto, "Product 1", 2); List<String> tags = choiceDto.getTags(); assertThat(tags, is(notNullValue())); assertThat(tags.size(), is(1)); assertThat(tags.get(0), is("Agriculture")); } private void assertThirdChoiceWithTags(ChoiceDto choiceDto) { assertChoiceDetail(choiceDto, "Product 2", 3); List<String> tags = choiceDto.getTags(); assertThat(tags, is(notNullValue())); assertThat(tags.size(), is(2)); assertThat(tags.get(0), is("Fishing")); assertThat(tags.get(1), is("Farming")); } private void assertFourthChoiceWithTags(ChoiceDto choiceDto) { assertChoiceDetail(choiceDto, "Product 3", 4); List<String> tags = choiceDto.getTags(); assertThat(tags, is(notNullValue())); assertThat(tags.size(), is(1)); assertThat(tags.get(0), is("Construction")); } private void assertChoiceDetail(ChoiceDto choiceDto, String value, int order) { assertThat(choiceDto.getValue(), is(value)); assertThat(choiceDto.getOrder(), is(order)); } private void assertEventSource(EventSourceDto eventSourceDto) { assertThat(eventSourceDto, is(notNullValue())); assertThat(eventSourceDto.getEvent(), is("Create")); assertThat(eventSourceDto.getSource(), is("Loan")); } private void assertQuestionGroupDto(QuestionGroupDto questionGroupDto) { assertThat(questionGroupDto, is(notNullValue())); assertThat(questionGroupDto.getTitle(), is("PPI India")); assertThat(questionGroupDto.isEditable(), is(false)); assertThat(questionGroupDto.isPpi(), is(true)); } }