/*
* 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.customers.client.business;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mifos.accounts.business.AccountActionDateEntity;
import org.mifos.accounts.business.AccountBO;
import org.mifos.accounts.fees.business.AmountFeeBO;
import org.mifos.accounts.fees.business.FeeDto;
import org.mifos.accounts.fees.util.helpers.FeeCategory;
import org.mifos.accounts.fees.util.helpers.FeePayment;
import org.mifos.accounts.productdefinition.business.SavingsOfferingBO;
import org.mifos.accounts.productdefinition.util.helpers.ApplicableTo;
import org.mifos.accounts.productdefinition.util.helpers.SavingsType;
import org.mifos.accounts.savings.business.SavingsBO;
import org.mifos.accounts.util.helpers.AccountState;
import org.mifos.application.master.business.CustomFieldType;
import org.mifos.application.meeting.business.MeetingBO;
import org.mifos.application.meeting.util.helpers.MeetingType;
import org.mifos.application.meeting.util.helpers.RecurrenceType;
import org.mifos.application.meeting.util.helpers.WeekDay;
import org.mifos.application.util.helpers.YesNoFlag;
import org.mifos.config.ClientRules;
import org.mifos.customers.business.CustomerBO;
import org.mifos.customers.business.CustomerMovementEntity;
import org.mifos.customers.center.business.CenterBO;
import org.mifos.customers.client.persistence.LegacyClientDao;
import org.mifos.customers.client.util.helpers.ClientConstants;
import org.mifos.customers.exceptions.CustomerException;
import org.mifos.customers.group.business.GroupBO;
import org.mifos.customers.office.business.OfficeBO;
import org.mifos.customers.office.persistence.OfficePersistence;
import org.mifos.customers.office.util.helpers.OfficeLevel;
import org.mifos.customers.persistence.CustomerDao;
import org.mifos.customers.personnel.business.PersonnelBO;
import org.mifos.customers.util.helpers.CustomerConstants;
import org.mifos.customers.util.helpers.CustomerStatus;
import org.mifos.dto.domain.CustomFieldDto;
import org.mifos.dto.screen.ClientNameDetailDto;
import org.mifos.dto.screen.ClientPersonalDetailDto;
import org.mifos.framework.MifosIntegrationTestCase;
import org.mifos.framework.TestUtils;
import org.mifos.framework.hibernate.helper.StaticHibernateUtil;
import org.mifos.framework.util.helpers.TestObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
public class ClientIntegrationTest extends MifosIntegrationTestCase {
private AccountBO accountBO;
private CustomerBO center;
private CenterBO center1;
private CustomerBO group;
private GroupBO group1;
private SavingsOfferingBO savingsOffering1;
private SavingsOfferingBO savingsOffering2;
private ClientBO client;
private MeetingBO meeting;
private PersonnelBO personnel;
private Short officeId = 1;
private OfficeBO office;
private OfficeBO officeBo;
@Autowired
LegacyClientDao legacyClientDao;
@Autowired
private CustomerDao customerDao;
@Before
public void setUp() throws Exception {
personnel = getTestUser();
officeBo = getHeadOffice();
}
@After
public void tearDown() throws Exception {
try {
accountBO = null;
client = null;
group = null;
group1 = null;
center = null;
center1 = null;
office = null;
savingsOffering1 = null;
} catch (Exception e) {
}
StaticHibernateUtil.flushSession();
}
@Test
public void testPovertyLikelihoodHibernateMapping() throws Exception {
createInitialObjects();
Double pct = new Double(55.0);
String hd = "**FOO**";
client.setPovertyLikelihoodPercent(pct);
client.getCustomerDetail().setHandicappedDetails(hd);
legacyClientDao.createOrUpdate(client);
StaticHibernateUtil.flushSession();
ClientBO retrievedClient = (ClientBO) StaticHibernateUtil.getSessionTL().get(ClientBO.class,
client.getCustomerId());
Assert.assertEquals(hd, retrievedClient.getCustomerDetail().getHandicappedDetails());
Assert.assertEquals(pct, retrievedClient.getPovertyLikelihoodPercent());
}
@Test
public void testSuccessfulValidateBeforeAddingClientToGroup_Client() throws Exception {
String oldMeetingPlace = "Tunisia";
MeetingBO weeklyMeeting = new MeetingBO(WeekDay.FRIDAY, Short.valueOf("1"), new java.util.Date(),
MeetingType.CUSTOMER_MEETING, oldMeetingPlace);
client = TestObjectFactory.createClient("clientname", weeklyMeeting, CustomerStatus.CLIENT_CANCELLED);
group1 = TestObjectFactory.createGroupUnderBranch("Group2", CustomerStatus.GROUP_PENDING, new Short("3"),
getMeeting(), new Short("1"));
try {
client.validateBeforeAddingClientToGroup(group1);
Assert.fail();
} catch (CustomerException expected) {
Assert.assertEquals(CustomerConstants.CLIENT_IS_CLOSED_OR_CANCELLED_EXCEPTION, expected.getKey());
Assert.assertTrue(true);
}
}
@Test
public void testSuccessfulValidateBeforeAddingClientToGroup_Amount() throws Exception {
String oldMeetingPlace = "Tunis";
MeetingBO weeklyMeeting = new MeetingBO(WeekDay.FRIDAY, Short.valueOf("1"), new java.util.Date(),
MeetingType.CUSTOMER_MEETING, oldMeetingPlace);
client = TestObjectFactory.createClient("clientname", weeklyMeeting, CustomerStatus.CLIENT_CANCELLED);
group1 = TestObjectFactory.createGroupUnderBranch("Group2", CustomerStatus.GROUP_PENDING, new Short("3"),
getMeeting(), new Short("1"));
try {
client.validateBeforeAddingClientToGroup(group1);
Assert.fail();
} catch (CustomerException expected) {
Assert.assertEquals(CustomerConstants.CLIENT_IS_CLOSED_OR_CANCELLED_EXCEPTION, expected.getKey());
Assert.assertNotSame(CustomerConstants.CLIENT_HAVE_OPEN_LOAN_ACCOUNT_EXCEPTION, expected.getKey());
Assert.assertTrue(true);
}
}
@Test
public void testGenerateScheduleForClient_OnClientCreate() throws Exception {
SavingsOfferingBO savingsOffering = TestObjectFactory.createSavingsProduct("Offering1", "s1",
SavingsType.MANDATORY, ApplicableTo.GROUPS, new Date(System.currentTimeMillis()));
createParentObjects(CustomerStatus.GROUP_ACTIVE);
accountBO = TestObjectFactory.createSavingsAccount("globalNum", center, AccountState.SAVINGS_ACTIVE,
new java.util.Date(), savingsOffering, TestObjectFactory.getContext());
Assert.assertEquals(0, accountBO.getAccountActionDates().size());
client = createClient(CustomerStatus.CLIENT_ACTIVE);
StaticHibernateUtil.flushSession();
accountBO = TestObjectFactory.getObject(AccountBO.class, accountBO.getAccountId());
Assert.assertEquals(1, accountBO.getAccountCustomFields().size());
Assert.assertEquals(10, accountBO.getAccountActionDates().size());
for (AccountActionDateEntity actionDate : accountBO.getAccountActionDates()) {
Assert.assertEquals(client.getCustomerId(), actionDate.getCustomer().getCustomerId());
Assert.assertTrue(true);
}
client = TestObjectFactory.getClient(client.getCustomerId());
group = TestObjectFactory.getGroup(group.getCustomerId());
center = TestObjectFactory.getCenter(center.getCustomerId());
}
@Test
public void testFailure_InitialSavingsOfferingAtCreate() throws Exception {
savingsOffering1 = TestObjectFactory.createSavingsProduct("Offering1", "s1", SavingsType.MANDATORY,
ApplicableTo.CLIENTS, new Date(System.currentTimeMillis()));
ClientNameDetailDto clientView = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "Client", "", "1", "");
clientView.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
List<SavingsOfferingBO> offerings = new ArrayList<SavingsOfferingBO>();
offerings.add(savingsOffering1);
offerings.add(savingsOffering1);
try {
client = new ClientBO(TestObjectFactory.getContext(), clientView.getDisplayName(),
CustomerStatus.CLIENT_PARTIAL, null, null, null, null, null, offerings, personnel, officeBo, null,
null, null, null, null, YesNoFlag.NO.getValue(), clientView, spouseView, clientPersonalDetailDto);
} catch (CustomerException ce) {
Assert.assertEquals(ClientConstants.ERRORS_DUPLICATE_OFFERING_SELECTED, ce.getKey());
Assert.assertTrue(true);
}
savingsOffering1 = (SavingsOfferingBO) TestObjectFactory.getObject(SavingsOfferingBO.class, savingsOffering1
.getPrdOfferingId());
}
@Test
public void testInitialSavingsOfferingAtCreate() throws Exception {
savingsOffering1 = TestObjectFactory.createSavingsProduct("Offering1", "s1", SavingsType.MANDATORY,
ApplicableTo.CLIENTS, new Date(System.currentTimeMillis()));
savingsOffering2 = TestObjectFactory.createSavingsProduct("Offering2", "s2", SavingsType.VOLUNTARY,
ApplicableTo.CLIENTS, new Date(System.currentTimeMillis()));
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "Client", "", "1", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
List<SavingsOfferingBO> offerings = new ArrayList<SavingsOfferingBO>();
offerings.add(savingsOffering1);
offerings.add(savingsOffering2);
client = new ClientBO(TestObjectFactory.getContext(), clientNameDetailDto.getDisplayName(),
CustomerStatus.CLIENT_PARTIAL, null, null, null, null, null, offerings, personnel, officeBo, null,
null, null, null, null, YesNoFlag.YES.getValue(), clientNameDetailDto, spouseNameDetailView,
clientPersonalDetailDto);
legacyClientDao.saveClient(client);
StaticHibernateUtil.flushSession();
client = customerDao.findClientById(client.getCustomerId());
Assert.assertEquals(offerings.size(), client.getOfferingsAssociatedInCreate().size());
for (ClientInitialSavingsOfferingEntity clientOffering : client.getOfferingsAssociatedInCreate()) {
if (clientOffering.getSavingsOffering().getPrdOfferingId().equals(savingsOffering1.getPrdOfferingId())) {
Assert.assertTrue(true);
}
if (clientOffering.getSavingsOffering().getPrdOfferingId().equals(savingsOffering2.getPrdOfferingId())) {
Assert.assertTrue(true);
}
}
savingsOffering1 = (SavingsOfferingBO) TestObjectFactory.getObject(SavingsOfferingBO.class, savingsOffering1
.getPrdOfferingId());
savingsOffering2 = (SavingsOfferingBO) TestObjectFactory.getObject(SavingsOfferingBO.class, savingsOffering2
.getPrdOfferingId());
}
@Test
public void testCreateClientWithoutName() throws Exception {
try {
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "", "", "", "");
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
client = new ClientBO(TestUtils.makeUser(), "", CustomerStatus.fromInt(new Short("1")), null, null, null,
null, null, null, personnel, officeBo, null, null, null, null, null, YesNoFlag.YES.getValue(),
clientNameDetailDto, spouseNameDetailView, clientPersonalDetailDto);
Assert.fail("Client Created");
} catch (CustomerException ce) {
Assert.assertNull(client);
Assert.assertEquals(CustomerConstants.INVALID_NAME, ce.getKey());
}
}
@Test
public void testCreateClientWithoutOffice() throws Exception {
try {
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "", "last", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
client = new ClientBO(TestUtils.makeUser(), clientNameDetailDto.getDisplayName(), CustomerStatus
.fromInt(new Short("1")), null, null, null, null, null, null, personnel, null, null, null, null,
null, null, YesNoFlag.YES.getValue(), clientNameDetailDto, spouseNameDetailView, clientPersonalDetailDto);
Assert.fail("Client Created");
} catch (CustomerException ce) {
Assert.assertNull(client);
Assert.assertEquals(ce.getKey(), CustomerConstants.INVALID_OFFICE);
}
}
@Test
public void testSuccessfulCreateWithoutFeeAndCustomField() throws Exception {
String name = "Client 1";
Short povertyStatus = Short.valueOf("41");
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "Client", "", "1", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), povertyStatus);
client = new ClientBO(TestUtils.makeUser(), clientNameDetailDto.getDisplayName(), CustomerStatus
.fromInt(new Short("1")), null, null, null, null, null, null, personnel, officeBo, null, null, null,
null, null, YesNoFlag.YES.getValue(), clientNameDetailDto, spouseNameDetailView, clientPersonalDetailDto);
legacyClientDao.saveClient(client);
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
Assert.assertEquals(name, client.getDisplayName());
Assert.assertEquals(povertyStatus, client.getCustomerDetail().getPovertyStatus());
Assert.assertEquals(officeId, client.getOffice().getOfficeId());
}
@Test
public void testSuccessfulCreateInActiveState_WithAssociatedSavingsOffering() throws Exception {
savingsOffering1 = TestObjectFactory.createSavingsProduct("offering1", "s1", SavingsType.MANDATORY,
ApplicableTo.CLIENTS, new Date(System.currentTimeMillis()));
StaticHibernateUtil.flushSession();
List<SavingsOfferingBO> selectedOfferings = new ArrayList<SavingsOfferingBO>();
selectedOfferings.add(savingsOffering1);
String name = "Client 1";
Short povertyStatus = Short.valueOf("41");
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "Client", "", "1", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), povertyStatus);
client = new ClientBO(TestUtils.makeUser(), clientNameDetailDto.getDisplayName(),
CustomerStatus.CLIENT_ACTIVE, null, null, null, null, null, selectedOfferings, personnel,
new OfficePersistence().getOffice(TestObjectFactory.SAMPLE_BRANCH_OFFICE), getMeeting(), personnel,
null, null, null, null, YesNoFlag.NO.getValue(), clientNameDetailDto, spouseNameDetailView,
clientPersonalDetailDto, null);
legacyClientDao.saveClient(client);
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
Assert.assertEquals(name, client.getDisplayName());
Assert.assertEquals(1, client.getOfferingsAssociatedInCreate().size());
Assert.assertEquals(2, client.getAccounts().size());
for (AccountBO account : client.getAccounts()) {
if (account instanceof SavingsBO) {
Assert.assertEquals(savingsOffering1.getPrdOfferingId(), ((SavingsBO) account).getSavingsOffering()
.getPrdOfferingId());
Assert.assertNotNull(account.getGlobalAccountNum());
Assert.assertTrue(true);
}
}
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
savingsOffering1 = null;
}
@Test
public void testSuccessfulCreateWithParentGroup() throws Exception {
String name = "Client 1";
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "Client", "", "1", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
createParentObjects(CustomerStatus.GROUP_PARTIAL);
client = new ClientBO(TestUtils.makeUser(), clientNameDetailDto.getDisplayName(), CustomerStatus
.fromInt(new Short("1")), null, null, null, null, null, null, personnel, group.getOffice(), group,
null, null, null, null, YesNoFlag.YES.getValue(), clientNameDetailDto, spouseNameDetailView,
clientPersonalDetailDto);
legacyClientDao.saveClient(client);
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
Assert.assertEquals(name, client.getDisplayName());
Assert.assertEquals(client.getOffice().getOfficeId(), group.getOffice().getOfficeId());
}
@Test
public void testFailureCreatePendingClientWithParentGroupInLowerStatus() throws Exception {
try {
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "Client", "", "1", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
createParentObjects(CustomerStatus.GROUP_PARTIAL);
client = new ClientBO(TestUtils.makeUserWithLocales(), clientNameDetailDto.getDisplayName(),
CustomerStatus.CLIENT_PENDING, null, null, null, null, null, null, personnel, group.getOffice(),
group, null, null, null, null, YesNoFlag.YES.getValue(), clientNameDetailDto,
spouseNameDetailView, clientPersonalDetailDto);
Assert.fail();
} catch (CustomerException e) {
Assert.assertNull(client);
Assert.assertEquals(ClientConstants.INVALID_CLIENT_STATUS_EXCEPTION, e.getKey());
}
}
@Test
public void testFailureCreateActiveClientWithParentGroupInLowerStatus() throws Exception {
try {
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "Client", "", "1", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
createParentObjects(CustomerStatus.GROUP_PARTIAL);
client = new ClientBO(TestUtils.makeUserWithLocales(), clientNameDetailDto.getDisplayName(),
CustomerStatus.CLIENT_ACTIVE, null, null, null, null, null, null, personnel, group.getOffice(),
group, null, null, null, null, YesNoFlag.YES.getValue(), clientNameDetailDto,
spouseNameDetailView, clientPersonalDetailDto);
Assert.fail();
} catch (CustomerException e) {
Assert.assertNull(client);
Assert.assertEquals(ClientConstants.INVALID_CLIENT_STATUS_EXCEPTION, e.getKey());
}
}
@Test
public void testFailureCreateActiveClientWithoutLO() throws Exception {
List<FeeDto> fees = getFees();
try {
meeting = getMeeting();
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "", "last", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
client = new ClientBO(TestUtils.makeUser(), clientNameDetailDto.getDisplayName(), CustomerStatus
.fromInt(new Short("3")), null, null, null, null, fees, null, personnel, officeBo, meeting, null,
null, null, null, null, YesNoFlag.NO.getValue(), clientNameDetailDto, spouseNameDetailView,
clientPersonalDetailDto, null);
Assert.fail();
} catch (CustomerException e) {
Assert.assertNull(client);
Assert.assertEquals(CustomerConstants.INVALID_LOAN_OFFICER, e.getKey());
}
removeFees(fees);
}
@Test
public void testFailureCreateActiveClientWithoutMeeting() throws Exception {
try {
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "", "last", "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
client = new ClientBO(TestUtils.makeUser(), clientNameDetailDto.getDisplayName(), CustomerStatus
.fromInt(new Short("3")), null, null, null, null, null, null, personnel, officeBo, null, personnel,
null, null, null, null, YesNoFlag.NO.getValue(), clientNameDetailDto, spouseNameDetailView,
clientPersonalDetailDto, null);
Assert.fail();
} catch (CustomerException ce) {
Assert.assertNull(client);
Assert.assertEquals(CustomerConstants.INVALID_MEETING, ce.getKey());
}
}
@Test
public void testSuccessfulCreateClientInBranch() throws Exception {
OfficeBO office = new OfficePersistence().getOffice(TestObjectFactory.HEAD_OFFICE);
String firstName = "Client";
String lastName = "Last";
String displayName = "Client Last";
ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(NameType.CLIENT.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, firstName, "", lastName, "");
clientNameDetailDto.setNames(ClientRules.getNameSequence());
ClientNameDetailDto spouseNameDetailView = new ClientNameDetailDto(NameType.SPOUSE.getValue(),
TestObjectFactory.SAMPLE_SALUTATION, "first", "middle", "last", "secondLast");
spouseNameDetailView.setNames(ClientRules.getNameSequence());
ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(1, 1, 1, 1, 1, 1, Short.valueOf("1"), Short
.valueOf("1"), Short.valueOf("41"));
client = new ClientBO(TestUtils.makeUser(), clientNameDetailDto.getDisplayName(), CustomerStatus
.fromInt(new Short("1")), null, null, null, getCustomFields(), null, null, personnel, office, meeting,
personnel, null, null, null, null, YesNoFlag.YES.getValue(), clientNameDetailDto,
spouseNameDetailView, clientPersonalDetailDto, null);
legacyClientDao.saveClient(client);
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
Assert.assertEquals(displayName, client.getDisplayName());
Assert.assertEquals(firstName, client.getFirstName());
Assert.assertEquals(lastName, client.getLastName());
Assert.assertEquals(officeId, client.getOffice().getOfficeId());
}
@Test
public void testUpdateBranchFailure_OfficeNULL() throws Exception {
createInitialObjects();
try {
client.transferToBranch(null);
Assert.fail();
} catch (CustomerException e) {
Assert.assertEquals(CustomerConstants.INVALID_OFFICE, e.getKey());
}
}
@Test
public void testUpdateBranchFailure_TransferInSameOffice() throws Exception {
createInitialObjects();
try {
client.transferToBranch(client.getOffice());
Assert.fail();
} catch (CustomerException e) {
Assert.assertEquals(CustomerConstants.ERRORS_SAME_BRANCH_TRANSFER, e.getKey());
}
}
@Test
public void testUpdateBranchFirstTime() throws Exception {
StaticHibernateUtil.closeSession();
createObjectsForClientTransfer();
Assert.assertNull(client.getActiveCustomerMovement());
client.transferToBranch(office);
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
Assert.assertNotNull(client.getActiveCustomerMovement());
Assert.assertEquals(office.getOfficeId(), client.getOffice().getOfficeId());
Assert.assertEquals(CustomerStatus.CLIENT_HOLD, client.getStatus());
office = client.getOffice();
}
@Test
public void testUpdateBranchSecondTime() throws Exception {
StaticHibernateUtil.closeSession();
createObjectsForClientTransfer();
Assert.assertNull(client.getActiveCustomerMovement());
OfficeBO oldOffice = client.getOffice();
client.transferToBranch(office);
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
client.setUserContext(TestUtils.makeUser());
CustomerMovementEntity currentMovement = client.getActiveCustomerMovement();
Assert.assertNotNull(currentMovement);
Assert.assertEquals(office.getOfficeId(), currentMovement.getOffice().getOfficeId());
Assert.assertEquals(office.getOfficeId(), client.getOffice().getOfficeId());
client.transferToBranch(oldOffice);
StaticHibernateUtil.flushSession();
client = TestObjectFactory.getClient(client.getCustomerId());
currentMovement = client.getActiveCustomerMovement();
Assert.assertNotNull(currentMovement);
Assert.assertEquals(oldOffice.getOfficeId(), currentMovement.getOffice().getOfficeId());
Assert.assertEquals(oldOffice.getOfficeId(), client.getOffice().getOfficeId());
office = new OfficePersistence().getOffice(office.getOfficeId());
}
@Test
public void testGetClientAndSpouseName() throws Exception {
createObjectsForClient("Client 1", CustomerStatus.CLIENT_ACTIVE);
Assert.assertEquals(client.getClientName().getName().getFirstName(), "Client 1");
Assert.assertEquals(client.getSpouseName().getName().getFirstName(), "Client 1");
client = TestObjectFactory.getClient(client.getCustomerId());
office = new OfficePersistence().getOffice(office.getOfficeId());
}
private void createObjectsForClientTransfer() throws Exception {
office = TestObjectFactory.createOffice(OfficeLevel.BRANCHOFFICE, TestObjectFactory
.getOffice(TestObjectFactory.HEAD_OFFICE), "customer_office", "cust");
client = TestObjectFactory.createClient("client_to_transfer", getMeeting(), CustomerStatus.CLIENT_ACTIVE);
StaticHibernateUtil.flushSession();
}
private void createObjectsForClient(String name, CustomerStatus status) throws Exception {
office = TestObjectFactory.createOffice(OfficeLevel.BRANCHOFFICE, TestObjectFactory
.getOffice(TestObjectFactory.HEAD_OFFICE), "customer_office", "cust");
client = TestObjectFactory.createClient(name, getMeeting(), status);
StaticHibernateUtil.flushSession();
}
private List<FeeDto> getFees() {
List<FeeDto> fees = new ArrayList<FeeDto>();
AmountFeeBO fee1 = (AmountFeeBO) TestObjectFactory.createPeriodicAmountFee("PeriodicAmountFee",
FeeCategory.CENTER, "200", RecurrenceType.WEEKLY, Short.valueOf("2"));
AmountFeeBO fee2 = (AmountFeeBO) TestObjectFactory.createOneTimeAmountFee("OneTimeAmountFee",
FeeCategory.ALLCUSTOMERS, "100", FeePayment.UPFRONT);
fees.add(new FeeDto(TestObjectFactory.getContext(), fee1));
fees.add(new FeeDto(TestObjectFactory.getContext(), fee2));
StaticHibernateUtil.flushSession();
return fees;
}
private void removeFees(List<FeeDto> feesToRemove) {
// for (FeeDto fee : feesToRemove) {
// TestObjectFactory.cleanUp(new FeePersistence().getFee(fee.getFeeIdValue()));
// }
}
private List<CustomFieldDto> getCustomFields() {
List<CustomFieldDto> fields = new ArrayList<CustomFieldDto>();
fields.add(new CustomFieldDto(Short.valueOf("5"), "value1", CustomFieldType.ALPHA_NUMERIC.getValue()));
fields.add(new CustomFieldDto(Short.valueOf("6"), "value2", CustomFieldType.ALPHA_NUMERIC.getValue()));
return fields;
}
private void createInitialObjects() throws Exception {
MeetingBO meeting = new MeetingBO(WeekDay.MONDAY, Short.valueOf("1"), new java.util.Date(),
MeetingType.CUSTOMER_MEETING, "Delhi");
center = TestObjectFactory.createWeeklyFeeCenter("Center", meeting);
group = TestObjectFactory.createWeeklyFeeGroupUnderCenter("Group", CustomerStatus.GROUP_ACTIVE, center);
client = createClient(CustomerStatus.CLIENT_ACTIVE);
StaticHibernateUtil.flushSession();
}
private ClientBO createClient(CustomerStatus clientStatus) {
return TestObjectFactory.createClient("Client", clientStatus, group);
}
private void createParentObjects(CustomerStatus groupStatus) {
MeetingBO meeting = TestObjectFactory.createMeeting(TestObjectFactory.getTypicalMeeting());
center = TestObjectFactory.createWeeklyFeeCenter("Center", meeting);
group = TestObjectFactory.createWeeklyFeeGroupUnderCenter("Group", groupStatus, center);
StaticHibernateUtil.flushSession();
}
private MeetingBO getMeeting() throws Exception {
return new MeetingBO(WeekDay.MONDAY, Short.valueOf("1"), new java.util.Date(), MeetingType.CUSTOMER_MEETING,
"Delhi");
}
}