All Downloads are FREE. Search and download functionalities are using the official Maven repository.

core.apiCore.driver.ApiTestDriver Maven / Gradle / Ivy

package core.apiCore.driver;

import java.util.ArrayList;

import org.apache.commons.lang3.StringUtils;

import core.apiCore.helpers.CsvReader;
import core.support.logger.LogObject;
import core.support.logger.TestLog;
import core.support.objects.ServiceObject;
import core.support.objects.TestObject;
import core.support.objects.TestObject.testType;
import core.uiCore.drivers.AbstractDriverTestNG;

public class ApiTestDriver {

	public static void setTestId(ServiceObject serviceObject) {
		String csvFileName = getTestClass(serviceObject);

		TestObject.setTestName(serviceObject.getTestCaseID());
		TestObject.setTestId(csvFileName + "-" + serviceObject.getTestCaseID());
	}

	/**
	 * gets the test class based on the csv file name eg. TestCases_company has
	 * testId = company
	 * 
	 * @param serviceObject
	 * @return
	 */
	public static String getTestClass(ServiceObject serviceObject) {
		String testClass = serviceObject.getTcName();
		return getTestClass(testClass);
	}

	/**
	 * get test class name based on csv file name
	 * 
	 * @param csvFilename
	 * @return
	 */
	public static String getTestClass(String csvFilename) {
		if (StringUtils.isBlank(csvFilename))
			return csvFilename;

		String testClass = csvFilename.split("\\.")[0];
		testClass = testClass.replace(CsvReader.SERVICE_CSV_FILE_PREFIX, "");
		return testClass;
	}

	/**
	 * initialized testInfo with testId as key runs before test adds current driver
	 * info to test object note: each row in csv is treated as separate test, with
	 * separate test object test logs And config are shared by test class object,
	 * which is the csv file name
	 * 
	 * @param driverObject
	 */
	public void initTest(ServiceObject serviceObject) {
		String APP = "ServiceManager";

		setTestId(serviceObject);
		String testId = TestObject.currentTestId.get();
		TestLog.removeLogUtilHandler();

		// initialize once per test in csv file
		TestObject.initializeTest(testId);

		// pass the parent config And logs to new test. parameters are passed from one
		// test to another this way
		TestObject.getTestInfo().config = getParentTestObject(serviceObject).config;
		
		TestObject.getTestInfo().type = testType.service;
		TestObject.getTestInfo().app = APP;
		TestObject.getTestInfo().testCsvFileName = serviceObject.getTcName();

		TestObject.getTestInfo().className = getTestClass(serviceObject);

		TestObject.getTestInfo().testName = serviceObject.getTestCaseID();
		TestObject.getTestInfo().currentTestIndex = Integer.valueOf(serviceObject.getTcIndex());

		// set testCount
		TestObject.getTestInfo().testCountInCsvFile = Integer.valueOf(serviceObject.getTcCount());

		TestObject.getTestInfo().serviceObject = serviceObject;
	}

	public static TestObject getParentTestObject(ServiceObject serviceObject) {
		return TestObject.getTestInfo(serviceObject.getParent());
	}
	
	public static TestObject getParentTestObject(String parentId) {
		return TestObject.getTestInfo(parentId);
	}
	
	public static TestObject getParentTestObject() {
		return ApiTestDriver.getParentTestObject(TestObject.getTestInfo().serviceObject);
	}
	
	
	/**
	 * store all child tests objects in parent object as list
	 */
	public static void parentTrackChildTests() {
		
		if(TestObject.getTestInfo().serviceObject == null) return;
		String parentId = TestObject.getTestInfo().serviceObject.getParent();
		if(!TestObject.isTestObjectSet(parentId)) return;
		
		// if service test, parent test objects keeps track of the child test objects
		ApiTestDriver.getParentTestObject(parentId).testObjects.add(TestObject.getTestInfo());
	}
	
	/**
	 * tracks test logs
	 * getTestInfo().testLog: tracks logs of individual service tests
	 * on test success or failure, contains all the logs of all tests for batch logging
	 */
	public static void trackBatchTestLogs() {
		TestObject.getTestInfo().testLogAll = new ArrayList();
		
		if(isRunningServiceTest()) {
			ApiTestDriver.getParentTestObject().testLog.addAll(TestObject.getTestInfo().testLog);
			TestObject.getTestInfo().testLogAll.addAll(ApiTestDriver.getParentTestObject().testLog);
		}else
			TestObject.getTestInfo().testLogAll.addAll(TestObject.getTestInfo().testLog);
	}

	/**
	 * returns true if all tests in current csv file are completed
	 * 
	 * @return
	 */
	public static boolean isCsvTestComplete() {
		if (TestObject.getTestInfo().currentTestIndex == TestObject.getTestInfo().testCountInCsvFile - 1) {
			TestObject.getTestInfo().isTestComplete = true;
			return true;
		}
		return false;
	}

	/**
	 * returns true if all tests in current csv file are completed
	 * 
	 * @return
	 */
	public static boolean isCsvTestComplete(ServiceObject service) {
		if (Integer.valueOf(service.getTcIndex()) == Integer.valueOf(service.getTcCount()) - 1) {
			return true;
		}
		return false;
	}

	/**
	 * returns true if tests in csv file are starting
	 * 
	 * @return
	 */
	public static boolean isCsvTestStarted() {
		if (TestObject.getTestInfo().currentTestIndex == 0) {
			return true;
		}
		return false;
	}

	/**
	 * returns true if tests in csv file are starting
	 * 
	 * @return
	 */
	public static boolean isCsvTestStarted(int index) {
		if (index == 0) {
			return true;
		}
		return false;
	}

	public String getClassName() {
		String className = getClass().toString().substring(getClass().toString().lastIndexOf(".") + 1);
		return className;
	}

	/**
	 * is service test running
	 * 
	 * @return
	 */
	public static boolean isRunningServiceTest() {
		return TestObject.getTestInfo().type.equals(TestObject.testType.service);
	}
	
	public static boolean isRunningUITest() {
		return TestObject.getTestInfo().type.equals(TestObject.testType.uiTest);
	}

	/*
	 * is service test running
	 * 
	 * @return
	 */
	public static boolean isRunningServiceTest(Object[] testData) {
		Object[] data = getTestData(testData);
		
		if (data.length != CsvReader.SERVICE_CSV_COLUMN_COUNT)
			return false;
		if (testData[testData.length - 1] == null)
			return false;
		ServiceObject ServiceObject = CsvReader.mapToServiceObject(data);
		return ServiceObject.getTcType().equals(TestObject.testType.service.name());
	}

	/**
	 * set service test name based on test name specified in test data
	 * 
	 * @param testData
	 */
	public static void setServiceTestName(Object[] testData) {
		if (ApiTestDriver.isRunningServiceTest(testData)) {
			Object[] data = getTestData(testData);
			ServiceObject apiObject = CsvReader.mapToServiceObject(data);
			String testClass = ApiTestDriver.getTestClass(apiObject.getTcName());
			AbstractDriverTestNG.testName.set(testClass + "-" + apiObject.getTestCaseID());			
		}
	}
	
	/**
	 * get test data
	 * if from data provider, then it will be the first item in object array
	 * else it will be object array
	 * @param testData
	 * @return
	 */
	public static Object[] getTestData(Object[] testData) {
		Object[] data = null;
		
		if(testData.length == 1) {
			 data =  (Object[]) testData[0];
		}else
			data = testData;
		return data;	
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy