Skip to content

Commit 38c5b80

Browse files
committed
Manual speed up test cases loading, coloring by test case result
1 parent 50cfa8f commit 38c5b80

File tree

4 files changed

+182
-27
lines changed

4 files changed

+182
-27
lines changed

test/integration/modules/integration-test/test-case/test-case-result.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class TestCaseResult {
8282
this.#testCaseObj.testSuiteResults.PASSED.push(
8383
this.#testCaseObj.testCase.testName
8484
);
85+
this.#cnsl.writePassedLog(" " + this.#getFormattedTestName());
8586
this.#cnsl.log(
8687
("[ " + "PASSED".padEnd(this.#cnsl.getTestStatusPad(), " ") + " ] ")
8788
.success +
@@ -180,6 +181,7 @@ class TestCaseResult {
180181
this.#testCaseObj.testSuiteResults.WARNING.push(
181182
this.#testCaseObj.testCase.testName
182183
);
184+
this.#cnsl.writeWarningsLog(" " + this.#getFormattedTestName());
183185
this.#createTestCaseResultManual();
184186
this.#cnsl.log(
185187
(
@@ -215,6 +217,7 @@ class TestCaseResult {
215217
this.#testCaseObj.testSuiteResults.FAILED.push(
216218
this.#testCaseObj.testCase.testName
217219
);
220+
this.#cnsl.writeFailedLog(" " + this.#getFormattedTestName());
218221
this.#createTestCaseResultManual();
219222
this.#createTestCaseResultErrorMsg();
220223
if (failureMsgs) {
@@ -228,6 +231,7 @@ class TestCaseResult {
228231
this.#testCaseObj.testSuiteResults.FAILED.push(
229232
this.#testCaseObj.testCase.testName
230233
);
234+
this.#cnsl.writeFailedLog(" " + this.#getFormattedTestName());
231235
this.#createTestCaseResultManual();
232236
this.#createTestCaseResultErrorMsg();
233237
}
@@ -273,12 +277,9 @@ class TestCaseResult {
273277

274278
#createTestCaseResultManual() {
275279
this.#testCaseObj.testSuiteResults.MANUAL.push(this.#testCaseObj.testCase);
276-
let formatted = path.relative(
277-
TestEnv.getTestSuitePath(),
278-
path.join(TestEnv.getWorkspacePath(), this.#testCaseObj.testCase.testName)
279-
);
280+
let formatted = this.#getFormattedTestName()
280281
this.#testCaseObj.testSuiteResults.MANUAL_FORMATTED.push(formatted);
281-
this.#cnsl.writeFailure(" " + formatted);
282+
this.#cnsl.writeFailuresLog(" " + formatted);
282283
}
283284

284285
#deleteTestCaseResult() {
@@ -302,6 +303,13 @@ class TestCaseResult {
302303
});
303304
}
304305

306+
#getFormattedTestName() {
307+
return path.relative(
308+
TestEnv.getTestSuitePath(),
309+
path.join(TestEnv.getWorkspacePath(), this.#testCaseObj.testCase.testName)
310+
);
311+
}
312+
305313
#createImage(data, fileAdd) {
306314
return new Promise((resolve, reject) => {
307315
let testCaseResultPath = path.join(

test/integration/modules/integration-test/test-console.js

Lines changed: 59 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ const TestEnv = require("../../modules/integration-test/test-env.js");
55
const Console = require("../../modules/console/console.js");
66

77
class TestConsole extends Console {
8+
#fileLog;
9+
810
#testSuiteLogPath;
9-
#testSuiteFailuresPath;
10-
#testSuiteFailuresPathReady;
11+
12+
#resultTypes = ['passed', 'warnings', 'failed', 'failures'];
13+
#testResultsLogsReady;
1114

1215
#testStatusPad = 8;
1316
#testNumberPad = 0;
@@ -20,15 +23,11 @@ class TestConsole extends Console {
2023
TestEnv.getTestSuiteReportPath(),
2124
pathPrefix
2225
);
23-
var testSuiteFailuresPath = path.join(
24-
TestEnv.getTestSuiteReportPath(),
25-
"failures.log"
26-
);
2726
}
2827
super(filePrefix, testSuiteLogPath);
28+
this.#fileLog = fileLog;
2929
this.#testSuiteLogPath = testSuiteLogPath;
30-
this.#testSuiteFailuresPath = testSuiteFailuresPath;
31-
this.#testSuiteFailuresPathReady = this.#createFailuresLog();
30+
this.#testResultsLogsReady = this.#createResultsLogs();
3231
}
3332

3433
getTestSuiteLogPath() {
@@ -59,15 +58,27 @@ class TestConsole extends Console {
5958
this.#testNumberPad = testNumberPad;
6059
}
6160

62-
#createFailuresLog() {
61+
#createResultsLogs() {
62+
let resultsReadies = [];
63+
this.#resultTypes.forEach(resultType => {
64+
let logPath = path.join(
65+
TestEnv.getTestSuiteReportPath(),
66+
resultType + '.log'
67+
);
68+
resultsReadies.push(this.#createResultLog(logPath));
69+
});
70+
return Promise.all(resultsReadies);
71+
}
72+
73+
#createResultLog(logPath) {
6374
return new Promise((resolve, reject) => {
64-
if (this.#testSuiteFailuresPath) {
65-
fs.mkdir(path.dirname(this.#testSuiteFailuresPath), { recursive: true }, (err) => {
75+
if (this.#fileLog) {
76+
fs.mkdir(path.dirname(logPath), { recursive: true }, (err) => {
6677
if (err) {
6778
console.error('Failed to create directory:', err);
6879
reject(err);
6980
} else {
70-
fs.writeFile(this.#testSuiteFailuresPath, '', { flag: 'w' }, (err) => {
81+
fs.writeFile(logPath, '', { flag: 'w' }, (err) => {
7182
if (err) {
7283
console.error('Failed to write file:', err);
7384
reject(err);
@@ -83,11 +94,11 @@ class TestConsole extends Console {
8394
});
8495
}
8596

86-
writeFailure(line) {
87-
if (this.#testSuiteFailuresPath) {
88-
this.#testSuiteFailuresPathReady.then(() => {
97+
#writeResultLog(logPath, line) {
98+
if (this.#fileLog) {
99+
this.#testResultsLogsReady.then(() => {
89100
return new Promise((resolve, reject) => {
90-
fs.writeFile(this.#testSuiteFailuresPath, line, { flag: 'a' }, (err) => {
101+
fs.writeFile(logPath, line, { flag: 'a' }, (err) => {
91102
if (err) {
92103
console.error('Failed to write file:', err);
93104
reject(err);
@@ -99,6 +110,38 @@ class TestConsole extends Console {
99110
});
100111
}
101112
}
113+
114+
writePassedLog(line) {
115+
let logPath = path.join(
116+
TestEnv.getTestSuiteReportPath(),
117+
'passed.log'
118+
);
119+
return this.#writeResultLog(logPath, line);
120+
}
121+
122+
writeWarningsLog(line) {
123+
let logPath = path.join(
124+
TestEnv.getTestSuiteReportPath(),
125+
'warnings.log'
126+
);
127+
return this.#writeResultLog(logPath, line);
128+
}
129+
130+
writeFailedLog(line) {
131+
let logPath = path.join(
132+
TestEnv.getTestSuiteReportPath(),
133+
'failed.log'
134+
);
135+
return this.#writeResultLog(logPath, line);
136+
}
137+
138+
writeFailuresLog(line) {
139+
let logPath = path.join(
140+
TestEnv.getTestSuiteReportPath(),
141+
'failures.log'
142+
);
143+
return this.#writeResultLog(logPath, line);
144+
}
102145
}
103146

104147
module.exports = TestConsole;

test/integration/modules/manual/client/index.js

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ function populateLibs() {
133133
.then((data) => {
134134
for (let name in data) {
135135
let url = data[name];
136-
vizzuUrl.innerHTML += `<option value='${url}'>${name}</option>`;
137-
vizzuRef.innerHTML += `<option value='${url}'>${name}</option>`;
136+
vizzuUrl.appendChild(getVizzuOption(url, name));
137+
vizzuRef.appendChild(getVizzuOption(url, name));
138138
}
139139
let lastSelected = localStorage.getItem("vizzuUrl");
140140
if (urlVizzuUrl) {
@@ -158,6 +158,14 @@ function populateLibs() {
158158
});
159159
}
160160

161+
function getVizzuOption(url, name) {
162+
const option = document.createElement('option');
163+
option.value = url;
164+
const text = document.createTextNode(name);
165+
option.appendChild(text);
166+
return option
167+
}
168+
161169
function populateCases() {
162170
fetch("/getTestList")
163171
.then((response) => response.json())
@@ -167,13 +175,14 @@ function populateCases() {
167175
let actcase = JSON.stringify(data[i]);
168176
if (
169177
data[i].testFile === urlTestFile &&
170-
data[i].testIndex == urlTestIndex
178+
data[i].testIndex === urlTestIndex
171179
) {
172180
lastSelected = actcase;
173181
}
174182
let actcaseName = data[i].testName;
183+
let actcaseResult = data[i].testResult;
175184
let selected = i == 0 ? 'selected="selected"' : "";
176-
testCase.innerHTML += `<option ${selected} value='${actcase}'>${actcaseName}</option>`;
185+
testCase.appendChild(getTestCaseOption(actcase, actcaseName, actcaseResult, selected));
177186
}
178187
if (lastSelected === "") lastSelected = JSON.stringify(data[0]);
179188
testCase.value = lastSelected;
@@ -183,4 +192,27 @@ function populateCases() {
183192
});
184193
}
185194

195+
function getTestCaseOption(testCase, testCaseName, testCaseResult, selected) {
196+
const option = document.createElement('option');
197+
option.setAttribute('style', getTestCaseStyle(testCaseResult));
198+
option.value = testCase;
199+
option.selected = selected;
200+
let textValue = testCaseName;
201+
if (testCaseResult) textValue = `${testCaseName} | ${testCaseResult}`;
202+
const text = document.createTextNode(textValue);
203+
option.appendChild(text);
204+
return option;
205+
}
206+
207+
function getTestCaseStyle(testCaseResult) {
208+
if (testCaseResult === "PASS") {
209+
return "background-color: rgba(152, 251, 152, 0.8) !important;";
210+
} else if (testCaseResult === "FAIL") {
211+
return "background-color: rgba(255, 153, 153, 0.8) !important;";
212+
} else if (testCaseResult === "WARN") {
213+
return "background-color: rgba(255, 255, 153, 0.8) !important;";
214+
}
215+
return ";"
216+
}
217+
186218
populateLibs();

test/integration/modules/manual/manual.js

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
const fetch = require("node-fetch");
2+
const fs = require("fs");
3+
const path = require("path");
24

35
const WorkspaceHost = require("../../modules/workspace/workspace-host.js");
46
const VizzuUrl = require("../../modules/vizzu/vizzu-url.js");
@@ -127,13 +129,83 @@ class Manual {
127129
let testCasesConfigReady = TestCasesConfig.getConfig(
128130
this.#configPathList
129131
);
130-
TestCases.getTestCases(testCasesConfigReady, this.#filters).then(
131-
(testCases) => {
132+
let testResultsReady = this.#getTestResults();
133+
let testCasesReady = TestCases.getTestCases(testCasesConfigReady, this.#filters);
134+
Promise.all([testCasesReady, testResultsReady]).then(
135+
(results) => {
136+
let testCases = results[0];
137+
let testResults = results[1];
138+
testCases.filteredTestCases.forEach(testCase => {
139+
testCase.testResult = this.#getTestCaseResult(testCase.testName, testResults);
140+
});
132141
res.send(testCases.filteredTestCases);
133142
}
134143
);
135144
});
136145
}
146+
147+
#getTestCaseResult(testName, testResults) {
148+
let passed = testResults[0];
149+
let warnings = testResults[1];
150+
let failed = testResults[2];
151+
if (passed.includes(testName)) {
152+
return "PASS";
153+
} else if (warnings.includes(testName)) {
154+
return "WARN"
155+
} else if (failed.includes(testName)) {
156+
return "FAIL";
157+
}
158+
}
159+
160+
#getTestResults() {
161+
return Promise.all([
162+
this.#getPassed(),
163+
this.#getWarnings(),
164+
this.#getFailed(),
165+
]);
166+
}
167+
168+
#getPassed() {
169+
let logPath = path.join(
170+
TestEnv.getTestSuiteReportPath(),
171+
'passed.log'
172+
);
173+
return this.#getTestResult(logPath);
174+
}
175+
176+
#getWarnings() {
177+
let logPath = path.join(
178+
TestEnv.getTestSuiteReportPath(),
179+
'warnings.log'
180+
);
181+
return this.#getTestResult(logPath);
182+
}
183+
184+
#getFailed() {
185+
let logPath = path.join(
186+
TestEnv.getTestSuiteReportPath(),
187+
'failed.log'
188+
);
189+
return this.#getTestResult(logPath);
190+
}
191+
192+
#getTestResult(logPath) {
193+
return new Promise((resolve, reject) => {
194+
fs.readFile(logPath, 'utf8', (err, data) => {
195+
if (err) {
196+
resolve([]);
197+
} else {
198+
const prefix = "/test/integration/";
199+
let tests = data
200+
.trim()
201+
.split(' ')
202+
.filter((test) => test !== '')
203+
.map((test) => prefix + test);
204+
resolve(tests);
205+
}
206+
});
207+
});
208+
}
137209
}
138210

139211
module.exports = Manual;

0 commit comments

Comments
 (0)