package org.mifos.accounts.loan.struts.action; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import java.util.HashSet; import java.util.List; import java.util.Set; import org.junit.Test; import org.mifos.accounts.productdefinition.business.LoanOfferingBO; import org.mifos.accounts.productdefinition.business.QuestionGroupReference; import org.mifos.domain.builders.LoanProductBuilder; import org.mifos.platform.questionnaire.service.QuestionGroupDetail; public class QuestionGroupFilterForLoanTest { @Test public void shouldDoFilterForNoLoanOfferBO() { QuestionGroupFilterForLoan questionGroupFilterForLoan = new QuestionGroupFilterForLoan(); List<QuestionGroupDetail> questionGroupDetails = asList(getQuestionGroupDetail(1, "QG1"), getQuestionGroupDetail(2, "QG2"), getQuestionGroupDetail(3, "QG3"), getQuestionGroupDetail(4, "QG4")); List<QuestionGroupDetail> filteredQuestionGroupDetails = questionGroupFilterForLoan.doFilter(questionGroupDetails,null); assertThat(filteredQuestionGroupDetails, is(questionGroupDetails)); } @Test public void shouldDoFilterForNoQuestionGroupDetails() { QuestionGroupFilterForLoan questionGroupFilterForLoan = new QuestionGroupFilterForLoan(); LoanOfferingBO loanOfferingBO = new LoanProductBuilder().buildForUnitTests(); loanOfferingBO.setQuestionGroups(getQustionGroups(2, 4)); questionGroupFilterForLoan.setLoanOfferingBO(loanOfferingBO); List<QuestionGroupDetail> filteredQuestionGroupDetails = questionGroupFilterForLoan.doFilter(null,null); assertThat(filteredQuestionGroupDetails, is(nullValue())); } @Test public void shouldDoFilter() { QuestionGroupFilterForLoan questionGroupFilterForLoan = new QuestionGroupFilterForLoan(); LoanOfferingBO loanOfferingBO = new LoanProductBuilder().buildForUnitTests(); loanOfferingBO.setQuestionGroups(getQustionGroups(2, 4)); questionGroupFilterForLoan.setLoanOfferingBO(loanOfferingBO); List<QuestionGroupDetail> questionGroupDetails = asList(getQuestionGroupDetail(1, "QG1"), getQuestionGroupDetail(2, "QG2"), getQuestionGroupDetail(3, "QG3"), getQuestionGroupDetail(4, "QG4")); List<QuestionGroupDetail> filteredQuestionGroupDetails = questionGroupFilterForLoan.doFilter(questionGroupDetails,new Criteria<QuestionGroupDetail>() { @Override public QuestionGroupDetail filter(Integer questionGroupId, List<QuestionGroupDetail> questionGroupDetails) { QuestionGroupDetail result = null; for (QuestionGroupDetail questionGroupDetail : questionGroupDetails) { if (questionGroupId.equals(questionGroupDetail.getId())) { result = questionGroupDetail; break; } } return result; } }); assertThat(filteredQuestionGroupDetails, is(notNullValue())); assertThat(filteredQuestionGroupDetails.size(), is(2)); assertThat(filteredQuestionGroupDetails.get(0).getId(), is(2)); assertThat(filteredQuestionGroupDetails.get(0).getTitle(), is("QG2")); assertThat(filteredQuestionGroupDetails.get(1).getId(), is(4)); assertThat(filteredQuestionGroupDetails.get(1).getTitle(), is("QG4")); } @Test public void shouldDoFilterForNoLoanOfferingQuestionGroups() { QuestionGroupFilterForLoan questionGroupFilterForLoan = new QuestionGroupFilterForLoan(); LoanOfferingBO loanOfferingBO = new LoanProductBuilder().buildForUnitTests(); loanOfferingBO.setQuestionGroups(new HashSet<QuestionGroupReference>()); questionGroupFilterForLoan.setLoanOfferingBO(loanOfferingBO); List<QuestionGroupDetail> questionGroupDetails = asList(getQuestionGroupDetail(1, "QG1"), getQuestionGroupDetail(2, "QG2"), getQuestionGroupDetail(3, "QG3"), getQuestionGroupDetail(4, "QG4")); List<QuestionGroupDetail> filteredQuestionGroupDetails = questionGroupFilterForLoan.doFilter(questionGroupDetails,null); assertThat(filteredQuestionGroupDetails, is(notNullValue())); assertThat(filteredQuestionGroupDetails.size(), is(0)); loanOfferingBO.setQuestionGroups(null); filteredQuestionGroupDetails = questionGroupFilterForLoan.doFilter(questionGroupDetails,null); assertThat(filteredQuestionGroupDetails, is(notNullValue())); assertThat(filteredQuestionGroupDetails.size(), is(0)); } private Set<QuestionGroupReference> getQustionGroups(int... questionGroupIds) { Set<QuestionGroupReference> questionGroupReferences = new HashSet<QuestionGroupReference>(); for (int questionGroupId : questionGroupIds) { questionGroupReferences.add(makeQuestionGroupRef(questionGroupId)); } return questionGroupReferences; } private QuestionGroupReference makeQuestionGroupRef(int questionGroupId) { QuestionGroupReference questionGroupReference = new QuestionGroupReference(); questionGroupReference.setQuestionGroupId(questionGroupId); return questionGroupReference; } private QuestionGroupDetail getQuestionGroupDetail(int id, String title) { QuestionGroupDetail questionGroupDetail = new QuestionGroupDetail(); questionGroupDetail.setId(id); questionGroupDetail.setTitle(title); return questionGroupDetail; } }