package jhydra.core.testcase.result;
import jhydra.core.properties.INameValue;
import jhydra.core.testcase.ITestDataAnalyzer;
import org.joda.time.DateTime;
import org.joda.time.LocalDateTime;
import org.joda.time.format.DateTimeFormat;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.Matchers.anyListOf;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Author: jantic
* Date: 3/10/13
*/
public class NormalTestCaseResultTests {
/***Tests on test case result without any failures****************************************/
@Test
public void noFailuresResult_getResultCategory_PASS(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "pass";
final String actual = normalTestCaseResult.getResultCategory().toString();
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getErrorMessage_size_0(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final int expected = 0;
final int actual = normalTestCaseResult.getErrorMessages().size();
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getAllTestValueResults_1_getExpectedValue_expected2(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "expected2";
final String actual = normalTestCaseResult.getAllTestValueResults().get(1).getExpectedValue();
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getAllTestValueResults_1_getActualValue_actual2(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "actual2";
final String actual = normalTestCaseResult.getAllTestValueResults().get(1).getActualValue();
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getAllTestValueResults_1_getTestValueResultType_PASS(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "PASS";
final String actual = normalTestCaseResult.getAllTestValueResults().get(1).getTestValueResultType().name();
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getAllTestValueResults_1_getVariableName_number2(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "number2";
final String actual = normalTestCaseResult.getAllTestValueResults().get(1).getVariableName();
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getAllTestValueResults_1_getComments_comments2(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "comments2";
final String actual = normalTestCaseResult.getAllTestValueResults().get(1).getComments();
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getRunStartTime_correctDateTime(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "09-Mar-13 08.50.10 AM";
final String dateTimePattern = "dd-MMM-yy hh.mm.ss aa";
final String actual = normalTestCaseResult.getRunStartTime().toString(DateTimeFormat.forPattern(dateTimePattern));
Assert.assertEquals(expected, actual);
}
@Test
public void noFailuresResult_getRunCompletedTime_correctDateTime(){
final NormalTestCaseResult normalTestCaseResult = getNoFailuresTestResult();
final String expected = "09-Mar-13 08.53.12 AM";
final String dateTimePattern = "dd-MMM-yy hh.mm.ss aa";
final String actual = normalTestCaseResult.getRunCompletedTime().toString(DateTimeFormat.forPattern(dateTimePattern));
Assert.assertEquals(expected, actual);
}
/***Tests on test case result with all passes except 1 known failure****************************************/
@Test
public void allPassOneKnownResult_getResultCategory_PASS(){
final NormalTestCaseResult normalTestCaseResult = getAllPassOneKnownFailureTestResult();
final String expected = "pass";
final String actual = normalTestCaseResult.getResultCategory().toString();
Assert.assertEquals(expected, actual);
}
/***Tests on test case result with all passes except 1 failure****************************************/
@Test
public void allPassOneKnownResult_getResultCategory_VALUE_FAILURE(){
final NormalTestCaseResult normalTestCaseResult = getAllPassOneFailureTestResult();
final String expected = "value failure";
final String actual = normalTestCaseResult.getResultCategory().toString();
Assert.assertEquals(expected, actual);
}
/***Tests on test case result with 1 pass, 1 known and 1 failure****************************************/
@Test
public void onePassOneFailureOneKnownResult_getResultCategory_VALUE_FAILURE(){
final NormalTestCaseResult normalTestCaseResult = getOnePassOneFailureOneKnownFailureTestResult();
final String expected = "value failure";
final String actual = normalTestCaseResult.getResultCategory().toString();
Assert.assertEquals(expected, actual);
}
/***Tests on test case result with no values to test****************************************/
@Test
public void noValuesToTestResult_getResultCategory_PASS(){
final NormalTestCaseResult normalTestCaseResult = getNormalTestResultWithoutValuesToTest();
final String expected = "pass";
final String actual = normalTestCaseResult.getResultCategory().toString();
Assert.assertEquals(expected, actual);
}
/***PRIVATE METHODS******************************************************/
private NormalTestCaseResult getNoFailuresTestResult(){
return getNormalTestResult(TestValueResultType.PASS, TestValueResultType.PASS, TestValueResultType.PASS);
}
private NormalTestCaseResult getAllPassOneKnownFailureTestResult(){
return getNormalTestResult(TestValueResultType.PASS, TestValueResultType.KNOWN, TestValueResultType.PASS);
}
private NormalTestCaseResult getAllPassOneFailureTestResult(){
return getNormalTestResult(TestValueResultType.PASS, TestValueResultType.FAIL, TestValueResultType.PASS);
}
private NormalTestCaseResult getOnePassOneFailureOneKnownFailureTestResult(){
return getNormalTestResult(TestValueResultType.KNOWN, TestValueResultType.FAIL, TestValueResultType.PASS);
}
private NormalTestCaseResult getNormalTestResult(TestValueResultType result1, TestValueResultType result2, TestValueResultType result3){
final ITestDataAnalyzer testDataAnalyzer = mock(ITestDataAnalyzer.class);
final List<TestValueResult> testValueResults = new ArrayList<>();
testValueResults.add(TestValueResult.getInstance("expected1", "actual1", result1, "number1", "comments1"));
testValueResults.add(TestValueResult.getInstance("expected2", "actual2", result2, "number2", "comments2"));
testValueResults.add(TestValueResult.getInstance("expected3", "actual3", result3, "number3", "comments3"));
when(testDataAnalyzer.getValueResults(anyListOf(INameValue.class))).thenReturn(testValueResults);
final List<INameValue> actualValues = new ArrayList<>();
final String pattern = "dd-MMM-yy hh.mm.ss aa";
final DateTime runStartTime = LocalDateTime.parse("09-MAR-13 08.50.10 AM", DateTimeFormat.forPattern(pattern)).toDateTime();
final DateTime runCompletedTime = LocalDateTime.parse("09-MAR-13 08.53.12 AM", DateTimeFormat.forPattern(pattern)).toDateTime();
return new NormalTestCaseResult(testDataAnalyzer, actualValues, runStartTime, runCompletedTime);
}
private NormalTestCaseResult getNormalTestResultWithoutValuesToTest(){
final ITestDataAnalyzer testDataAnalyzer = mock(ITestDataAnalyzer.class);
final List<TestValueResult> testValueResults = new ArrayList<>();
when(testDataAnalyzer.getValueResults(anyListOf(INameValue.class))).thenReturn(testValueResults);
final List<INameValue> actualValues = new ArrayList<>();
final String pattern = "dd-MMM-yy hh.mm.ss aa";
final DateTime runStartTime = LocalDateTime.parse("09-MAR-13 08.50.10 AM", DateTimeFormat.forPattern(pattern)).toDateTime();
final DateTime runCompletedTime = LocalDateTime.parse("09-MAR-13 08.53.12 AM", DateTimeFormat.forPattern(pattern)).toDateTime();
return new NormalTestCaseResult(testDataAnalyzer, actualValues, runStartTime, runCompletedTime);
}
}