package org.mifos.test.acceptance.ppi; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.List; import org.joda.time.DateTime; import org.mifos.framework.util.ConfigurationLocator; import org.mifos.framework.util.DbUnitUtilities; import org.mifos.test.acceptance.framework.UiTestCaseBase; import org.mifos.test.acceptance.framework.client.CreateClientEnterPersonalDataPage; import org.mifos.test.acceptance.framework.loan.QuestionResponseParameters; import org.mifos.test.acceptance.framework.questionnaire.AttachQuestionGroupParameters; import org.mifos.test.acceptance.framework.testhelpers.ClientTestHelper; import org.mifos.test.acceptance.framework.testhelpers.FormParametersHelper; import org.mifos.test.acceptance.framework.testhelpers.QuestionGroupTestHelper; import org.mifos.test.acceptance.remote.DateTimeUpdaterRemoteTestingService; import org.mifos.test.acceptance.remote.InitializeApplicationRemoteTestingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @SuppressWarnings("PMD.SignatureDeclareThrowsException") @ContextConfiguration(locations = {"classpath:ui-test-context.xml"}) @Test(groups = {"ppi", "acceptance", "ui"}) public class PPITest extends UiTestCaseBase { @Autowired private InitializeApplicationRemoteTestingService initRemote; @Autowired private DbUnitUtilities dbUnitUtilities; private QuestionGroupTestHelper questionGroupTestHelper; private ClientTestHelper clientTestHelper; @Override @BeforeMethod(alwaysRun=true) public void setUp() throws Exception { super.setUp(); questionGroupTestHelper= new QuestionGroupTestHelper(selenium); clientTestHelper = new ClientTestHelper(selenium); DateTimeUpdaterRemoteTestingService dateTimeUpdaterRemoteTestingService = new DateTimeUpdaterRemoteTestingService(selenium); DateTime targetTime = new DateTime(2009,11,7,10,0,0,0); dateTimeUpdaterRemoteTestingService.setDateTime(targetTime); } //http://mifosforge.jira.com/browse/MIFOSTEST-147 public void verifyPPIQuestionGroup() throws Exception { //Given initRemote.dataLoadAndCacheRefresh(dbUnitUtilities, "acceptance_small_008_dbunit.xml", dataSource, selenium); String configPath = new ConfigurationLocator().getConfigurationDirectory(); String fileName= "PPISurveyBANGLADESH2009.xml"; String sourcePath = PPITest.class.getResource("/mpesa/"+fileName).getFile(); String qgDestPath = configPath +"/uploads/questionGroups/"; String destPath = qgDestPath + fileName; new File(qgDestPath).mkdirs(); File sourceFile = new File(sourcePath); File destFile = new File(destPath); List <String> QGlist = new ArrayList<String>(); QGlist.add("PPI Bangladesh 2009"); CreateClientEnterPersonalDataPage.SubmitFormParameters formParameters = FormParametersHelper.getClientEnterPersonalDataPageFormParameters(); QuestionResponseParameters responseParams = getQuestionResponseParametersForPPIIndia2008(); AttachQuestionGroupParameters attachParams = new AttachQuestionGroupParameters(); attachParams.setQuestionGroupName("PPI Bangladesh 2009"); attachParams.addTextResponse("Date Survey Was Taken", "24/01/2011"); attachParams.addCheckResponse("How many household members are 11-years-old or younger?", "Four or more"); attachParams.addCheckResponse("Does any household member work for a daily wage?", "Yes"); attachParams.addCheckResponse("What type of latrine does the household use?", "Open field"); attachParams.addCheckResponse("How many rooms does the household occupy (excluding rooms used for business)?", "Four"); attachParams.addCheckResponse("What is the main construction material of the walls?", "Brick/cement"); attachParams.addCheckResponse("What is the main construction material of the roof?", "Cement"); attachParams.addCheckResponse("What is the total cultivable agricultural land owned by the household?", "More than 1 acre"); attachParams.addCheckResponse("Does the household own a television?", "Yes"); attachParams.addCheckResponse("Does the household own a two-in-one cassette player?", "No"); attachParams.addCheckResponse("Does the household own a wristwatch?", "Yes"); String[] eventList = {"View Client","Create Client", "Close Client"}; //When if(!destFile.exists()){ copyFile(sourceFile, destFile); } questionGroupTestHelper.activatePPI("BANGLADESH2009"); questionGroupTestHelper.changeAppliesTo("PPI Bangladesh 2009", eventList); questionGroupTestHelper.navigateToViewQuestionGroups(QGlist); String clientName = clientTestHelper.createClientWithQuestionGroups(formParameters, "MyGroup1232993846342", responseParams).getHeading(); attachParams.setTarget(clientName); clientTestHelper.activateClient(clientName); questionGroupTestHelper.attachQuestionGroupToClient(attachParams); clientTestHelper.closeClientWithQG(clientName, responseParams); } private QuestionResponseParameters getQuestionResponseParametersForPPIIndia2008() { QuestionResponseParameters responseParams = new QuestionResponseParameters(); responseParams.addTextAnswer("questionGroups[0].sectionDetails[0].questions[0].value", "24/01/2011"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[1].value", "Four or more"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[2].value", "Yes"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[3].value", "Open field"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[4].value", "Four"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[5].value", "Brick/cement"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[6].value", "Cement"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[7].value", "More than 1 acre"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[8].value", "Yes"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[9].value", "No"); responseParams.addSingleSelectAnswer("questionGroups[0].sectionDetails[0].questions[10].value", "Yes"); return responseParams; } private static void copyFile(File sourceFile, File destFile) throws IOException { FileChannel source = null; FileChannel destination = null; try { source = new FileInputStream(sourceFile).getChannel(); destination = new FileOutputStream(destFile).getChannel(); destination.transferFrom(source, 0, source.size()); } finally { if(source != null) { source.close(); } if(destination != null) { destination.close(); } } } }