@Test public void shouldSetSelectedQuestionGroupsOnSession() throws PageExpiredException { List<QuestionGroupDetail> questionGroupDetails = asList( getQuestionGroupDetail(1, "QG1", true), getQuestionGroupDetail(2, "QG2", true), getQuestionGroupDetail(3, "QG3", false)); when(questionnaireServiceFacade.getQuestionGroupDetail(1)) .thenReturn(questionGroupDetails.get(0)); when(questionnaireServiceFacade.getQuestionGroupDetail(2)) .thenReturn(questionGroupDetails.get(1)); when(questionnaireServiceFacade.getQuestionGroupDetail(3)) .thenReturn(questionGroupDetails.get(2)); when(request.getAttribute(Constants.CURRENTFLOWKEY)).thenReturn(FLOW_KEY); when(request.getSession()).thenReturn(session); when(session.getAttribute(Constants.FLOWMANAGER)).thenReturn(flowManager); Flow flow = new Flow(); when(flowManager.getFlowWithValidation(FLOW_KEY)).thenReturn(flow); LoanOfferingBO loanOfferingBO = new LoanProductBuilder().buildForUnitTests(); loanOfferingBO.setQuestionGroups(getQustionGroups(1, 2, 3)); loanPrdAction.setSelectedQuestionGroupsOnSession( request, loanOfferingBO, questionnaireServiceFacade); List<QuestionGroupDetail> questionGroupDetailList = (List<QuestionGroupDetail>) flow.getObjectFromSession(ProductDefinitionConstants.SELECTEDQGLIST); assertThat(questionGroupDetailList, is(notNullValue())); assertThat(questionGroupDetailList.size(), is(2)); assertQuestionGroup(questionGroupDetailList.get(0), 1, "QG1"); assertQuestionGroup(questionGroupDetailList.get(1), 2, "QG2"); verify(questionnaireServiceFacade, times(3)).getQuestionGroupDetail(anyInt()); verify(request, times(1)).getAttribute(Constants.CURRENTFLOWKEY); verify(request, times(1)).getSession(); verify(session, times(1)).getAttribute(Constants.FLOWMANAGER); }
private CollectionSheetEntryGridDto getFailureBulkEntry() throws Exception { Date startDate = new Date(System.currentTimeMillis()); MeetingBO meeting = TestObjectFactory.createMeeting( TestObjectFactory.getNewMeetingForToday(WEEKLY, EVERY_WEEK, CUSTOMER_MEETING)); center = TestObjectFactory.createWeeklyFeeCenter("Center", meeting); group = TestObjectFactory.createWeeklyFeeGroupUnderCenter( "Group", CustomerStatus.GROUP_ACTIVE, center); client = TestObjectFactory.createClient("Client", CustomerStatus.CLIENT_ACTIVE, group); LoanOfferingBO loanOffering1 = TestObjectFactory.createLoanOffering(startDate, meeting); LoanOfferingBO loanOffering2 = TestObjectFactory.createLoanOffering("Loan2345", "313f", startDate, meeting); groupAccount = TestObjectFactory.createLoanAccount( "42423142341", group, AccountState.LOAN_ACTIVE_IN_GOOD_STANDING, startDate, loanOffering1); clientAccount = TestObjectFactory.createLoanAccount( "3243", client, AccountState.LOAN_ACTIVE_IN_GOOD_STANDING, startDate, loanOffering2); MeetingBO meetingIntCalc = TestObjectFactory.createMeeting( TestObjectFactory.getNewMeetingForToday(WEEKLY, EVERY_WEEK, CUSTOMER_MEETING)); MeetingBO meetingIntPost = TestObjectFactory.createMeeting( TestObjectFactory.getNewMeetingForToday(WEEKLY, EVERY_WEEK, CUSTOMER_MEETING)); SavingsOfferingBO savingsOffering = TestObjectFactory.createSavingsProduct( "SavingPrd123c", "ased", ApplicableTo.GROUPS, startDate, PrdStatus.SAVINGS_ACTIVE, 300.0, RecommendedAmountUnit.PER_INDIVIDUAL, 1.2, 200.0, 200.0, SavingsType.VOLUNTARY, InterestCalcType.MINIMUM_BALANCE, meetingIntCalc, meetingIntPost); SavingsOfferingBO savingsOffering1 = TestObjectFactory.createSavingsProduct( "SavingPrd1we", "vbgr", ApplicableTo.GROUPS, startDate, PrdStatus.SAVINGS_ACTIVE, 300.0, RecommendedAmountUnit.PER_INDIVIDUAL, 1.2, 200.0, 200.0, SavingsType.VOLUNTARY, InterestCalcType.MINIMUM_BALANCE, meetingIntCalc, meetingIntPost); centerSavingsAccount = TestObjectFactory.createSavingsAccount( "432434", center, Short.valueOf("16"), startDate, savingsOffering); clientSavingsAccount = TestObjectFactory.createSavingsAccount( "432434", client, Short.valueOf("16"), startDate, savingsOffering1); CollectionSheetEntryView bulkEntryParent = new CollectionSheetEntryView(getCusomerView(center), null); bulkEntryParent.addSavingsAccountDetail(getSavingsAccountView(centerSavingsAccount)); bulkEntryParent.setCustomerAccountDetails(getCustomerAccountView(center)); CollectionSheetEntryView bulkEntryChild = new CollectionSheetEntryView(getCusomerView(group), null); LoanAccountView groupLoanAccountView = getLoanAccountView(groupAccount); bulkEntryChild.addLoanAccountDetails(groupLoanAccountView); bulkEntryChild.setCustomerAccountDetails(getCustomerAccountView(group)); CollectionSheetEntryView bulkEntrySubChild = new CollectionSheetEntryView(getCusomerView(client), null); LoanAccountView clientLoanAccountView = getLoanAccountView(clientAccount); bulkEntrySubChild.addLoanAccountDetails(clientLoanAccountView); bulkEntrySubChild.addSavingsAccountDetail(getSavingsAccountView(clientSavingsAccount)); bulkEntrySubChild.setCustomerAccountDetails(getCustomerAccountView(client)); bulkEntryChild.addChildNode(bulkEntrySubChild); bulkEntryParent.addChildNode(bulkEntryChild); bulkEntryChild.getLoanAccountDetails().get(0).setEnteredAmount("100.0"); bulkEntryChild .getLoanAccountDetails() .get(0) .setPrdOfferingId(groupLoanAccountView.getPrdOfferingId()); bulkEntrySubChild.getLoanAccountDetails().get(0).setEnteredAmount("100.0"); bulkEntrySubChild .getLoanAccountDetails() .get(0) .setPrdOfferingId(clientLoanAccountView.getPrdOfferingId()); ProductDto loanOfferingDto = new ProductDto(loanOffering1.getPrdOfferingId(), loanOffering1.getPrdOfferingShortName()); ProductDto loanOfferingDto2 = new ProductDto(loanOffering2.getPrdOfferingId(), loanOffering2.getPrdOfferingShortName()); List<ProductDto> loanProducts = Arrays.asList(loanOfferingDto, loanOfferingDto2); ProductDto savingsOfferingDto = new ProductDto( savingsOffering.getPrdOfferingId(), savingsOffering.getPrdOfferingShortName()); List<ProductDto> savingsProducts = Arrays.asList(savingsOfferingDto); final PersonnelView loanOfficer = getPersonnelView(center.getPersonnel()); final OfficeView officeView = null; final List<CustomValueListElement> attendanceTypesList = new ArrayList<CustomValueListElement>(); bulkEntryParent.setCountOfCustomers(3); final CollectionSheetEntryGridDto bulkEntry = new CollectionSheetEntryGridDto( bulkEntryParent, loanOfficer, officeView, getPaymentTypeView(), startDate, "324343242", startDate, loanProducts, savingsProducts, attendanceTypesList); return bulkEntry; }
private CollectionSheetEntryGridDto getSuccessfulBulkEntry() throws Exception { MeetingBO meeting = TestObjectFactory.createMeeting( TestObjectFactory.getNewMeetingForToday(WEEKLY, EVERY_WEEK, CUSTOMER_MEETING)); Date startDate = new Date(System.currentTimeMillis()); center = TestObjectFactory.createWeeklyFeeCenter("Center", meeting); group = TestObjectFactory.createWeeklyFeeGroupUnderCenter( "Group", CustomerStatus.GROUP_ACTIVE, center); client = TestObjectFactory.createClient("Client", CustomerStatus.CLIENT_ACTIVE, group); LoanOfferingBO loanOffering1 = TestObjectFactory.createLoanOffering(startDate, meeting); LoanOfferingBO loanOffering2 = TestObjectFactory.createLoanOffering( "Loan2345", "313f", ApplicableTo.CLIENTS, startDate, PrdStatus.LOAN_ACTIVE, 300.0, 1.2, 3, InterestType.FLAT, meeting); groupAccount = TestObjectFactory.createLoanAccount( "42423142341", group, AccountState.LOAN_ACTIVE_IN_GOOD_STANDING, startDate, loanOffering1); clientAccount = getLoanAccount(AccountState.LOAN_APPROVED, startDate, 1, loanOffering2); Date currentDate = new Date(System.currentTimeMillis()); // 2010-01-18: JohnW - This use of TestObjectFactory.createSavingsProduct used to break a number // of // business rules. // E.g all the savings products were set up as applicable for Groups and "per individual" which // is wrong for // centers and clients. In the case of the client being wrongly set up as "Per Individual" it // now triggers save // collection sheet validation (which checks that the account associated with the client marked // "per individual" // matches its parent group or center) // Also, when creating the center savings accounts (which is effectively "per individual") and // the group savings // account which is "per individual" the saving_schedule entries for the client are not written // (they are in the // production code). // // Considered using/updating the savingsProductBuilder functionality but that doesn't deal with // the // "per individual" aspect either (update: it does, but still problem with builder creating // installments). // Decided not to try and fix it up (good deal of effort involved) but rather change the // TestObjectFactory.createSavingsProduct to accept a RecommendedAmountUnit parameter. // Unfortunately it wouldn't allow a null parameter (which is valid for centers and clients) // through so, where // necessary, I picked a value that worked for the test but was wrong in a business rule sense // (just as its // always been). // So the savings product test data doesn't adhere to business rules but all tests pass here and // in others // tests. SavingsOfferingBO savingsOffering1 = TestObjectFactory.createSavingsProduct( "SavingPrd1", "ased", currentDate, RecommendedAmountUnit.COMPLETE_GROUP); SavingsOfferingBO savingsOffering2 = TestObjectFactory.createSavingsProduct( "SavingPrd2", "cvdf", currentDate, RecommendedAmountUnit.COMPLETE_GROUP); SavingsOfferingBO savingsOffering3 = TestObjectFactory.createSavingsProduct( "SavingPrd3", "zxsd", currentDate, RecommendedAmountUnit.COMPLETE_GROUP); centerSavingsAccount = TestObjectFactory.createSavingsAccount( "43244334", center, Short.valueOf("16"), startDate, savingsOffering1); groupSavingsAccount = TestObjectFactory.createSavingsAccount( "43234434", group, Short.valueOf("16"), startDate, savingsOffering2); clientSavingsAccount = TestObjectFactory.createSavingsAccount( "43245434", client, Short.valueOf("16"), startDate, savingsOffering3); CollectionSheetEntryView bulkEntryParent = new CollectionSheetEntryView(getCusomerView(center), null); SavingsAccountView centerSavingsAccountView = getSavingsAccountView(centerSavingsAccount); centerSavingsAccountView.setDepositAmountEntered("100"); centerSavingsAccountView.setWithDrawalAmountEntered("10"); bulkEntryParent.addSavingsAccountDetail(centerSavingsAccountView); bulkEntryParent.setCustomerAccountDetails(getCustomerAccountView(center)); CollectionSheetEntryView bulkEntryChild = new CollectionSheetEntryView(getCusomerView(group), null); LoanAccountView groupLoanAccountView = getLoanAccountView(groupAccount); SavingsAccountView groupSavingsAccountView = getSavingsAccountView(groupSavingsAccount); groupSavingsAccountView.setDepositAmountEntered("100"); groupSavingsAccountView.setWithDrawalAmountEntered("10"); bulkEntryChild.addLoanAccountDetails(groupLoanAccountView); bulkEntryChild.addSavingsAccountDetail(groupSavingsAccountView); bulkEntryChild.setCustomerAccountDetails(getCustomerAccountView(group)); CollectionSheetEntryView bulkEntrySubChild = new CollectionSheetEntryView(getCusomerView(client), null); LoanAccountView clientLoanAccountView = getLoanAccountView(clientAccount); clientLoanAccountView.setAmountPaidAtDisbursement(0.0); SavingsAccountView clientSavingsAccountView = getSavingsAccountView(clientSavingsAccount); clientSavingsAccountView.setDepositAmountEntered("100"); clientSavingsAccountView.setWithDrawalAmountEntered("10"); bulkEntrySubChild.addLoanAccountDetails(clientLoanAccountView); bulkEntrySubChild.setAttendence(new Short("2")); bulkEntrySubChild.addSavingsAccountDetail(clientSavingsAccountView); bulkEntrySubChild.setCustomerAccountDetails(getCustomerAccountView(client)); bulkEntryChild.addChildNode(bulkEntrySubChild); bulkEntryParent.addChildNode(bulkEntryChild); LoanAccountsProductView childView = bulkEntryChild.getLoanAccountDetails().get(0); childView.setPrdOfferingId(groupLoanAccountView.getPrdOfferingId()); childView.setEnteredAmount("100.0"); LoanAccountsProductView subchildView = bulkEntrySubChild.getLoanAccountDetails().get(0); subchildView.setDisBursementAmountEntered(clientAccount.getLoanAmount().toString()); subchildView.setPrdOfferingId(clientLoanAccountView.getPrdOfferingId()); ProductDto loanOfferingDto = new ProductDto(loanOffering1.getPrdOfferingId(), loanOffering1.getPrdOfferingShortName()); ProductDto loanOfferingDto2 = new ProductDto(loanOffering2.getPrdOfferingId(), loanOffering2.getPrdOfferingShortName()); List<ProductDto> loanProducts = Arrays.asList(loanOfferingDto, loanOfferingDto2); ProductDto savingsOfferingDto = new ProductDto( savingsOffering1.getPrdOfferingId(), savingsOffering1.getPrdOfferingShortName()); ProductDto savingsOfferingDto2 = new ProductDto( savingsOffering2.getPrdOfferingId(), savingsOffering2.getPrdOfferingShortName()); ProductDto savingsOfferingDto3 = new ProductDto( savingsOffering3.getPrdOfferingId(), savingsOffering3.getPrdOfferingShortName()); List<ProductDto> savingsProducts = Arrays.asList(savingsOfferingDto, savingsOfferingDto2, savingsOfferingDto3); final PersonnelView loanOfficer = getPersonnelView(center.getPersonnel()); final OfficeView officeView = null; final List<CustomValueListElement> attendanceTypesList = new ArrayList<CustomValueListElement>(); bulkEntryParent.setCountOfCustomers(3); final CollectionSheetEntryGridDto bulkEntry = new CollectionSheetEntryGridDto( bulkEntryParent, loanOfficer, officeView, getPaymentTypeView(), startDate, "324343242", startDate, loanProducts, savingsProducts, attendanceTypesList); return bulkEntry; }