Skip to content

Commit 1c0ea8e

Browse files
1 parent 3f5d8da commit 1c0ea8e

File tree

12 files changed

+684
-655
lines changed

12 files changed

+684
-655
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# CHANGELOG
22

3-
## 1.0.0 (Unreleased)
3+
## 1.0.1
4+
5+
Bugfixes:
6+
- API: Incorrect Error status code processing JUnit5 -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/112)
7+
- API: Incorrect Skipped status code processing JUnit5 -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/111)
8+
9+
## 1.0.0
410

511
Features:
612
- Migrate to Angular 9 -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/101)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<groupId>unifi_reporting_api</groupId>
77
<artifactId>api</artifactId>
88
<packaging>war</packaging>
9-
<version>1.0.0</version>
9+
<version>1.0.1</version>
1010

1111
<properties>
1212
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

src/main/java/main/model/db/imports/ImportHandlers/JavaJUnitTestNG.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,17 @@
1515
import java.util.Date;
1616
import java.util.List;
1717

18-
public class JavaJUnitTestNG extends Handler{
18+
public class JavaJUnitTestNG extends Handler {
1919
private JavaJUnitTestNGHandler handler;
2020

2121
public JavaJUnitTestNG(File file, TestNameNodeType testNameNodeType, Date finishTime) throws AqualityException {
2222
handler = new JavaJUnitTestNGHandler(testNameNodeType, finishTime);
2323
try {
2424
this.parser.parse(file, handler);
2525
} catch (SAXException | IOException e) {
26-
throw new AqualityException("Cannot Parse TestNG file");
26+
throw new AqualityException(String.format("Cannot parse file '%1$s'. Error: %2$s",
27+
file.getName(),
28+
e.getMessage()));
2729
}
2830
}
2931

@@ -46,8 +48,8 @@ public List<TestDto> getTests() {
4648
public List<TestResultDto> getTestResults() {
4749
return handler.getTestResults();
4850
}
49-
50-
public void setTestRun(TestRunDto testRun){
51+
52+
public void setTestRun(TestRunDto testRun) {
5153
handler.setTestRun(testRun);
5254
}
5355
}

src/main/java/main/model/db/imports/SAXHandlers/JavaJUnitTestNGHandler.java

Lines changed: 67 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,118 +9,143 @@
99
import main.model.dto.project.TestSuiteDto;
1010
import org.xml.sax.Attributes;
1111

12-
import java.util.ArrayList;
13-
import java.util.Calendar;
14-
import java.util.Date;
15-
import java.util.List;
12+
import java.util.*;
13+
import java.util.function.Function;
1614

1715
import static main.model.db.imports.ResultStatus.*;
1816

1917
public class JavaJUnitTestNGHandler extends Handler {
2018
private TestSuiteDto testSuite = new TestSuiteDto();
2119
private List<TestResultDto> results = new ArrayList<>();
22-
private TestResultDto result = new TestResultDto();
20+
private TestResultDto result;
2321
private List<TestDto> tests = new ArrayList<>();
2422
private TestDto test = new TestDto();
2523
private String currentElement = "";
2624
private Calendar calendar = Calendar.getInstance();
2725
private Date currentTimeSlot;
2826
private TestNameNodeType testNameNodeType;
2927

28+
private static final String BLANK_RESULT = "$blank";
29+
3030
public JavaJUnitTestNGHandler(TestNameNodeType testNameNodeType, Date finishTime) throws AqualityException {
3131
super();
3232
this.testNameNodeType = testNameNodeType;
33-
result.setFail_reason("$blank");
3433
testRun.setFinish_time(finishTime);
34+
initEmptyResult();
3535
}
3636

3737
@Override
38-
public void startDocument(){
38+
public void startDocument() {
39+
// there are no needs to do something on this stages
3940
}
4041

4142
@Override
4243
public void endDocument() {
44+
// there are no needs to do something on this stages
4345
}
4446

4547
@Override
46-
public void startElement(String uri, String localName, String qName, Attributes attributes){
48+
public void startElement(String uri, String localName, String qName, Attributes attributes) {
4749
currentElement = qName;
48-
if(qName.equals("testsuite")){
50+
if (qName.equals("testsuite")) {
4951
calendar.setTime(testRun.getFinish_time());
50-
long longTime = Math.round(Double.parseDouble(attributes.getValue("time").replaceAll(",","").split("\\.")[0]));
52+
long longTime = Math.round(parseTime(attributes, Double::parseDouble));
5153
calendar.add(Calendar.SECOND, -(int) longTime);
5254
testRun.setStart_time(calendar.getTime());
5355
currentTimeSlot = testRun.getFinish_time();
54-
} else if(qName.equals("property") && attributes.getValue("name").equals("suite")){
56+
} else if (qName.equals("property") && attributes.getValue("name").equals("suite")) {
5557
testSuite.setName(attributes.getValue("value"));
56-
} else if(qName.equals("testcase")) {
57-
if(testNameNodeType.equals(TestNameNodeType.className)){
58-
test.setName(attributes.getValue("classname"));
59-
}else if(testNameNodeType.equals(TestNameNodeType.testName)){
60-
test.setName(attributes.getValue("name"));
61-
}
62-
58+
} else if (qName.equals("testcase")) {
59+
String name = getTestName(testNameNodeType, attributes);
60+
test.setName(name);
6361
result.setFinal_result_id(PASSED.getValue());
6462
result.setFinish_date(currentTimeSlot);
6563
calendar.setTime(currentTimeSlot);
66-
calendar.add(Calendar.SECOND, -Integer.parseInt(attributes.getValue("time").replaceAll(",","").split("\\.")[0]));
64+
calendar.add(Calendar.SECOND, -parseTime(attributes, Integer::parseInt));
6765
currentTimeSlot = calendar.getTime();
6866
result.setStart_date(currentTimeSlot);
69-
70-
} else if(qName.equals("failure")){
71-
67+
} else if (isError(qName)) {
7268
result.setFinal_result_id(FAILED.getValue());
73-
} else if(qName.equals("skipped")){
74-
75-
result.setFinal_result_id(PASSED.getValue());
69+
} else if (qName.equals("skipped")) {
70+
result.setFinal_result_id(NOT_EXECUTED.getValue());
7671
result.setFail_reason(attributes.getValue("message"));
7772
}
7873
}
7974

8075
@Override
81-
public void endElement(String uri, String localName, String qName){
82-
currentElement = "";
76+
public void endElement(String uri, String localName, String qName) {
8377
if (qName.equals("testcase")) {
8478
test.setInternalId(test.getName());
8579
tests.add(test);
8680
test = new TestDto();
8781
result.setInternalTestId(test.getName());
88-
if(result.getFail_reason() != null && result.getFail_reason().equals("$blank")) result.setFail_reason("");
82+
83+
String failReason = result.getFail_reason();
84+
if (failReason != null && failReason.equals(BLANK_RESULT)) {
85+
result.setFail_reason("");
86+
}
8987
results.add(result);
90-
result = new TestResultDto();
91-
result.setFail_reason("$blank");
88+
89+
currentElement = "";
90+
initEmptyResult();
9291
}
9392
}
9493

9594
@Override
96-
public void characters(char[] ch, int start, int length){
97-
String value = new String(ch,start,length);
98-
if(currentElement.equals("failure")){
95+
public void characters(char[] ch, int start, int length) {
96+
String value = new String(ch, start, length);
97+
if (isError(currentElement)) {
9998
String res = result.getFail_reason();
100-
if (res == null || res.equals("$blank")) res = "";
101-
result.setFail_reason("");
99+
res = (res == null || res.equals(BLANK_RESULT)) ? "" : res;
102100
result.setFail_reason(res.concat(value));
103-
}
104-
else if(currentElement.equals("system-out")){
101+
} else if (currentElement.equals("system-out")) {
105102
String log = result.getLog();
106-
if (log == null) log = "";
103+
if (log == null) log = "";
107104
result.setLog(log.concat(value));
108105
}
109106
}
110107

111-
public TestSuiteDto getTestSuite(){
108+
private void initEmptyResult() {
109+
result = new TestResultDto();
110+
result.setFail_reason(BLANK_RESULT);
111+
}
112+
113+
private String getTestName(TestNameNodeType type, Attributes attributes) {
114+
switch (type) {
115+
case className:
116+
return attributes.getValue("classname");
117+
case testName:
118+
return attributes.getValue("name");
119+
default:
120+
throw new IllegalArgumentException("There is no implementation for getting test name by type " + type);
121+
}
122+
}
123+
124+
private <T extends Number> T parseTime(Attributes attributes, Function<String, T> transform) {
125+
String value = attributes.getValue("time")
126+
.replace(",", "")
127+
.split("\\.")[0];
128+
return transform.apply(value);
129+
}
130+
131+
private boolean isError(String qName) {
132+
List<String> errorTags = Arrays.asList("failure", "error");
133+
return errorTags.contains(qName.toLowerCase());
134+
}
135+
136+
public TestSuiteDto getTestSuite() {
112137
return testSuite;
113138
}
114139

115-
public TestRunDto getTestRun(){
140+
public TestRunDto getTestRun() {
116141
return testRun;
117142
}
118143

119-
public List<TestDto> getTests(){
144+
public List<TestDto> getTests() {
120145
return tests;
121146
}
122147

123-
public List<TestResultDto> getTestResults(){
148+
public List<TestResultDto> getTestResults() {
124149
return results;
125150
}
126151
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package tests.workers.imports.JUnit;
2+
3+
import main.model.db.imports.Handler;
4+
import main.model.db.imports.ImportHandlers.JavaJUnitTestNG;
5+
import main.model.db.imports.TestNameNodeType;
6+
import org.testng.annotations.BeforeMethod;
7+
import tests.workers.imports.IHandlerTest;
8+
import utils.FileUtils;
9+
10+
import static org.testng.Assert.fail;
11+
12+
public abstract class AJUnitHandlerTest implements IHandlerTest {
13+
private JavaJUnitTestNG javaJUnitTestNG;
14+
private final String actualFileName;
15+
private final String resultsFileName;
16+
private final TestNameNodeType type;
17+
18+
AJUnitHandlerTest(TestNameNodeType type, String actualFileName, String expectedFileName) {
19+
this.type = type;
20+
this.actualFileName = actualFileName;
21+
this.resultsFileName = expectedFileName;
22+
}
23+
24+
@Override
25+
public Handler getHandler() {
26+
return javaJUnitTestNG;
27+
}
28+
29+
@Override
30+
public String getReportPath() {
31+
return "reports/JUnit/";
32+
}
33+
34+
@Override
35+
public String getTestFileName() {
36+
return resultsFileName;
37+
}
38+
39+
@BeforeMethod
40+
public void tryParse() {
41+
try {
42+
javaJUnitTestNG = new JavaJUnitTestNG(FileUtils.getResourceFile(getFilePath(actualFileName)), type, getFinishTime());
43+
} catch (Exception e) {
44+
fail(String.format("Failed on Handler Creating: %s", e.getMessage()), e);
45+
}
46+
}
47+
}
Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,10 @@
11
package tests.workers.imports.JUnit;
22

3-
import main.model.db.imports.Handler;
4-
import main.model.db.imports.ImportHandlers.JavaJUnitTestNG;
53
import main.model.db.imports.TestNameNodeType;
6-
import org.testng.annotations.BeforeMethod;
7-
import tests.workers.imports.IHandlerTest;
8-
import utils.FileUtils;
94

10-
import static org.testng.Assert.fail;
5+
public class ClassNameJUnitHandlerTest extends AJUnitHandlerTest {
116

12-
public class ClassNameJUnitHandlerTest implements IHandlerTest {
13-
14-
private JavaJUnitTestNG javaJUnitTestNGHandler;
15-
16-
@Override
17-
public Handler getHandler() {
18-
return javaJUnitTestNGHandler;
19-
}
20-
21-
@Override
22-
public String getReportPath() {
23-
return "reports/JUnit/";
24-
}
25-
26-
@Override
27-
public String getTestFileName() {
28-
return "testWithClassName.json";
29-
}
30-
31-
@BeforeMethod
32-
@Override
33-
public void tryParse() {
34-
try {
35-
javaJUnitTestNGHandler = new JavaJUnitTestNG(FileUtils.getResourceFile(getFilePath("TEST-JustTest.xml")), TestNameNodeType.className, getFinishTime());
36-
} catch (Exception e) {
37-
fail(String.format("Failed on Handler Creating: %s", e.getMessage()), e);
38-
}
7+
public ClassNameJUnitHandlerTest() {
8+
super(TestNameNodeType.className, "TEST-JustTest.xml", "testWithClassName.json");
399
}
4010
}
Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,10 @@
11
package tests.workers.imports.JUnit;
22

3-
import main.model.db.imports.Handler;
4-
import main.model.db.imports.ImportHandlers.JavaJUnitTestNG;
53
import main.model.db.imports.TestNameNodeType;
6-
import org.testng.annotations.BeforeMethod;
7-
import tests.workers.imports.IHandlerTest;
8-
import utils.FileUtils;
94

10-
import static org.testng.Assert.fail;
5+
public class TestNameJUnitHandlerTest extends AJUnitHandlerTest {
116

12-
public class TestNameJUnitHandlerTest implements IHandlerTest {
13-
private JavaJUnitTestNG javaJUnitTestNG;
14-
15-
@Override
16-
public Handler getHandler() {
17-
return javaJUnitTestNG;
18-
}
19-
20-
@Override
21-
public String getReportPath() {
22-
return "reports/JUnit/";
23-
}
24-
25-
@Override
26-
public String getTestFileName() {
27-
return "testWithTestName.json";
28-
}
29-
30-
@BeforeMethod
31-
public void tryParse() {
32-
try {
33-
javaJUnitTestNG = new JavaJUnitTestNG(FileUtils.getResourceFile(getFilePath("TEST-JustTest.xml")), TestNameNodeType.testName, getFinishTime());
34-
} catch (Exception e) {
35-
fail(String.format("Failed on Handler Creating: %s", e.getMessage()), e);
36-
}
7+
public TestNameJUnitHandlerTest() {
8+
super(TestNameNodeType.testName, "TEST-JustTest.xml", "testWithTestName.json");
379
}
3810
}

src/test/resources/reports/JUnit/TEST-JustTest.xml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="JustTest" time="30" tests="10" errors="0" skipped="0" failures="3">
2+
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="JustTest" time="30" tests="10" errors="1" skipped="0" failures="3">
33
<properties>
44
<property name="sun.desktop" value="windows"/>
55
<property name="awt.toolkit" value="sun.awt.windows.WToolkit"/>
@@ -65,7 +65,14 @@
6565
<testcase name="passedMethod1[0]" classname="JustTest" time="10"/>
6666
<testcase name="passedMethod2[0]" classname="JustTest" time="1"/>
6767
<testcase name="passedMethod3[0]" classname="JustTest" time="1"/>
68-
<testcase name="failedMethod1[0]" classname="JustTest" time="1"/>
68+
<testcase name="failedWithError" classname="JustTest" time="10">
69+
<error type="org.awaitility.core.ConditionTimeoutException">
70+
<![CDATA[org.awaitility.core.ConditionTimeoutException: Failed to instantiate alt unity driver on device on appium-jenkins-a-client-autotests-surefire-6-9:13000 within 40 seconds ]]>
71+
</error>
72+
<system-err>
73+
<![CDATA[Aug 05, 2020 1:11:26 PM io.appium.java_client.remote.AppiumCommandExecutor$1 lambda$0 INFO: Detected dialect: W3C ]]>
74+
</system-err>
75+
</testcase>
6976
<testcase name="failedMethod2[0]" classname="JustTest" time="30">
7077
<failure message="Failed" type="java.lang.AssertionError">java.lang.AssertionError: Failed
7178
at JustTest.failedMethod2(JustTest.java:31)

0 commit comments

Comments
 (0)