org.mule.modules.salesforce.automation.testcases.BatchResultStreamTestCases.java Source code

Java tutorial

Introduction

Here is the source code for org.mule.modules.salesforce.automation.testcases.BatchResultStreamTestCases.java

Source

/**
 * Mule Salesforce Connector
 *
 * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 *
 * The software in this package is published under the terms of the CPAL v1.0
 * license, a copy of which has been included with this distribution in the
 * LICENSE.txt file.
 */

package org.mule.modules.salesforce.automation.testcases;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.mule.api.MuleEvent;
import org.mule.api.processor.MessageProcessor;
import org.mule.util.IOUtils;

import com.sforce.async.BatchInfo;
import com.sforce.async.JobInfo;

public class BatchResultStreamTestCases extends SalesforceTestParent {

    private MessageProcessor createJobFlow;
    private MessageProcessor createBatchFlow;
    private MessageProcessor batchInfoFlow;
    private MessageProcessor batchResultStreamFlow;
    private MessageProcessor closeJobFlow;
    private MessageProcessor deleteFlow;

    @Before
    public void setUp() {

        createJobFlow = lookupFlowConstruct("create-job");
        createBatchFlow = lookupFlowConstruct("create-batch");
        batchInfoFlow = lookupFlowConstruct("batch-info");
        batchResultStreamFlow = lookupFlowConstruct("batch-result-stream");
        closeJobFlow = lookupFlowConstruct("close-job");
        deleteFlow = lookupFlowConstruct("delete-from-message");

        testObjects = (HashMap<String, Object>) context.getBean("batchResultStreamTestData");

        try {

            MuleEvent response = (MuleEvent) createJobFlow.process(getTestEvent(testObjects));
            JobInfo jobInfo = (JobInfo) response.getMessage().getPayload();

            testObjects.put("jobId", jobInfo.getId());
            testObjects.put("jobInfoRef", jobInfo);

        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }

    }

    @After
    public void tearDown() {

        try {

            if (testObjects.containsKey("idsToDeleteFromMessage")) {
                deleteFlow.process(getTestEvent(testObjects));
            }

            closeJobFlow.process(getTestEvent(testObjects));

        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }

    }

    @Category({ RegressionTests.class })
    @Test
    public void testBatchResultStream() {

        BatchInfo batchInfo;

        String[] results;
        String id;
        String success;
        boolean isSuccess = true;

        List<String> sObjectsIds = new ArrayList<String>();

        try {

            batchInfo = getBatchInfoByOperation(createBatchFlow);

            do {

                Thread.sleep(BATCH_PROCESSING_DELAY);
                testObjects.put("batchInfoRef", batchInfo);
                batchInfo = getBatchInfoByOperation(batchInfoFlow);

            } while (batchInfo.getState().equals(com.sforce.async.BatchStateEnum.InProgress)
                    || batchInfo.getState().equals(com.sforce.async.BatchStateEnum.Queued));

            assertTrue(batchInfo.getState().equals(com.sforce.async.BatchStateEnum.Completed));

            MuleEvent response = (MuleEvent) batchResultStreamFlow.process(getTestEvent(testObjects));
            String operationResponse = IOUtils.toString((InputStream) response.getMessage().getPayload());

            results = StringUtils.substringsBetween(operationResponse, "<result>", "</result>");
            for (int index = 0; index < results.length; index++) {

                id = StringUtils.substringBetween(results[index], "<id>", "</id>");
                success = StringUtils.substringBetween(results[index], "<success>", "</success>");

                if (success.equals("true")) {
                    sObjectsIds.add(id);
                } else {
                    isSuccess = false;
                }

            }

            testObjects.put("idsToDeleteFromMessage", sObjectsIds);

            assertTrue(isSuccess);

        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }

    }

}