@sasjs/cli 3.6.7 → 3.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58,325 +58,521 @@ var utils_2 = require("../../../utils");
58
58
  var dotenv_1 = __importDefault(require("dotenv"));
59
59
  var __1 = require("../..");
60
60
  describe('sasjs test', function () {
61
- var target = generateTarget();
62
- var testUrl = function (test) {
63
- return "".concat(target.serverUrl, "/").concat(target.serverType === utils_1.ServerType.SasViya
64
- ? 'SASJobExecution'
65
- : 'SASStoredProcess', "/?_program=/Public/app/cli-tests/").concat(target.name, "/tests/").concat(test, "&_debug=2477&_contextName=").concat(encodeURIComponent(target.contextName));
66
- };
67
- var testUrlLink = function (test) { return "\"=HYPERLINK(\"\"".concat(testUrl(test), "\"\")\""); };
68
- beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
69
- return __generator(this, function (_a) {
70
- switch (_a.label) {
71
- case 0: return [4 /*yield*/, (0, test_2.createTestApp)(__dirname, target.name)];
72
- case 1:
73
- _a.sent();
74
- return [4 /*yield*/, copyTestFiles(target.name)];
75
- case 2:
76
- _a.sent();
77
- return [4 /*yield*/, (0, __1.build)(target)];
78
- case 3:
79
- _a.sent();
80
- return [4 /*yield*/, (0, __1.deploy)(target, false)];
81
- case 4:
82
- _a.sent();
83
- process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
84
- return [2 /*return*/];
85
- }
86
- });
87
- }); });
88
- afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
89
- return __generator(this, function (_a) {
90
- switch (_a.label) {
91
- case 0: return [4 /*yield*/, (0, test_2.removeTestServerFolder)("/Public/app/cli-tests/".concat(target.name), target)];
92
- case 1:
93
- _a.sent();
94
- return [4 /*yield*/, (0, test_2.removeTestApp)(__dirname, target.name)];
95
- case 2:
96
- _a.sent();
97
- return [2 /*return*/];
98
- }
99
- });
100
- }); });
101
- it('should execute tests and create result CSV, XML and JSON files using default source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
102
- var expectedResultsJson, expectedResultsCsv, resultsFolderPath, resultsJsonPath, resultsJson, resultsCsvPath, parsedResults, resultsCsv, resultsXmlPath, resultsXml, expectedResultsXml, coverageLcovPath, expectedCoverageLcov, coverageLcov;
103
- return __generator(this, function (_a) {
104
- switch (_a.label) {
105
- case 0:
106
- expectedResultsJson = {
107
- sasjs_test_meta: [
108
- {
109
- test_target: 'testsetup',
110
- results: [
111
- {
112
- test_loc: 'tests/testsetup.sas',
113
- sasjs_test_id: '',
114
- result: 'not provided',
115
- test_url: testUrl('testsetup')
116
- }
117
- ]
118
- },
119
- {
120
- test_target: 'exampleprogram',
121
- results: [
122
- {
123
- test_loc: 'tests/jobs/jobs/exampleprogram.test.sas',
124
- sasjs_test_id: '',
125
- result: 'not provided',
126
- test_url: testUrl('jobs/jobs/exampleprogram.test')
127
- }
128
- ]
129
- },
130
- {
131
- test_target: 'standalone',
132
- results: [
133
- {
134
- test_loc: 'tests/jobs/jobs/standalone.test.sas',
135
- sasjs_test_id: '',
136
- result: 'not provided',
137
- test_url: testUrl('jobs/jobs/standalone.test')
138
- }
139
- ]
140
- },
141
- {
142
- test_target: 'examplemacro',
143
- results: [
144
- {
145
- test_loc: 'tests/macros/examplemacro.test.sas',
146
- sasjs_test_id: '',
147
- result: [
148
- {
149
- TEST_DESCRIPTION: 'examplemacro test.1 description',
150
- TEST_RESULT: 'PASS'
151
- }
152
- ],
153
- test_url: testUrl('macros/examplemacro.test')
154
- }
155
- ]
156
- },
157
- {
158
- test_target: 'dostuff',
159
- results: [
160
- {
161
- test_loc: 'tests/services/admin/dostuff.test.0.sas',
162
- sasjs_test_id: '',
163
- result: [
164
- {
165
- TEST_DESCRIPTION: 'dostuff 0 test description',
166
- TEST_RESULT: 'FAIL'
167
- }
168
- ],
169
- test_url: testUrl('services/admin/dostuff.test.0')
170
- },
171
- {
172
- test_loc: 'tests/services/admin/dostuff.test.1.sas',
173
- sasjs_test_id: '',
174
- result: [
175
- {
176
- TEST_DESCRIPTION: 'dostuff 1 test description',
177
- TEST_RESULT: 'PASS'
178
- }
179
- ],
180
- test_url: testUrl('services/admin/dostuff.test.1')
181
- }
182
- ]
183
- },
184
- {
185
- test_target: 'testteardown',
186
- results: [
187
- {
188
- test_loc: 'tests/testteardown.sas',
189
- sasjs_test_id: '',
190
- result: 'not provided',
191
- test_url: testUrl('testteardown')
192
- }
193
- ]
194
- }
195
- ]
196
- };
197
- expectedResultsCsv = "test_target,test_loc,sasjs_test_id,test_suite_result,test_description,test_url\ntestsetup,tests/testsetup.sas,sasjs_test_id,not provided,,".concat(testUrlLink('testsetup'), "\nexampleprogram,tests/jobs/jobs/exampleprogram.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/exampleprogram.test'), "\nstandalone,tests/jobs/jobs/standalone.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/standalone.test'), "\nexamplemacro,tests/macros/examplemacro.test.sas,sasjs_test_id,PASS,examplemacro test.1 description,").concat(testUrlLink('macros/examplemacro.test'), "\ndostuff,tests/services/admin/dostuff.test.0.sas,sasjs_test_id,FAIL,dostuff 0 test description,").concat(testUrlLink('services/admin/dostuff.test.0'), "\ndostuff,tests/services/admin/dostuff.test.1.sas,sasjs_test_id,PASS,dostuff 1 test description,").concat(testUrlLink('services/admin/dostuff.test.1'), "\ntestteardown,tests/testteardown.sas,sasjs_test_id,not provided,,").concat(testUrlLink('testteardown'), "\n");
198
- return [4 /*yield*/, (0, test_1.runTest)(target)];
199
- case 1:
200
- _a.sent();
201
- resultsFolderPath = path_1.default.join(__dirname, target.name, 'sasjsresults');
202
- resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
203
- return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
204
- case 2:
205
- _a.sent();
206
- return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsJsonPath)).resolves.toEqual(true)];
207
- case 3:
208
- _a.sent();
209
- return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
210
- case 4:
211
- resultsJson = _a.sent();
212
- resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
213
- return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
214
- case 5:
215
- _a.sent();
216
- parsedResults = JSON.parse(resultsJson);
217
- parsedResults.sasjs_test_meta = parsedResults.sasjs_test_meta.flatMap(function (res) { return (__assign(__assign({}, res), { results: res.results.map(function (r) { return (__assign(__assign({}, r), { sasjs_test_id: '' })); }) })); });
218
- expect(parsedResults).toEqual(expectedResultsJson);
219
- return [4 /*yield*/, (0, utils_1.readFile)(resultsCsvPath)];
220
- case 6:
221
- resultsCsv = _a.sent();
222
- resultsCsv = resultsCsv.replace(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g, 'sasjs_test_id');
223
- expect(resultsCsv).toEqual(expectedResultsCsv);
224
- resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
225
- return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
226
- case 7:
227
- _a.sent();
228
- return [4 /*yield*/, (0, utils_1.readFile)(resultsXmlPath)];
229
- case 8:
230
- resultsXml = _a.sent();
231
- expectedResultsXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites id=\"\" name=\"SASjs Test Meta\" tests=\"7\" failures=\"5\">\n <testsuite id=\"testsetup\" name=\"testsetup\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"exampleprogram\" name=\"exampleprogram\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"standalone\" name=\"standalone\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"examplemacro\" name=\"examplemacro\" tests=\"1\" failures=\"0\">\n <testcase id=\"\">\n </testcase>\n </testsuite>\n <testsuite id=\"dostuff\" name=\"dostuff\" tests=\"2\" failures=\"1\">\n <testcase id=\"\">\n <failure>Description: dostuff 0 test description</failure>\n </testcase>\n <testcase id=\"\">\n </testcase>\n </testsuite>\n <testsuite id=\"testteardown\" name=\"testteardown\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n</testsuites>";
232
- resultsXml = resultsXml.replace(/testsuites id="[^ ]*"/gm, "testsuites id=\"\"");
233
- resultsXml = resultsXml.replace(/testcase id="[^ ]*"/gm, "testcase id=\"\"");
234
- expect(resultsXml).toEqual(expectedResultsXml);
235
- coverageLcovPath = path_1.default.join(resultsFolderPath, 'coverage.lcov');
236
- return [4 /*yield*/, expect((0, utils_1.fileExists)(coverageLcovPath)).resolves.toEqual(true)];
237
- case 9:
238
- _a.sent();
239
- expectedCoverageLcov = "TN:testsetup.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:exampleprogram.test.sas\nSF:jobs/jobs/exampleprogram.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:standalone.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:examplemacro.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:shouldFail.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:dostuff.test.0.sas\nSF:services/admin/dostuff.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:dostuff.test.1.sas\nSF:services/admin/dostuff.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:testteardown.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record";
240
- return [4 /*yield*/, (0, utils_1.readFile)(coverageLcovPath)];
241
- case 10:
242
- coverageLcov = _a.sent();
243
- expect(coverageLcov).toEqual(expectedCoverageLcov);
244
- return [2 /*return*/];
245
- }
246
- });
247
- }); });
248
- it('should execute filtered tests and create result CSV, XML and JSON files using custom source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
249
- var expectedResultsJson, expectedResultsCsv, outputFolder, movedTestFlow, resultsFolderPath, resultsJsonPath, resultsJson, resultsCsvPath, parsedResults, resultsCsv, logFolder, logPath, log, resultsXmlPath, resultsXml, expectedResultsXml;
250
- return __generator(this, function (_a) {
251
- switch (_a.label) {
252
- case 0:
253
- expectedResultsJson = {
254
- sasjs_test_meta: [
255
- {
256
- test_target: 'testsetup',
257
- results: [
258
- {
259
- test_loc: 'tests/testsetup.sas',
260
- sasjs_test_id: '',
261
- result: 'not provided',
262
- test_url: testUrl('testsetup')
263
- }
264
- ]
265
- },
266
- {
267
- test_target: 'standalone',
268
- results: [
269
- {
270
- test_loc: 'tests/jobs/jobs/standalone.test.sas',
271
- sasjs_test_id: '',
272
- result: 'not provided',
273
- test_url: testUrl('jobs/jobs/standalone.test')
274
- }
275
- ]
276
- },
277
- {
278
- test_target: 'dostuff',
279
- results: [
280
- {
281
- test_loc: 'tests/services/admin/dostuff.test.0.sas',
282
- sasjs_test_id: '',
283
- result: [
284
- {
285
- TEST_DESCRIPTION: 'dostuff 0 test description',
286
- TEST_RESULT: 'FAIL'
287
- }
288
- ],
289
- test_url: testUrl('services/admin/dostuff.test.0')
290
- }
291
- ]
292
- },
293
- {
294
- test_target: 'testteardown',
295
- results: [
296
- {
297
- test_loc: 'tests/testteardown.sas',
298
- sasjs_test_id: '',
299
- result: 'not provided',
300
- test_url: testUrl('testteardown')
301
- }
302
- ]
303
- }
304
- ]
305
- };
306
- expectedResultsCsv = "test_target,test_loc,sasjs_test_id,test_suite_result,test_description,test_url\ntestsetup,tests/testsetup.sas,sasjs_test_id,not provided,,".concat(testUrlLink('testsetup'), "\nstandalone,tests/jobs/jobs/standalone.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/standalone.test'), "\ndostuff,tests/services/admin/dostuff.test.0.sas,sasjs_test_id,FAIL,dostuff 0 test description,").concat(testUrlLink('services/admin/dostuff.test.0'), "\ntestteardown,tests/testteardown.sas,sasjs_test_id,not provided,,").concat(testUrlLink('testteardown'), "\n");
307
- outputFolder = 'customOutPut';
308
- movedTestFlow = 'movedTestFlow.json';
309
- return [4 /*yield*/, (0, utils_1.copy)(path_1.default.join(__dirname, target.name, 'sasjsbuild', 'testFlow.json'), path_1.default.join(__dirname, target.name, movedTestFlow))];
310
- case 1:
311
- _a.sent();
312
- return [4 /*yield*/, (0, test_1.runTest)(target, ['jobs/standalone', 'shouldFail', 'services/admin/dostuff.test.0'], outputFolder, movedTestFlow)];
313
- case 2:
314
- _a.sent();
315
- resultsFolderPath = path_1.default.join(__dirname, target.name, outputFolder);
316
- resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
317
- return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
318
- case 3:
319
- _a.sent();
320
- return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsJsonPath)).resolves.toEqual(true)];
321
- case 4:
322
- _a.sent();
323
- return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
324
- case 5:
325
- resultsJson = _a.sent();
326
- resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
327
- return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
328
- case 6:
329
- _a.sent();
330
- parsedResults = JSON.parse(resultsJson);
331
- parsedResults.sasjs_test_meta = parsedResults.sasjs_test_meta.flatMap(function (res) { return (__assign(__assign({}, res), { results: res.results.map(function (r) { return (__assign(__assign({}, r), { sasjs_test_id: '' })); }) })); });
332
- expect(parsedResults).toEqual(expectedResultsJson);
333
- return [4 /*yield*/, (0, utils_1.readFile)(resultsCsvPath)];
334
- case 7:
335
- resultsCsv = _a.sent();
336
- resultsCsv = resultsCsv.replace(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g, 'sasjs_test_id');
337
- expect(resultsCsv).toEqual(expectedResultsCsv);
338
- logFolder = path_1.default.join(resultsFolderPath, 'logs');
339
- logPath = path_1.default.join(logFolder, 'macros_shouldFail.test.log');
340
- return [4 /*yield*/, expect((0, utils_1.listFilesInFolder)(logFolder)).resolves.toEqual([
341
- 'jobs_jobs_standalone.test.log',
342
- 'macros_shouldFail.test.log',
343
- 'services_admin_dostuff.test.0.log',
344
- 'testsetup.log',
345
- 'testteardown.log'
346
- ])];
347
- case 8:
348
- _a.sent();
349
- return [4 /*yield*/, (0, utils_1.readFile)(logPath)];
350
- case 9:
351
- log = _a.sent();
352
- expect(log.length).toBeGreaterThan(0);
353
- resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
354
- return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
355
- case 10:
356
- _a.sent();
357
- return [4 /*yield*/, (0, utils_1.readFile)(resultsXmlPath)];
358
- case 11:
359
- resultsXml = _a.sent();
360
- expectedResultsXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites id=\"\" name=\"SASjs Test Meta\" tests=\"4\" failures=\"4\">\n <testsuite id=\"testsetup\" name=\"testsetup\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"standalone\" name=\"standalone\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"dostuff\" name=\"dostuff\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Description: dostuff 0 test description</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"testteardown\" name=\"testteardown\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n</testsuites>";
361
- resultsXml = resultsXml.replace(/testsuites id="[^ ]*"/gm, "testsuites id=\"\"");
362
- resultsXml = resultsXml.replace(/testcase id="[^ ]*"/gm, "testcase id=\"\"");
363
- expect(resultsXml).toEqual(expectedResultsXml);
364
- return [2 /*return*/];
365
- }
366
- });
367
- }); });
61
+ var expectedCoverageLcov = "TN:testsetup.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:exampleprogram.test.sas\nSF:jobs/jobs/exampleprogram.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:standalone.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:examplemacro.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:shouldFail.test.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:dostuff.test.0.sas\nSF:services/admin/dostuff.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:dostuff.test.1.sas\nSF:services/admin/dostuff.sas\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record\nTN:testteardown.sas\nSF:standalone\nFNF:1\nFNH:1\nLF:1\nLH:1\nBRF:1\nBRH:1\nend_of_record";
62
+ describe('SASVIYA', function () {
63
+ var target = generateTarget();
64
+ var testUrl = function (test) {
65
+ return "".concat(target.serverUrl, "/SASJobExecution/?_program=/Public/app/cli-tests/").concat(target.name, "/tests/").concat(test, "&_debug=2477&_contextName=").concat(encodeURIComponent(target.contextName));
66
+ };
67
+ var testUrlLink = function (test) { return "\"=HYPERLINK(\"\"".concat(testUrl(test), "\"\")\""); };
68
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0: return [4 /*yield*/, (0, test_2.createTestApp)(__dirname, target.name)];
72
+ case 1:
73
+ _a.sent();
74
+ return [4 /*yield*/, copyTestFiles(target.name)];
75
+ case 2:
76
+ _a.sent();
77
+ return [4 /*yield*/, (0, __1.build)(target)];
78
+ case 3:
79
+ _a.sent();
80
+ return [4 /*yield*/, (0, __1.deploy)(target, false)];
81
+ case 4:
82
+ _a.sent();
83
+ process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
84
+ return [2 /*return*/];
85
+ }
86
+ });
87
+ }); });
88
+ afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
89
+ return __generator(this, function (_a) {
90
+ switch (_a.label) {
91
+ case 0: return [4 /*yield*/, (0, test_2.removeTestServerFolder)("/Public/app/cli-tests/".concat(target.name), target)];
92
+ case 1:
93
+ _a.sent();
94
+ return [4 /*yield*/, (0, test_2.removeTestApp)(__dirname, target.name)];
95
+ case 2:
96
+ _a.sent();
97
+ return [2 /*return*/];
98
+ }
99
+ });
100
+ }); });
101
+ it('should execute tests and create result CSV, XML and JSON files using default source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
102
+ var expectedResultsJson, expectedResultsCsv, resultsFolderPath, resultsJsonPath, resultsJson, resultsCsvPath, parsedResults, resultsCsv, resultsXmlPath, resultsXml, expectedResultsXml, coverageLcovPath, coverageLcov;
103
+ return __generator(this, function (_a) {
104
+ switch (_a.label) {
105
+ case 0:
106
+ expectedResultsJson = {
107
+ sasjs_test_meta: [
108
+ {
109
+ test_target: 'testsetup',
110
+ results: [
111
+ {
112
+ test_loc: 'tests/testsetup.sas',
113
+ sasjs_test_id: '',
114
+ result: 'not provided',
115
+ test_url: testUrl('testsetup')
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ test_target: 'exampleprogram',
121
+ results: [
122
+ {
123
+ test_loc: 'tests/jobs/jobs/exampleprogram.test.sas',
124
+ sasjs_test_id: '',
125
+ result: 'not provided',
126
+ test_url: testUrl('jobs/jobs/exampleprogram.test')
127
+ }
128
+ ]
129
+ },
130
+ {
131
+ test_target: 'standalone',
132
+ results: [
133
+ {
134
+ test_loc: 'tests/jobs/jobs/standalone.test.sas',
135
+ sasjs_test_id: '',
136
+ result: 'not provided',
137
+ test_url: testUrl('jobs/jobs/standalone.test')
138
+ }
139
+ ]
140
+ },
141
+ {
142
+ test_target: 'examplemacro',
143
+ results: [
144
+ {
145
+ test_loc: 'tests/macros/examplemacro.test.sas',
146
+ sasjs_test_id: '',
147
+ result: [
148
+ {
149
+ TEST_DESCRIPTION: 'examplemacro test.1 description',
150
+ TEST_RESULT: 'PASS'
151
+ }
152
+ ],
153
+ test_url: testUrl('macros/examplemacro.test')
154
+ }
155
+ ]
156
+ },
157
+ {
158
+ test_target: 'dostuff',
159
+ results: [
160
+ {
161
+ test_loc: 'tests/services/admin/dostuff.test.0.sas',
162
+ sasjs_test_id: '',
163
+ result: [
164
+ {
165
+ TEST_DESCRIPTION: 'dostuff 0 test description',
166
+ TEST_RESULT: 'FAIL'
167
+ }
168
+ ],
169
+ test_url: testUrl('services/admin/dostuff.test.0')
170
+ },
171
+ {
172
+ test_loc: 'tests/services/admin/dostuff.test.1.sas',
173
+ sasjs_test_id: '',
174
+ result: [
175
+ {
176
+ TEST_DESCRIPTION: 'dostuff 1 test description',
177
+ TEST_RESULT: 'PASS'
178
+ }
179
+ ],
180
+ test_url: testUrl('services/admin/dostuff.test.1')
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ test_target: 'testteardown',
186
+ results: [
187
+ {
188
+ test_loc: 'tests/testteardown.sas',
189
+ sasjs_test_id: '',
190
+ result: 'not provided',
191
+ test_url: testUrl('testteardown')
192
+ }
193
+ ]
194
+ }
195
+ ]
196
+ };
197
+ expectedResultsCsv = "test_target,test_loc,sasjs_test_id,test_suite_result,test_description,test_url\ntestsetup,tests/testsetup.sas,sasjs_test_id,not provided,,".concat(testUrlLink('testsetup'), "\nexampleprogram,tests/jobs/jobs/exampleprogram.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/exampleprogram.test'), "\nstandalone,tests/jobs/jobs/standalone.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/standalone.test'), "\nexamplemacro,tests/macros/examplemacro.test.sas,sasjs_test_id,PASS,examplemacro test.1 description,").concat(testUrlLink('macros/examplemacro.test'), "\ndostuff,tests/services/admin/dostuff.test.0.sas,sasjs_test_id,FAIL,dostuff 0 test description,").concat(testUrlLink('services/admin/dostuff.test.0'), "\ndostuff,tests/services/admin/dostuff.test.1.sas,sasjs_test_id,PASS,dostuff 1 test description,").concat(testUrlLink('services/admin/dostuff.test.1'), "\ntestteardown,tests/testteardown.sas,sasjs_test_id,not provided,,").concat(testUrlLink('testteardown'), "\n");
198
+ return [4 /*yield*/, (0, test_1.runTest)(target)];
199
+ case 1:
200
+ _a.sent();
201
+ resultsFolderPath = path_1.default.join(__dirname, target.name, 'sasjsresults');
202
+ resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
203
+ return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
204
+ case 2:
205
+ _a.sent();
206
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsJsonPath)).resolves.toEqual(true)];
207
+ case 3:
208
+ _a.sent();
209
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
210
+ case 4:
211
+ resultsJson = _a.sent();
212
+ resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
213
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
214
+ case 5:
215
+ _a.sent();
216
+ parsedResults = JSON.parse(resultsJson);
217
+ parsedResults.sasjs_test_meta = parsedResults.sasjs_test_meta.flatMap(function (res) { return (__assign(__assign({}, res), { results: res.results.map(function (r) { return (__assign(__assign({}, r), { sasjs_test_id: '' })); }) })); });
218
+ expect(parsedResults).toEqual(expectedResultsJson);
219
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsCsvPath)];
220
+ case 6:
221
+ resultsCsv = _a.sent();
222
+ resultsCsv = resultsCsv.replace(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g, 'sasjs_test_id');
223
+ expect(resultsCsv).toEqual(expectedResultsCsv);
224
+ resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
225
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
226
+ case 7:
227
+ _a.sent();
228
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsXmlPath)];
229
+ case 8:
230
+ resultsXml = _a.sent();
231
+ expectedResultsXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites id=\"\" name=\"SASjs Test Meta\" tests=\"7\" failures=\"5\">\n <testsuite id=\"testsetup\" name=\"testsetup\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"exampleprogram\" name=\"exampleprogram\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"standalone\" name=\"standalone\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"examplemacro\" name=\"examplemacro\" tests=\"1\" failures=\"0\">\n <testcase id=\"\">\n </testcase>\n </testsuite>\n <testsuite id=\"dostuff\" name=\"dostuff\" tests=\"2\" failures=\"1\">\n <testcase id=\"\">\n <failure>Description: dostuff 0 test description</failure>\n </testcase>\n <testcase id=\"\">\n </testcase>\n </testsuite>\n <testsuite id=\"testteardown\" name=\"testteardown\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n</testsuites>";
232
+ resultsXml = resultsXml.replace(/testsuites id="[^ ]*"/gm, "testsuites id=\"\"");
233
+ resultsXml = resultsXml.replace(/testcase id="[^ ]*"/gm, "testcase id=\"\"");
234
+ expect(resultsXml).toEqual(expectedResultsXml);
235
+ coverageLcovPath = path_1.default.join(resultsFolderPath, 'coverage.lcov');
236
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(coverageLcovPath)).resolves.toEqual(true)];
237
+ case 9:
238
+ _a.sent();
239
+ return [4 /*yield*/, (0, utils_1.readFile)(coverageLcovPath)];
240
+ case 10:
241
+ coverageLcov = _a.sent();
242
+ expect(coverageLcov).toEqual(expectedCoverageLcov);
243
+ return [2 /*return*/];
244
+ }
245
+ });
246
+ }); });
247
+ it('should execute filtered tests and create result CSV, XML and JSON files using custom source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
248
+ var expectedResultsJson, expectedResultsCsv, outputFolder, movedTestFlow, resultsFolderPath, resultsJsonPath, resultsJson, resultsCsvPath, parsedResults, resultsCsv, logFolder, logPath, log, resultsXmlPath, resultsXml, expectedResultsXml;
249
+ return __generator(this, function (_a) {
250
+ switch (_a.label) {
251
+ case 0:
252
+ expectedResultsJson = {
253
+ sasjs_test_meta: [
254
+ {
255
+ test_target: 'testsetup',
256
+ results: [
257
+ {
258
+ test_loc: 'tests/testsetup.sas',
259
+ sasjs_test_id: '',
260
+ result: 'not provided',
261
+ test_url: testUrl('testsetup')
262
+ }
263
+ ]
264
+ },
265
+ {
266
+ test_target: 'standalone',
267
+ results: [
268
+ {
269
+ test_loc: 'tests/jobs/jobs/standalone.test.sas',
270
+ sasjs_test_id: '',
271
+ result: 'not provided',
272
+ test_url: testUrl('jobs/jobs/standalone.test')
273
+ }
274
+ ]
275
+ },
276
+ {
277
+ test_target: 'dostuff',
278
+ results: [
279
+ {
280
+ test_loc: 'tests/services/admin/dostuff.test.0.sas',
281
+ sasjs_test_id: '',
282
+ result: [
283
+ {
284
+ TEST_DESCRIPTION: 'dostuff 0 test description',
285
+ TEST_RESULT: 'FAIL'
286
+ }
287
+ ],
288
+ test_url: testUrl('services/admin/dostuff.test.0')
289
+ }
290
+ ]
291
+ },
292
+ {
293
+ test_target: 'testteardown',
294
+ results: [
295
+ {
296
+ test_loc: 'tests/testteardown.sas',
297
+ sasjs_test_id: '',
298
+ result: 'not provided',
299
+ test_url: testUrl('testteardown')
300
+ }
301
+ ]
302
+ }
303
+ ]
304
+ };
305
+ expectedResultsCsv = "test_target,test_loc,sasjs_test_id,test_suite_result,test_description,test_url\ntestsetup,tests/testsetup.sas,sasjs_test_id,not provided,,".concat(testUrlLink('testsetup'), "\nstandalone,tests/jobs/jobs/standalone.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/standalone.test'), "\ndostuff,tests/services/admin/dostuff.test.0.sas,sasjs_test_id,FAIL,dostuff 0 test description,").concat(testUrlLink('services/admin/dostuff.test.0'), "\ntestteardown,tests/testteardown.sas,sasjs_test_id,not provided,,").concat(testUrlLink('testteardown'), "\n");
306
+ outputFolder = 'customOutPut';
307
+ movedTestFlow = 'movedTestFlow.json';
308
+ return [4 /*yield*/, (0, utils_1.copy)(path_1.default.join(__dirname, target.name, 'sasjsbuild', 'testFlow.json'), path_1.default.join(__dirname, target.name, movedTestFlow))];
309
+ case 1:
310
+ _a.sent();
311
+ return [4 /*yield*/, (0, test_1.runTest)(target, ['jobs/standalone', 'shouldFail', 'services/admin/dostuff.test.0'], outputFolder, movedTestFlow)];
312
+ case 2:
313
+ _a.sent();
314
+ resultsFolderPath = path_1.default.join(__dirname, target.name, outputFolder);
315
+ resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
316
+ return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
317
+ case 3:
318
+ _a.sent();
319
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsJsonPath)).resolves.toEqual(true)];
320
+ case 4:
321
+ _a.sent();
322
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
323
+ case 5:
324
+ resultsJson = _a.sent();
325
+ resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
326
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
327
+ case 6:
328
+ _a.sent();
329
+ parsedResults = JSON.parse(resultsJson);
330
+ parsedResults.sasjs_test_meta = parsedResults.sasjs_test_meta.flatMap(function (res) { return (__assign(__assign({}, res), { results: res.results.map(function (r) { return (__assign(__assign({}, r), { sasjs_test_id: '' })); }) })); });
331
+ expect(parsedResults).toEqual(expectedResultsJson);
332
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsCsvPath)];
333
+ case 7:
334
+ resultsCsv = _a.sent();
335
+ resultsCsv = resultsCsv.replace(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g, 'sasjs_test_id');
336
+ expect(resultsCsv).toEqual(expectedResultsCsv);
337
+ logFolder = path_1.default.join(resultsFolderPath, 'logs');
338
+ logPath = path_1.default.join(logFolder, 'macros_shouldFail.test.log');
339
+ return [4 /*yield*/, expect((0, utils_1.listFilesInFolder)(logFolder)).resolves.toEqual([
340
+ 'jobs_jobs_standalone.test.log',
341
+ 'macros_shouldFail.test.log',
342
+ 'services_admin_dostuff.test.0.log',
343
+ 'testsetup.log',
344
+ 'testteardown.log'
345
+ ])];
346
+ case 8:
347
+ _a.sent();
348
+ return [4 /*yield*/, (0, utils_1.readFile)(logPath)];
349
+ case 9:
350
+ log = _a.sent();
351
+ expect(log.length).toBeGreaterThan(0);
352
+ resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
353
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
354
+ case 10:
355
+ _a.sent();
356
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsXmlPath)];
357
+ case 11:
358
+ resultsXml = _a.sent();
359
+ expectedResultsXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites id=\"\" name=\"SASjs Test Meta\" tests=\"4\" failures=\"4\">\n <testsuite id=\"testsetup\" name=\"testsetup\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"standalone\" name=\"standalone\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"dostuff\" name=\"dostuff\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Description: dostuff 0 test description</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"testteardown\" name=\"testteardown\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n</testsuites>";
360
+ resultsXml = resultsXml.replace(/testsuites id="[^ ]*"/gm, "testsuites id=\"\"");
361
+ resultsXml = resultsXml.replace(/testcase id="[^ ]*"/gm, "testcase id=\"\"");
362
+ expect(resultsXml).toEqual(expectedResultsXml);
363
+ return [2 /*return*/];
364
+ }
365
+ });
366
+ }); });
367
+ });
368
+ describe('SASJS', function () {
369
+ var target = generateTarget(utils_1.ServerType.Sasjs);
370
+ var testUrl = function (test) {
371
+ return "".concat((0, test_1.getTestUrl)(target, "/Public/app/cli-tests/".concat(target.name, "/tests/").concat(test)), "&_contextName=").concat(encodeURIComponent(target.contextName));
372
+ };
373
+ var testUrlLink = function (test) { return "\"=HYPERLINK(\"\"".concat(testUrl(test), "\"\")\""); };
374
+ beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
375
+ return __generator(this, function (_a) {
376
+ switch (_a.label) {
377
+ case 0: return [4 /*yield*/, (0, test_2.createTestApp)(__dirname, target.name)];
378
+ case 1:
379
+ _a.sent();
380
+ return [4 /*yield*/, copyTestFiles(target.name)];
381
+ case 2:
382
+ _a.sent();
383
+ return [4 /*yield*/, (0, __1.build)(target)];
384
+ case 3:
385
+ _a.sent();
386
+ return [4 /*yield*/, (0, __1.deploy)(target, false)];
387
+ case 4:
388
+ _a.sent();
389
+ process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
390
+ return [2 /*return*/];
391
+ }
392
+ });
393
+ }); });
394
+ afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
395
+ return __generator(this, function (_a) {
396
+ switch (_a.label) {
397
+ case 0: return [4 /*yield*/, (0, test_2.removeTestApp)(__dirname, target.name)];
398
+ case 1:
399
+ _a.sent();
400
+ return [2 /*return*/];
401
+ }
402
+ });
403
+ }); });
404
+ it('should execute tests and create result CSV, XML and JSON files using default source and output locations', function () { return __awaiter(void 0, void 0, void 0, function () {
405
+ var expectedResultsJson, expectedResultsCsv, resultsFolderPath, resultsJsonPath, resultsJson, resultsCsvPath, parsedResults, resultsCsv, resultsXmlPath, resultsXml, expectedResultsXml, coverageLcovPath, coverageLcov;
406
+ return __generator(this, function (_a) {
407
+ switch (_a.label) {
408
+ case 0:
409
+ expectedResultsJson = {
410
+ sasjs_test_meta: [
411
+ {
412
+ test_target: 'testsetup',
413
+ results: [
414
+ {
415
+ test_loc: 'tests/testsetup.sas',
416
+ sasjs_test_id: '',
417
+ result: 'not provided',
418
+ test_url: testUrl('testsetup')
419
+ }
420
+ ]
421
+ },
422
+ {
423
+ test_target: 'exampleprogram',
424
+ results: [
425
+ {
426
+ test_loc: 'tests/jobs/jobs/exampleprogram.test.sas',
427
+ sasjs_test_id: '',
428
+ result: 'not provided',
429
+ test_url: testUrl('jobs/jobs/exampleprogram.test')
430
+ }
431
+ ]
432
+ },
433
+ {
434
+ test_target: 'standalone',
435
+ results: [
436
+ {
437
+ test_loc: 'tests/jobs/jobs/standalone.test.sas',
438
+ sasjs_test_id: '',
439
+ result: 'not provided',
440
+ test_url: testUrl('jobs/jobs/standalone.test')
441
+ }
442
+ ]
443
+ },
444
+ {
445
+ test_target: 'examplemacro',
446
+ results: [
447
+ {
448
+ test_loc: 'tests/macros/examplemacro.test.sas',
449
+ sasjs_test_id: '',
450
+ result: [
451
+ {
452
+ TEST_DESCRIPTION: 'examplemacro test.1 description',
453
+ TEST_RESULT: 'PASS'
454
+ }
455
+ ],
456
+ test_url: testUrl('macros/examplemacro.test')
457
+ }
458
+ ]
459
+ },
460
+ {
461
+ test_target: 'shouldFail',
462
+ results: [
463
+ {
464
+ test_loc: 'tests/macros/shouldFail.test.sas',
465
+ sasjs_test_id: '',
466
+ result: 'not provided',
467
+ test_url: testUrl('macros/shouldFail.test')
468
+ }
469
+ ]
470
+ },
471
+ {
472
+ test_target: 'dostuff',
473
+ results: [
474
+ {
475
+ test_loc: 'tests/services/admin/dostuff.test.0.sas',
476
+ sasjs_test_id: '',
477
+ result: [
478
+ {
479
+ TEST_DESCRIPTION: 'dostuff 0 test description',
480
+ TEST_RESULT: 'FAIL'
481
+ }
482
+ ],
483
+ test_url: testUrl('services/admin/dostuff.test.0')
484
+ },
485
+ {
486
+ test_loc: 'tests/services/admin/dostuff.test.1.sas',
487
+ sasjs_test_id: '',
488
+ result: [
489
+ {
490
+ TEST_DESCRIPTION: 'dostuff 1 test description',
491
+ TEST_RESULT: 'PASS'
492
+ }
493
+ ],
494
+ test_url: testUrl('services/admin/dostuff.test.1')
495
+ }
496
+ ]
497
+ },
498
+ {
499
+ test_target: 'testteardown',
500
+ results: [
501
+ {
502
+ test_loc: 'tests/testteardown.sas',
503
+ sasjs_test_id: '',
504
+ result: 'not provided',
505
+ test_url: testUrl('testteardown')
506
+ }
507
+ ]
508
+ }
509
+ ]
510
+ };
511
+ expectedResultsCsv = "test_target,test_loc,sasjs_test_id,test_suite_result,test_description,test_url\ntestsetup,tests/testsetup.sas,sasjs_test_id,not provided,,".concat(testUrlLink('testsetup'), "\nexampleprogram,tests/jobs/jobs/exampleprogram.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/exampleprogram.test'), "\nstandalone,tests/jobs/jobs/standalone.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('jobs/jobs/standalone.test'), "\nexamplemacro,tests/macros/examplemacro.test.sas,sasjs_test_id,PASS,examplemacro test.1 description,").concat(testUrlLink('macros/examplemacro.test'), "\nshouldFail,tests/macros/shouldFail.test.sas,sasjs_test_id,not provided,,").concat(testUrlLink('macros/shouldFail.test'), "\ndostuff,tests/services/admin/dostuff.test.0.sas,sasjs_test_id,FAIL,dostuff 0 test description,").concat(testUrlLink('services/admin/dostuff.test.0'), "\ndostuff,tests/services/admin/dostuff.test.1.sas,sasjs_test_id,PASS,dostuff 1 test description,").concat(testUrlLink('services/admin/dostuff.test.1'), "\ntestteardown,tests/testteardown.sas,sasjs_test_id,not provided,,").concat(testUrlLink('testteardown'), "\n");
512
+ return [4 /*yield*/, (0, test_1.runTest)(target, undefined, undefined, undefined)];
513
+ case 1:
514
+ _a.sent();
515
+ resultsFolderPath = path_1.default.join(__dirname, target.name, 'sasjsresults');
516
+ resultsJsonPath = path_1.default.join(resultsFolderPath, 'testResults.json');
517
+ return [4 /*yield*/, expect((0, utils_1.folderExists)(resultsFolderPath)).resolves.toEqual(true)];
518
+ case 2:
519
+ _a.sent();
520
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsJsonPath)).resolves.toEqual(true)];
521
+ case 3:
522
+ _a.sent();
523
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsJsonPath)];
524
+ case 4:
525
+ resultsJson = _a.sent();
526
+ resultsCsvPath = path_1.default.join(resultsFolderPath, 'testResults.csv');
527
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsCsvPath)).resolves.toEqual(true)];
528
+ case 5:
529
+ _a.sent();
530
+ parsedResults = JSON.parse(resultsJson);
531
+ parsedResults.sasjs_test_meta = parsedResults.sasjs_test_meta.flatMap(function (res) { return (__assign(__assign({}, res), { results: res.results.map(function (r) { return (__assign(__assign({}, r), { sasjs_test_id: '' })); }) })); });
532
+ expect(parsedResults).toEqual(expectedResultsJson);
533
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsCsvPath)];
534
+ case 6:
535
+ resultsCsv = _a.sent();
536
+ resultsCsv = resultsCsv.replace(/\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g, 'sasjs_test_id');
537
+ expect(resultsCsv).toEqual(expectedResultsCsv);
538
+ resultsXmlPath = path_1.default.join(resultsFolderPath, 'testResults.xml');
539
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(resultsXmlPath)).resolves.toEqual(true)];
540
+ case 7:
541
+ _a.sent();
542
+ return [4 /*yield*/, (0, utils_1.readFile)(resultsXmlPath)];
543
+ case 8:
544
+ resultsXml = _a.sent();
545
+ expectedResultsXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites id=\"\" name=\"SASjs Test Meta\" tests=\"8\" failures=\"6\">\n <testsuite id=\"testsetup\" name=\"testsetup\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"exampleprogram\" name=\"exampleprogram\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"standalone\" name=\"standalone\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"examplemacro\" name=\"examplemacro\" tests=\"1\" failures=\"0\">\n <testcase id=\"\">\n </testcase>\n </testsuite>\n <testsuite id=\"shouldFail\" name=\"shouldFail\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n <testsuite id=\"dostuff\" name=\"dostuff\" tests=\"2\" failures=\"1\">\n <testcase id=\"\">\n <failure>Description: dostuff 0 test description</failure>\n </testcase>\n <testcase id=\"\">\n </testcase>\n </testsuite>\n <testsuite id=\"testteardown\" name=\"testteardown\" tests=\"1\" failures=\"1\">\n <testcase id=\"\">\n <failure>Status was not provided</failure>\n </testcase>\n </testsuite>\n</testsuites>";
546
+ resultsXml = resultsXml.replace(/testsuites id="[^ ]*"/gm, "testsuites id=\"\"");
547
+ resultsXml = resultsXml.replace(/testcase id="[^ ]*"/gm, "testcase id=\"\"");
548
+ expect(resultsXml).toEqual(expectedResultsXml);
549
+ coverageLcovPath = path_1.default.join(resultsFolderPath, 'coverage.lcov');
550
+ return [4 /*yield*/, expect((0, utils_1.fileExists)(coverageLcovPath)).resolves.toEqual(true)];
551
+ case 9:
552
+ _a.sent();
553
+ return [4 /*yield*/, (0, utils_1.readFile)(coverageLcovPath)];
554
+ case 10:
555
+ coverageLcov = _a.sent();
556
+ expect(coverageLcov).toEqual(expectedCoverageLcov);
557
+ return [2 /*return*/];
558
+ }
559
+ });
560
+ }); });
561
+ });
368
562
  });
369
563
  function generateTarget(serverType) {
370
564
  if (serverType === void 0) { serverType = utils_1.ServerType.SasViya; }
371
565
  dotenv_1.default.config();
372
566
  var timestamp = (0, utils_1.generateTimestamp)();
373
- var targetName = "cli-tests-test-command-".concat(timestamp);
567
+ var targetName = "cli-tests-test-command-".concat(serverType, "-").concat(timestamp);
374
568
  return new utils_1.Target({
375
569
  name: targetName,
376
570
  serverType: serverType,
377
571
  serverUrl: (serverType === utils_1.ServerType.SasViya
378
572
  ? process.env.VIYA_SERVER_URL
379
- : process.env.SAS9_SERVER_URL),
573
+ : serverType === utils_1.ServerType.Sas9
574
+ ? process.env.SAS9_SERVER_URL
575
+ : process.env.SASJS_SERVER_URL),
380
576
  appLoc: "/Public/app/cli-tests/".concat(targetName),
381
577
  contextName: utils_2.contextName,
382
578
  macroFolders: ['sasjs/macros'],