Skip to content

Commit f52682f

Browse files
Merge pull request #674 from prayascoriolis/ISSUE-207-Meta-Data-Section
[Issue #207] Implementing Feature : Meta Data section (Scenario JSON)
2 parents ad6c834 + d72a00d commit f52682f

File tree

8 files changed

+177
-7
lines changed

8 files changed

+177
-7
lines changed

core/src/main/java/org/jsmart/zerocode/core/domain/ScenarioSpec.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.util.ArrayList;
88
import java.util.List;
9+
import java.util.Map;
910

1011
@JsonInclude(JsonInclude.Include.NON_NULL)
1112
public class ScenarioSpec {
@@ -15,19 +16,30 @@ public class ScenarioSpec {
1516
private final String scenarioName;
1617
private final List<Step> steps;
1718
private final Parameterized parameterized;
19+
private static Map<String, List<String>> meta;
20+
21+
// Add getter and setter for meta
22+
public static Map<String, List<String>> getMeta() {
23+
return meta;
24+
}
25+
public void setMeta(Map<String, List<String>> meta) {
26+
this.meta = meta;
27+
}
1828

1929
@JsonCreator
2030
public ScenarioSpec(
2131
@JsonProperty("stepLoop") Integer loop,
2232
@JsonProperty("ignoreStepFailures") Boolean ignoreStepFailures,
2333
@JsonProperty("scenarioName") String scenarioName,
2434
@JsonProperty("steps") List<Step> steps,
25-
@JsonProperty("parameterized") Parameterized parameterized) {
35+
@JsonProperty("parameterized") Parameterized parameterized,
36+
@JsonProperty("meta") Map<String, List<String>> meta) {
2637
this.loop = loop;
2738
this.ignoreStepFailures = ignoreStepFailures;
2839
this.scenarioName = scenarioName;
2940
this.steps = steps;
3041
this.parameterized = parameterized;
42+
this.meta=meta;
3143
}
3244

3345
public Integer getLoop() {
@@ -58,6 +70,8 @@ public String toString() {
5870
", scenarioName='" + scenarioName + '\'' +
5971
", steps=" + steps +
6072
", parameterized=" + parameterized +
73+
", meta=" + meta +
6174
'}';
6275
}
76+
6377
}

core/src/main/java/org/jsmart/zerocode/core/domain/builders/ZeroCodeCsvReportBuilder.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ public class ZeroCodeCsvReportBuilder {
1313
String requestTimeStamp;
1414
String responseTimeStamp;
1515
private Double responseDelayMilliSec;
16+
private String metaAuthors;
17+
private String metaTickets;
18+
private String metaCategories;
19+
private String metaOthers;
1620

1721
public static ZeroCodeCsvReportBuilder newInstance() {
1822
return new ZeroCodeCsvReportBuilder();
@@ -21,6 +25,10 @@ public static ZeroCodeCsvReportBuilder newInstance() {
2125
public ZeroCodeCsvReport build() {
2226
ZeroCodeCsvReport built = new ZeroCodeCsvReport(scenarioName,scenarioLoop,stepName, stepLoop,
2327
correlationId, result, method, requestTimeStamp, responseTimeStamp, responseDelayMilliSec);
28+
built.setMetaAuthors(metaAuthors);
29+
built.setMetaTickets(metaTickets);
30+
built.setMetaCategories(metaCategories);
31+
built.setMetaOthers(metaOthers);
2432
return built;
2533
}
2634

@@ -73,4 +81,24 @@ public ZeroCodeCsvReportBuilder responseDelayMilliSec(Double responseDelayMilliS
7381
this.responseDelayMilliSec = responseDelayMilliSec;
7482
return this;
7583
}
84+
85+
public ZeroCodeCsvReportBuilder setMetaAuthors(String metaAuthors) {
86+
this.metaAuthors = metaAuthors;
87+
return this;
88+
}
89+
90+
public ZeroCodeCsvReportBuilder setMetaTickets(String metaTickets) {
91+
this.metaTickets = metaTickets;
92+
return this;
93+
}
94+
95+
public ZeroCodeCsvReportBuilder setMetaCategories(String metaCategories) {
96+
this.metaCategories = metaCategories;
97+
return this;
98+
}
99+
100+
public ZeroCodeCsvReportBuilder setMetaOthers(String metaOthers) {
101+
this.metaOthers = metaOthers;
102+
return this;
103+
}
76104
}

core/src/main/java/org/jsmart/zerocode/core/domain/builders/ZeroCodeExecReportBuilder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,25 @@
22

33
import org.jsmart.zerocode.core.domain.reports.ZeroCodeReportStep;
44
import org.jsmart.zerocode.core.domain.reports.ZeroCodeExecResult;
5+
import org.jsmart.zerocode.core.domain.ScenarioSpec;
56

67
import java.util.ArrayList;
78
import java.util.Collections;
89
import java.util.List;
10+
import java.util.Map;
911

1012
public class ZeroCodeExecReportBuilder {
1113
private String scenarioName;
1214
private Integer loop;
1315
private List<ZeroCodeReportStep> steps = Collections.synchronizedList(new ArrayList());
16+
private Map<String, List<String>> meta = ScenarioSpec.getMeta();
1417

1518
public static ZeroCodeExecReportBuilder newInstance() {
1619
return new ZeroCodeExecReportBuilder();
1720
}
1821

1922
public ZeroCodeExecResult build() {
20-
ZeroCodeExecResult built = new ZeroCodeExecResult(scenarioName, loop, steps);
23+
ZeroCodeExecResult built = new ZeroCodeExecResult(scenarioName, loop, steps, meta);
2124
return built;
2225
}
2326

core/src/main/java/org/jsmart/zerocode/core/domain/reports/ZeroCodeExecResult.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,25 @@
66

77
import java.util.ArrayList;
88
import java.util.List;
9+
import java.util.Map;
910

1011
@JsonInclude(JsonInclude.Include.NON_NULL)
1112
public class ZeroCodeExecResult {
1213
private String scenarioName;
1314
private Integer loop;
1415
private List<ZeroCodeReportStep> steps = new ArrayList<>();
15-
16+
private Map<String, List<String>> meta;
17+
1618
@JsonCreator
1719
public ZeroCodeExecResult(
1820
@JsonProperty("scenarioName")String scenarioName,
1921
@JsonProperty("stepLoop")Integer loop,
20-
@JsonProperty("steps")List<ZeroCodeReportStep> steps) {
22+
@JsonProperty("steps")List<ZeroCodeReportStep> steps,
23+
@JsonProperty("meta") Map<String, List<String>> meta) {
2124
this.scenarioName = scenarioName;
2225
this.loop = loop;
2326
this.steps = steps;
27+
this.meta = meta;
2428
}
2529

2630
public String getScenarioName() {
@@ -47,4 +51,9 @@ public String toString() {
4751
", steps=" + steps +
4852
'}';
4953
}
54+
55+
public Map<String, List<String>> getMeta() {
56+
return meta;
57+
}
58+
5059
}

core/src/main/java/org/jsmart/zerocode/core/domain/reports/csv/ZeroCodeCsvReport.java

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ public class ZeroCodeCsvReport {
1111
String requestTimeStamp;
1212
String responseTimeStamp;
1313
private Double responseDelayMilliSec;
14+
// defining meta data fields
15+
private String metaAuthors;
16+
private String metaTickets;
17+
private String metaCategories;
18+
private String metaOthers;
1419

1520
public ZeroCodeCsvReport(String scenarioName, Integer scenarioLoop, String stepName, Integer stepLoop,
1621
String correlationId, String result, String method, String requestTimeStamp,
@@ -67,6 +72,40 @@ public String getResponseTimeStamp() {
6772
return responseTimeStamp;
6873
}
6974

75+
// defining meta data field setters and getters
76+
77+
public String getMetaAuthors() {
78+
return metaAuthors;
79+
}
80+
81+
public void setMetaAuthors(String metaAuthors) {
82+
this.metaAuthors = metaAuthors;
83+
}
84+
85+
public String getMetaTickets() {
86+
return metaTickets;
87+
}
88+
89+
public void setMetaTickets(String metaTickets) {
90+
this.metaTickets = metaTickets;
91+
}
92+
93+
public String getMetaCategories() {
94+
return metaCategories;
95+
}
96+
97+
public void setMetaCategories(String metaCategories) {
98+
this.metaCategories = metaCategories;
99+
}
100+
101+
public String getMetaOthers() {
102+
return metaOthers;
103+
}
104+
105+
public void setMetaOthers(String metaOthers) {
106+
this.metaOthers = metaOthers;
107+
}
108+
70109
@Override
71110
public String toString() {
72111
return "ZeroCodeCsvReport{" +
@@ -75,11 +114,15 @@ public String toString() {
75114
", stepName='" + stepName + '\'' +
76115
", stepLoop=" + stepLoop +
77116
", correlationId='" + correlationId + '\'' +
117+
", requestTimeStamp='" + requestTimeStamp + '\'' +
118+
", responseDelayMilliSec=" + responseDelayMilliSec +
119+
", responseTimeStamp='" + responseTimeStamp + '\'' +
78120
", result='" + result + '\'' +
79121
", method='" + method + '\'' +
80-
", requestTimeStamp=" + requestTimeStamp +
81-
", responseTimeStamp=" + responseTimeStamp +
82-
", responseDelayMilliSec=" + responseDelayMilliSec +
122+
", metaAuthors='" + metaAuthors + '\'' +
123+
", metaTickets='" + metaTickets + '\'' +
124+
", metaCategories='" + metaCategories + '\'' +
125+
", metaOthers='" + metaOthers + '\'' +
83126
'}';
84127
}
85128
}

core/src/main/java/org/jsmart/zerocode/core/report/ZeroCodeReportGeneratorImpl.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.aventstack.extentreports.ExtentTest;
55
import com.aventstack.extentreports.Status;
66
import com.aventstack.extentreports.markuputils.CodeLanguage;
7+
import com.aventstack.extentreports.markuputils.ExtentColor;
78
import com.aventstack.extentreports.markuputils.MarkupHelper;
89
import com.fasterxml.jackson.databind.ObjectMapper;
910
import com.fasterxml.jackson.databind.ObjectWriter;
@@ -98,6 +99,17 @@ public void generateExtentReport() {
9899
thisReport.getResults().forEach(thisScenario -> {
99100
ExtentTest test = extentReports.createTest(thisScenario.getScenarioName());
100101

102+
/**This code checks if the scenario has meta data.
103+
If it does, it iterates through each meta data entry and adds it to
104+
the Extent report as an info label.**/
105+
if (thisScenario.getMeta() != null) {
106+
for (Map.Entry<String, List<String>> entry : thisScenario.getMeta().entrySet()) {
107+
String key = entry.getKey();
108+
List<String> values = entry.getValue();
109+
test.info(MarkupHelper.createLabel(key + ": " + String.join(", ", values), ExtentColor.BLUE));
110+
}
111+
}
112+
101113
// Assign Category
102114
test.assignCategory(DEFAULT_REGRESSION_CATEGORY); //Super set
103115
String[] hashTagsArray = optionalCategories(thisScenario.getScenarioName()).toArray(new String[0]);
@@ -276,6 +288,11 @@ public void generateCsvReport(List<ZeroCodeCsvReport> zeroCodeCsvReportRows) {
276288
.addColumn("responseTimeStamp")
277289
.addColumn("result")
278290
.addColumn("method")
291+
// This adds new columns to the CSV schema for each type of meta data.
292+
.addColumn("metaAuthors")
293+
.addColumn("metaTickets")
294+
.addColumn("metaCategories")
295+
.addColumn("metaOthers")
279296
.build();
280297

281298
CsvMapper csvMapper = new CsvMapper();
@@ -310,6 +327,18 @@ public List<ZeroCodeCsvReport> buildCsvRows() {
310327
csvFileBuilder.scenarioLoop(thisResult.getLoop());
311328
csvFileBuilder.scenarioName(thisResult.getScenarioName());
312329

330+
// Add meta information
331+
Map<String, List<String>> meta = thisResult.getMeta();
332+
if (meta != null) {
333+
/**This code retrieves the meta data from the test result. If meta data exists,
334+
* it joins the list of values for each meta data type into a comma-separated
335+
* string and adds it to the CSV row.**/
336+
csvFileBuilder.setMetaAuthors(String.join(", ", meta.getOrDefault("authors", Collections.emptyList())));
337+
csvFileBuilder.setMetaTickets(String.join(", ", meta.getOrDefault("tickets", Collections.emptyList())));
338+
csvFileBuilder.setMetaCategories(String.join(", ", meta.getOrDefault("categories", Collections.emptyList())));
339+
csvFileBuilder.setMetaOthers(String.join(", ", meta.getOrDefault("others", Collections.emptyList())));
340+
}
341+
313342
thisResult.getSteps().forEach(thisStep -> {
314343
csvFileBuilder.stepLoop(thisStep.getLoop());
315344
csvFileBuilder.stepName(thisStep.getName());
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.jsmart.zerocode.testhelp.tests.metadatatest;
2+
3+
import org.jsmart.zerocode.core.domain.JsonTestCase;
4+
import org.jsmart.zerocode.core.domain.TargetEnv;
5+
import org.jsmart.zerocode.core.runner.ZeroCodeUnitRunner;
6+
import org.junit.Test;
7+
import org.junit.runner.RunWith;
8+
9+
@TargetEnv("github_host.properties")
10+
@RunWith(ZeroCodeUnitRunner.class)
11+
public class MetaDataTest {
12+
@Test
13+
@JsonTestCase("metadatatest/metadatatest.json")
14+
public void testMetaData() throws Exception {
15+
16+
}
17+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"scenarioName": "Scenario - Get GitHub User Details with Metadata",
3+
"steps": [
4+
{
5+
"name": "get_user_details",
6+
"url": "/users/octocat",
7+
"method": "GET",
8+
"request": {
9+
},
10+
"assertions": {
11+
"status": 200,
12+
"body": {
13+
"login": "octocat",
14+
"id": 583231,
15+
"type": "User"
16+
}
17+
}
18+
}
19+
],
20+
"meta": {
21+
"authors": ["Emma", "Sidd", "Krish"],
22+
"tickets": ["ISSUE-519", "GT-312"],
23+
"categories": ["api", "regression"],
24+
"description": ["This test verifies the GitHub user API"],
25+
"last_updated": ["2023-05-15"]
26+
}
27+
}

0 commit comments

Comments
 (0)