Search code examples
javascriptrecursionrecursive-querytestcasewsh

Java Script: how to create test case from given input


I am in need of help. I have to create test cases from excel which is below format:

**Current   NextState    Function Type**

GREETING-1,repeat,PMSG

REPEAT,CallerType,PMSG

CALLERTYPE,XferBridges(DTMF:1),ClaimMenu(DTMF:2),XferLine2(DTMF:3),XferLine2(DTMF:4),Menu

CLAIMMENU,RejectMenu(DTMF:1),XferLine2(DTMF:2),Menu

REJECTMENU,NotCovered(DTMF:1),Terminated(DTMF:2),NMCard(DTMF:3),NMGroup(DTMF:4),Refill(DTMF:5),NoDrugNDC(DTMF:6),XferLine2(DTMF:2),Menu

NOTCOVERED,RejectMenu(DTMF:1),Menu

TERMINATED,XferLine2(DTMF:1),Menu

NMCARD,XferLine2(DTMF:1),Menu

NMGROUP,XferLine2(DTMF:1),Menu

REFILL,XferLine2(DTMF:1),Menu

NODRUGNDC,XferLine2(DTMF:1),Menu

XFERBRIDGES,STOP,PMSG

XFERLINE2,STOP,PMSG

THANKYOU,GoodBye,PMSG

GOODBYE,STOP,PMSG

The tool will generate n number of test cases. Please guide me what code I shall write which can generate below type test case:

Case 1: Greeting-1 -> Repeat -> CallerType, Press DTMF 1 ->XferBridges ->STOP

Case 2: Greeting-1 -> Repeat -> CallerType, Press DTMF 2 ->ClaimMenu, Press DTMF 1 -> RejectMenu, Press DTMF 1 ->NotCovered, Press DTMF1 -> RejectMenu -> STOP( from entering infinte into loop)

Case 3: Greeting-1 -> Repeat -> CallerType, Press DTMF 2 ->ClaimMenu, Press DTMF 1 -> RejectMenu, Press DTMF 2 -> Terminated, Press DTMF 1 ->XferLine2 ->STOP

Case 4: Greeting-1 -> Repeat -> CallerType, Press DTMF 2 ->ClaimMenu, Press DTMF 1 -> RejectMenu, Press DTMF 3 -> NMCard, Press DTMF 1 ->XferLine2 ->STOP

**.**


**.**

and so on

You might have got an idea what I am doing here. Trying to create test cases for each call flow, if next state is PMSG then adding it to the same array, but if next state is MENU then creating new array( which means new test case) which will be going through all DTMF option and its corresponding next state and so on

I used recursive loop to get output, but it's giving wrong values.

Code:

function generateTestCaseList(nextState) {
		var incCount = 1;
		
		var positionInt = findNextState(nextState);
		var tempStoredArray = allState[positionInt];
		
		if(tempStoredArray[0].toLowerCase() == menuName.toLowerCase())
		{
			incCount = menuPostion;
			f = true;
		}	
		else if(tempStoredArray[0].toLowerCase() == nextMenuName.toLowerCase())
			incCount = nextMenuPostion;
					
		var tempStr = getState(tempStoredArray, incCount);
		var tempArr = tempStr.toLowerCase().split("%");
		
		nextState = tempArr[1];
		parentStr = parentStr + tempArr[0];
		var cntInfi = parentStr.toLowerCase().split(nextState).length -1;
		
		if(cntInfi == 2)
		{
			return parentStr;
		}
		else if(nextState != "stop")
		{
			var pstInt = findNextState(nextState);
			var tempArr = allState[pstInt];
			
			if(tempArr[tempArr.length -1] == "Menu" && f == true)
			{	
				nextMenuName = tempArr[0];
				var tempMenuPsx= tempArr.length - 2;
				//WScript.Echo("tempMenuPsx"+nextMenuName+tempMenuPsx);
				for(var k=tempMenuPsx;k >0 ;k--)
				{
					nextMenuPostion = k;
					//WScript.Echo("nextMenuPostion"+nextMenuPostion);
					WScript.Echo("parentStr"+parentStr);
					var temp = generateTestCaseList(nextState);
					childStr = childStr +temp;
					resultList.push(childStr);
					childStr = "";
					
				}
				
			}
			else
			{
				 generateTestCaseList(nextState);
			}
			
		}
		else
		{
			return parentStr;
		}
		
}

function findNextState(nextState) {
	
	for(var l=0;l<allState.length;l++)
	{
		if(allState[l][0].toLowerCase()==nextState.toLowerCase())
			return l;
	}
	return 0;			
}

function getState(tempArray,l) {
	
	var tempStr = tempArray[0];
				
	if(tempArray[2] =="GETV")
		tempStr = tempStr +";Voice: Say Something;"+tempArray[2]+";$%"+tempArray[1];
	else if(tempArray[2] =="PMSG")
		tempStr = tempStr +";"+tempArray[2]+";$%"+tempArray[1];
	else
		tempStr = tempStr +";DTMF:"+l+";"+tempArray[tempArray.length -1]+";$%"+tempArray[l];
		
	return tempStr;
}

result( "$" is next state separator here):

1. greeting-1;pmsg;$repeat;pmsg;$callertype;dtmf:4;menu;$xferline2;pmsg;$
2. greeting-1;pmsg;$repeat;pmsg;$callertype;dtmf:3;menu;$xferline2;pmsg;$
3. greeting-1;pmsg;$repeat;pmsg;$callertype;dtmf:2;menu;$claimmenu;dtmf:2;menu;$xferline2;pmsg;$claimmenu;dtmf:1;menu;$rejectmenu;dtmf:7;menu;$xferline2;pmsg;$rejectmenu;dtmf:6;menu;$nodrugndc;dtmf:1;menu;$

4. greeting-1;pmsg;$repeat;pmsg;$callertype;dtmf:2;menu;$claimmenu;dtmf:2;menu;$xferline2;pmsg;$claimmenu;dtmf:1;menu;$rejectmenu;dtmf:7;menu;$xferline2;pmsg;$rejectmenu;dtmf:6;menu;$nodrugndc;dtmf:1;menu;$rejectmenu;dtmf:1;menu;$notcovered;dtmf:1;menu;$rejectmenu;dtmf:7;menu;$

5. greeting-1;pmsg;$repeat;pmsg;$callertype;dtmf:2;menu;$claimmenu;dtmf:2;menu;$xferline2;pmsg;$claimmenu;dtmf:1;menu;$rejectmenu;dtmf:7;menu;$xferline2;pmsg;$rejectmenu;dtmf:6;menu;$nodrugndc;dtmf:1;menu;$rejectmenu;dtmf:1;menu;$notcovered;dtmf:1;menu;$rejectmenu;dtmf:7;menu;$rejectmenu;dtmf:6;menu;$nodrugndc;dtmf:1;menu;$

The output contain all DTMF option in single call flow which is worng. Any input will ge great help.


Solution

  • I have got the solution, it's not efficient but does give the desired output.

    function generateTestPlan() {
    	
    	var menuCount = 0;
    	for(var g=0;g<allState.length;g++)
    	{
    		var tempArr = allState[g];
    		
    		if(tempArr[tempArr.length-1] == "Menu")
    		{
    			var tempArr = [];
    			tempArr.push(allState[g][0]);
    			for(var i =1;i<allState[g].length-1; i++)
    			{
    				tempArr.push(allState[g][i]);
    				menuCount++;
    			}
    			
    			menuList.push(tempArr);
    		}
    	}
    	var firstState = allState[0][0];
    		
    	for(var k=0;k < menuCount*1000;k++)
    	{
    		getCallFlow(firstState,stack1)
    		stack.push(stack1);
    		stack1 = [];
    	}
    	
    	stack = eliminateDuplicates(stack);
    
    }
    
    function getCallFlow (nextState,stack1)
    {
    		var positionInt = findNextState(nextState);
    		var tempStoredArray = allState[positionInt];
    		
    		var g = 0;
    		for(var b= 0; b < menuList.length ;b++)
    		{
    			if(menuList[b][0] == tempStoredArray[0])
    			{
    				var len = menuList[b].length -1;
    				g =Math.floor(Math.random() * len) + 1 ; 
    			}
    		}
    		
    		var tempStr = getState(tempStoredArray,g);
    		
    		var tempArr = tempStr.toLowerCase().split("%");
    		var nextState1 = "";
    		var multipleGoto = tempArr[1].toLowerCase().split("@").length -1;
    		
    		if(multipleGoto > 1)
    		{
    			var multipleArray = tempArr[1].toLowerCase().split("@");
    			//WScript.Echo(multipleArray)
    			var len = multipleArray.length -1;
    			var choose =Math.floor(Math.random() * len) + 1  ;
    			//WScript.Echo(choose)
    			nextState1 = multipleArray[choose];
    			//WScript.Echo(nextState1)
    		}
    		else
    		{
    			nextState1 = tempArr[1];
    		}
    		
    		stack1.push(tempArr[0]);
    		
    		if(checkIfArrayIsUnique(stack1) == false)
    		{
    			stack1.push("stop");
    			return ;
    		}
    		
    		if(nextState1 == "stop")
    		{
    			stack1.push("stop");
    			return ;
    		}
    		else
    		{
    			getCallFlow(nextState1,stack1);
    		}
    		
    }
    function findNextState(nextState) {
    	
    	for(var l=0;l<allState.length;l++)
    	{
    		if(allState[l][0].toLowerCase()==nextState.toLowerCase())
    			return l;
    	}
    	return 0;			
    }