@sasjs/cli 3.5.0 → 3.6.2
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.
- package/build/commands/compile/internal/compileServiceFile.js +15 -6
- package/build/commands/compile/internal/loadDependencies.js +7 -3
- package/build/commands/compile/internal/spec/compileTestFile.spec.js +2 -2
- package/build/commands/compile/spec/compileJobFile.spec.js +2 -12
- package/build/commands/compile/spec/compileServiceFile.spec.js +2 -12
- package/build/commands/compile/spec/loadDependencies.spec.js +14 -145
- package/build/commands/deploy/spec/cbd.spec.js +7 -4
- package/build/commands/request/spec/request.spec.server.js +158 -126
- package/build/commands/testing/internal/saveOutput.js +1 -1
- package/build/config.json +1 -0
- package/build/utils/config.d.ts +1 -0
- package/build/utils/config.js +27 -1
- package/build/utils/getLogFilePath.js +1 -2
- package/build/utils/test.js +3 -1
- package/build/utils/utils.js +1 -1
- package/package.json +5 -5
|
@@ -101,8 +101,11 @@ function getPreCodeForServicePack(serverType) {
|
|
|
101
101
|
'/* so we provide instead as __program */\n' +
|
|
102
102
|
'%global __program _program;\n' +
|
|
103
103
|
'%let _program=%sysfunc(coalescec(&__program,&_program));\n' +
|
|
104
|
-
'%macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
|
|
105
|
-
'%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt
|
|
104
|
+
'%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
|
|
105
|
+
' %mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
|
|
106
|
+
' ,missing=&missing\n' +
|
|
107
|
+
' ,showmeta=&showmeta\n' +
|
|
108
|
+
' )' +
|
|
106
109
|
'%mend;\n';
|
|
107
110
|
return [3 /*break*/, 14];
|
|
108
111
|
case 5:
|
|
@@ -119,8 +122,11 @@ function getPreCodeForServicePack(serverType) {
|
|
|
119
122
|
case 8:
|
|
120
123
|
content = _g + _l.sent();
|
|
121
124
|
content +=
|
|
122
|
-
' %macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
|
|
123
|
-
' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt
|
|
125
|
+
' %macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
|
|
126
|
+
' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
|
|
127
|
+
' ,missing=&missing\n' +
|
|
128
|
+
' ,showmeta=&showmeta\n' +
|
|
129
|
+
' )' +
|
|
124
130
|
' %mend;\n';
|
|
125
131
|
return [3 /*break*/, 14];
|
|
126
132
|
case 9:
|
|
@@ -137,8 +143,11 @@ function getPreCodeForServicePack(serverType) {
|
|
|
137
143
|
case 12:
|
|
138
144
|
content = _k + _l.sent();
|
|
139
145
|
content +=
|
|
140
|
-
' %macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
|
|
141
|
-
' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt
|
|
146
|
+
' %macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
|
|
147
|
+
' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
|
|
148
|
+
' ,missing=&missing\n' +
|
|
149
|
+
' ,showmeta=&showmeta\n' +
|
|
150
|
+
' )' +
|
|
142
151
|
' %mend;\n';
|
|
143
152
|
return [3 /*break*/, 14];
|
|
144
153
|
case 13: throw new error_1.ServerTypeError();
|
|
@@ -42,7 +42,7 @@ var config_1 = require("../../../utils/config");
|
|
|
42
42
|
function loadDependencies(target, filePath, macroFolders, programFolders, type) {
|
|
43
43
|
var _a;
|
|
44
44
|
return __awaiter(this, void 0, void 0, function () {
|
|
45
|
-
var fileContent, configuration, _b, buildSourceFolder, macroCorePath;
|
|
45
|
+
var fileContent, configuration, _b, buildSourceFolder, macroCorePath, binaryFolders;
|
|
46
46
|
return __generator(this, function (_c) {
|
|
47
47
|
switch (_c.label) {
|
|
48
48
|
case 0:
|
|
@@ -54,6 +54,9 @@ function loadDependencies(target, filePath, macroFolders, programFolders, type)
|
|
|
54
54
|
case 2:
|
|
55
55
|
configuration = (_c.sent()).configuration;
|
|
56
56
|
_b = process.sasjsConstants, buildSourceFolder = _b.buildSourceFolder, macroCorePath = _b.macroCorePath;
|
|
57
|
+
return [4 /*yield*/, config_1.getBinaryFolders(target)];
|
|
58
|
+
case 3:
|
|
59
|
+
binaryFolders = _c.sent();
|
|
57
60
|
headerSyntaxNotices(fileContent);
|
|
58
61
|
return [4 /*yield*/, utils_1.loadDependenciesFile({
|
|
59
62
|
fileContent: fileContent,
|
|
@@ -64,9 +67,10 @@ function loadDependencies(target, filePath, macroFolders, programFolders, type)
|
|
|
64
67
|
macroFolders: macroFolders,
|
|
65
68
|
programFolders: programFolders,
|
|
66
69
|
buildSourceFolder: buildSourceFolder,
|
|
67
|
-
macroCorePath: macroCorePath
|
|
70
|
+
macroCorePath: macroCorePath,
|
|
71
|
+
binaryFolders: binaryFolders
|
|
68
72
|
})];
|
|
69
|
-
case
|
|
73
|
+
case 4: return [2 /*return*/, _c.sent()];
|
|
70
74
|
}
|
|
71
75
|
});
|
|
72
76
|
});
|
|
@@ -128,10 +128,10 @@ describe('compileTestFile', function () {
|
|
|
128
128
|
return [4 /*yield*/, utils_1.readFile(compiledTestFilePath)];
|
|
129
129
|
case 2:
|
|
130
130
|
testFileContent = _a.apply(void 0, [_b.sent()]);
|
|
131
|
-
testVar = replaceLineBreaks("* Test Variables start;\n\n%let " + Object.keys(target.testConfig.macroVars)[0] + "=" + Object.values(target.testConfig.macroVars)[0] + ";\n\n*Test Variables end;");
|
|
131
|
+
testVar = replaceLineBreaks("* Test Variables start;\n\n%let " + Object.keys(target.testConfig.macroVars)[0] + "=" + Object.values(target.testConfig.macroVars)[0] + ";\n\n* Test Variables end;");
|
|
132
132
|
testInit = replaceLineBreaks("* TestInit start;\n/**\n @file\n @brief setting up the test\n\n <h4> SAS Macros </h4>\n**/\n\n%put testing, init;\n* TestInit end;");
|
|
133
133
|
testTerm = replaceLineBreaks("* TestTerm start;\n/**\n @file\n @brief ending the test\n\n <h4> SAS Macros </h4>\n**/\n\n%put testing, termed;\n* TestTerm end;");
|
|
134
|
-
mvWebout = "%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=Y,stream=Y);";
|
|
134
|
+
mvWebout = "%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=Y,stream=Y,missing=NULL<br> ,showmeta=NO<br>);";
|
|
135
135
|
expect(testFileContent.indexOf(testVar)).toBeGreaterThan(-1);
|
|
136
136
|
expect(testFileContent.indexOf(testInit)).toBeGreaterThan(-1);
|
|
137
137
|
expect(testFileContent.indexOf(testTerm)).toBeGreaterThan(-1);
|
|
@@ -61,6 +61,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
61
61
|
var path_1 = __importDefault(require("path"));
|
|
62
62
|
var utils_1 = require("@sasjs/utils");
|
|
63
63
|
var internalModule = __importStar(require("@sasjs/utils/sasjsCli/getInitTerm"));
|
|
64
|
+
var getInitTerm_1 = require("@sasjs/utils/sasjsCli/getInitTerm");
|
|
64
65
|
var test_1 = require("../../../utils/test");
|
|
65
66
|
var compileJobFile_1 = require("../internal/compileJobFile");
|
|
66
67
|
var utils_2 = require("@sasjs/utils");
|
|
@@ -106,18 +107,7 @@ describe('compileJobFile', function () {
|
|
|
106
107
|
return __generator(this, function (_a) {
|
|
107
108
|
switch (_a.label) {
|
|
108
109
|
case 0:
|
|
109
|
-
|
|
110
|
-
return Promise.resolve({
|
|
111
|
-
content: "\n* JobInit start;\n" + fakeJobInit + "\n* JobInit end;",
|
|
112
|
-
filePath: ''
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
116
|
-
return Promise.resolve({
|
|
117
|
-
content: "\n* JobTerm start;\n" + fakeJobTerm + "\n* JobTerm end;",
|
|
118
|
-
filePath: ''
|
|
119
|
-
});
|
|
120
|
-
});
|
|
110
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeJobTerm);
|
|
121
111
|
filePath = path_1.default.join(__dirname, './service.sas');
|
|
122
112
|
buildPath = path_1.default.join(process.projectDir, 'sasjsbuild');
|
|
123
113
|
destinationPath = path_1.default.join(buildPath, 'service.sas');
|
|
@@ -61,6 +61,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
61
61
|
var path_1 = __importDefault(require("path"));
|
|
62
62
|
var utils_1 = require("@sasjs/utils");
|
|
63
63
|
var internalModule = __importStar(require("@sasjs/utils/sasjsCli/getInitTerm"));
|
|
64
|
+
var getInitTerm_1 = require("@sasjs/utils/sasjsCli/getInitTerm");
|
|
64
65
|
var test_1 = require("../../../utils/test");
|
|
65
66
|
var compileServiceFile_1 = require("../internal/compileServiceFile");
|
|
66
67
|
var utils_2 = require("@sasjs/utils");
|
|
@@ -107,18 +108,7 @@ describe('compileServiceFile', function () {
|
|
|
107
108
|
return __generator(this, function (_a) {
|
|
108
109
|
switch (_a.label) {
|
|
109
110
|
case 0:
|
|
110
|
-
|
|
111
|
-
return Promise.resolve({
|
|
112
|
-
content: "\n* ServiceInit start;\n" + fakeJobInit + "\n* ServiceInit end;",
|
|
113
|
-
filePath: ''
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
117
|
-
return Promise.resolve({
|
|
118
|
-
content: "\n* ServiceTerm start;\n" + fakeJobTerm + "\n* ServiceTerm end;",
|
|
119
|
-
filePath: ''
|
|
120
|
-
});
|
|
121
|
-
});
|
|
111
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeJobTerm);
|
|
122
112
|
filePath = path_1.default.join(__dirname, './service.sas');
|
|
123
113
|
buildPath = path_1.default.join(process.projectDir, 'sasjsbuild');
|
|
124
114
|
destinationPath = path_1.default.join(buildPath, 'service.sas');
|
|
@@ -72,6 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
72
72
|
var path_1 = __importDefault(require("path"));
|
|
73
73
|
var utils_1 = require("@sasjs/utils");
|
|
74
74
|
var internalModule = __importStar(require("@sasjs/utils/sasjsCli/getInitTerm"));
|
|
75
|
+
var getInitTerm_1 = require("@sasjs/utils/sasjsCli/getInitTerm");
|
|
75
76
|
var test_1 = require("../../../utils/test");
|
|
76
77
|
var loadDependencies_1 = require("../internal/loadDependencies");
|
|
77
78
|
var fakeInit = "/**\n @file serviceinit.sas\n @brief this file is called with every service\n @details This file is included in *every* service, *after* the macros and *before* the service code.\n\n <h4> SAS Macros </h4>\n @li mf_abort.sas\n\n**/\n\noptions\n DATASTMTCHK=ALLKEYWORDS /* some sites have this enabled */\n PS=MAX /* reduce log size slightly */\n;\n%put service is starting!!;";
|
|
@@ -121,7 +122,7 @@ var serviceConfig = function (root) {
|
|
|
121
122
|
}
|
|
122
123
|
});
|
|
123
124
|
};
|
|
124
|
-
var compiledVars = function (type) { return "* " + type + " Variables start;\n\n%let macrovar1=macro " + type.toLowerCase() + " value configuration 1;\n%let macrovar2=macro " + type.toLowerCase() + " value target 2;\n%let macrovar3=macro " + type.toLowerCase() + " value target 3;\n\n*" + type + " Variables end;"; };
|
|
125
|
+
var compiledVars = function (type) { return "* " + type + " Variables start;\n\n%let macrovar1=macro " + type.toLowerCase() + " value configuration 1;\n%let macrovar2=macro " + type.toLowerCase() + " value target 2;\n%let macrovar3=macro " + type.toLowerCase() + " value target 3;\n\n* " + type + " Variables end;"; };
|
|
125
126
|
describe('loadDependencies', function () {
|
|
126
127
|
var appName = "cli-tests-load-dependencies-" + utils_1.generateTimestamp();
|
|
127
128
|
var temp = test_1.generateTestTarget(appName, '/Public/app', {
|
|
@@ -162,18 +163,7 @@ describe('loadDependencies', function () {
|
|
|
162
163
|
return __generator(this, function (_a) {
|
|
163
164
|
switch (_a.label) {
|
|
164
165
|
case 0:
|
|
165
|
-
|
|
166
|
-
return Promise.resolve({
|
|
167
|
-
content: "\n* ServiceInit start;\n" + fakeInit + "\n* ServiceInit end;",
|
|
168
|
-
filePath: ''
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
172
|
-
return Promise.resolve({
|
|
173
|
-
content: "\n* ServiceTerm start;\n" + fakeTerm + "\n* ServiceTerm end;",
|
|
174
|
-
filePath: ''
|
|
175
|
-
});
|
|
176
|
-
});
|
|
166
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeInit, fakeTerm);
|
|
177
167
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.service)];
|
|
178
168
|
case 1:
|
|
179
169
|
dependencies = _a.sent();
|
|
@@ -193,18 +183,7 @@ describe('loadDependencies', function () {
|
|
|
193
183
|
return __generator(this, function (_a) {
|
|
194
184
|
switch (_a.label) {
|
|
195
185
|
case 0:
|
|
196
|
-
|
|
197
|
-
return Promise.resolve({
|
|
198
|
-
content: "\n* JobInit start;\n" + fakeInit + "\n* JobInit end;",
|
|
199
|
-
filePath: ''
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
203
|
-
return Promise.resolve({
|
|
204
|
-
content: "\n* JobTerm start;\n" + fakeTerm + "\n* JobTerm end;",
|
|
205
|
-
filePath: ''
|
|
206
|
-
});
|
|
207
|
-
});
|
|
186
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeInit, fakeTerm);
|
|
208
187
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.job)];
|
|
209
188
|
case 1:
|
|
210
189
|
dependencies = _a.sent();
|
|
@@ -224,18 +203,7 @@ describe('loadDependencies', function () {
|
|
|
224
203
|
return __generator(this, function (_a) {
|
|
225
204
|
switch (_a.label) {
|
|
226
205
|
case 0:
|
|
227
|
-
|
|
228
|
-
return Promise.resolve({
|
|
229
|
-
content: "\n* ServiceInit start;\n" + fakeInit2 + "\n* ServiceInit end;",
|
|
230
|
-
filePath: ''
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
234
|
-
return Promise.resolve({
|
|
235
|
-
content: "\n* ServiceTerm start;\n" + fakeTerm2 + "\n* ServiceTerm end;",
|
|
236
|
-
filePath: ''
|
|
237
|
-
});
|
|
238
|
-
});
|
|
206
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeTerm2);
|
|
239
207
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.service)];
|
|
240
208
|
case 1:
|
|
241
209
|
dependencies = _a.sent();
|
|
@@ -255,18 +223,7 @@ describe('loadDependencies', function () {
|
|
|
255
223
|
return __generator(this, function (_a) {
|
|
256
224
|
switch (_a.label) {
|
|
257
225
|
case 0:
|
|
258
|
-
|
|
259
|
-
return Promise.resolve({
|
|
260
|
-
content: "\n* JobInit start;\n" + fakeInit2 + "\n* JobInit end;",
|
|
261
|
-
filePath: ''
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
265
|
-
return Promise.resolve({
|
|
266
|
-
content: "\n* JobTerm start;\n" + fakeTerm2 + "\n* JobTerm end;",
|
|
267
|
-
filePath: ''
|
|
268
|
-
});
|
|
269
|
-
});
|
|
226
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeTerm2);
|
|
270
227
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [], [], utils_1.SASJsFileType.job)];
|
|
271
228
|
case 1:
|
|
272
229
|
dependencies = _a.sent();
|
|
@@ -286,18 +243,7 @@ describe('loadDependencies', function () {
|
|
|
286
243
|
return __generator(this, function (_a) {
|
|
287
244
|
switch (_a.label) {
|
|
288
245
|
case 0:
|
|
289
|
-
|
|
290
|
-
return Promise.resolve({
|
|
291
|
-
content: "\n* ServiceInit start;\n" + fakeJobInit + "\n* ServiceInit end;",
|
|
292
|
-
filePath: ''
|
|
293
|
-
});
|
|
294
|
-
});
|
|
295
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
296
|
-
return Promise.resolve({
|
|
297
|
-
content: "\n* ServiceTerm start;\n" + fakeTerm + "\n* ServiceTerm end;",
|
|
298
|
-
filePath: ''
|
|
299
|
-
});
|
|
300
|
-
});
|
|
246
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm);
|
|
301
247
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
|
|
302
248
|
case 1:
|
|
303
249
|
dependencies = _a.sent();
|
|
@@ -317,18 +263,7 @@ describe('loadDependencies', function () {
|
|
|
317
263
|
return __generator(this, function (_a) {
|
|
318
264
|
switch (_a.label) {
|
|
319
265
|
case 0:
|
|
320
|
-
|
|
321
|
-
return Promise.resolve({
|
|
322
|
-
content: "\n* JobInit start;\n" + fakeJobInit + "\n* JobInit end;",
|
|
323
|
-
filePath: ''
|
|
324
|
-
});
|
|
325
|
-
});
|
|
326
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
327
|
-
return Promise.resolve({
|
|
328
|
-
content: "\n* JobTerm start;\n" + fakeTerm + "\n* JobTerm end;",
|
|
329
|
-
filePath: ''
|
|
330
|
-
});
|
|
331
|
-
});
|
|
266
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm);
|
|
332
267
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
|
|
333
268
|
case 1:
|
|
334
269
|
dependencies = _a.sent();
|
|
@@ -348,18 +283,7 @@ describe('loadDependencies', function () {
|
|
|
348
283
|
return __generator(this, function (_a) {
|
|
349
284
|
switch (_a.label) {
|
|
350
285
|
case 0:
|
|
351
|
-
|
|
352
|
-
return Promise.resolve({
|
|
353
|
-
content: "\n* ServiceInit start;\n" + fakeJobInit2 + "\n* ServiceInit end;",
|
|
354
|
-
filePath: ''
|
|
355
|
-
});
|
|
356
|
-
});
|
|
357
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
358
|
-
return Promise.resolve({
|
|
359
|
-
content: "\n* ServiceTerm start;\n" + fakeTerm2 + "\n* ServiceTerm end;",
|
|
360
|
-
filePath: ''
|
|
361
|
-
});
|
|
362
|
-
});
|
|
286
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit2, fakeTerm2);
|
|
363
287
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
|
|
364
288
|
case 1:
|
|
365
289
|
dependencies = _a.sent();
|
|
@@ -379,18 +303,7 @@ describe('loadDependencies', function () {
|
|
|
379
303
|
return __generator(this, function (_a) {
|
|
380
304
|
switch (_a.label) {
|
|
381
305
|
case 0:
|
|
382
|
-
|
|
383
|
-
return Promise.resolve({
|
|
384
|
-
content: "\n* JobInit start;\n" + fakeJobInit2 + "\n* JobInit end;",
|
|
385
|
-
filePath: ''
|
|
386
|
-
});
|
|
387
|
-
});
|
|
388
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
389
|
-
return Promise.resolve({
|
|
390
|
-
content: "\n* JobTerm start;\n" + fakeTerm2 + "\n* JobTerm end;",
|
|
391
|
-
filePath: ''
|
|
392
|
-
});
|
|
393
|
-
});
|
|
306
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit2, fakeTerm2);
|
|
394
307
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
|
|
395
308
|
case 1:
|
|
396
309
|
dependencies = _a.sent();
|
|
@@ -410,18 +323,7 @@ describe('loadDependencies', function () {
|
|
|
410
323
|
return __generator(this, function (_a) {
|
|
411
324
|
switch (_a.label) {
|
|
412
325
|
case 0:
|
|
413
|
-
|
|
414
|
-
return Promise.resolve({
|
|
415
|
-
content: "\n* JobInit start;\n" + fakeJobInit + "\n* JobInit end;",
|
|
416
|
-
filePath: ''
|
|
417
|
-
});
|
|
418
|
-
});
|
|
419
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
420
|
-
return Promise.resolve({
|
|
421
|
-
content: "\n* JobTerm start;\n" + fakeTerm2 + "\n* JobTerm end;",
|
|
422
|
-
filePath: ''
|
|
423
|
-
});
|
|
424
|
-
});
|
|
326
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm2);
|
|
425
327
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
|
|
426
328
|
case 1:
|
|
427
329
|
dependencies = _a.sent();
|
|
@@ -444,18 +346,7 @@ describe('loadDependencies', function () {
|
|
|
444
346
|
return __generator(this, function (_a) {
|
|
445
347
|
switch (_a.label) {
|
|
446
348
|
case 0:
|
|
447
|
-
|
|
448
|
-
return Promise.resolve({
|
|
449
|
-
content: "\n* JobInit start;\n" + fakeInit2 + "\n* JobInit end;",
|
|
450
|
-
filePath: ''
|
|
451
|
-
});
|
|
452
|
-
});
|
|
453
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
454
|
-
return Promise.resolve({
|
|
455
|
-
content: "\n* JobTerm start;\n" + fakeJobInit + "\n* JobTerm end;",
|
|
456
|
-
filePath: ''
|
|
457
|
-
});
|
|
458
|
-
});
|
|
349
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeJobInit);
|
|
459
350
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.job)];
|
|
460
351
|
case 1:
|
|
461
352
|
dependencies = _a.sent();
|
|
@@ -477,18 +368,7 @@ describe('loadDependencies', function () {
|
|
|
477
368
|
return __generator(this, function (_a) {
|
|
478
369
|
switch (_a.label) {
|
|
479
370
|
case 0:
|
|
480
|
-
|
|
481
|
-
return Promise.resolve({
|
|
482
|
-
content: "\n* ServiceInit start;\n" + fakeJobInit + "\n* ServiceInit end;",
|
|
483
|
-
filePath: ''
|
|
484
|
-
});
|
|
485
|
-
});
|
|
486
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
487
|
-
return Promise.resolve({
|
|
488
|
-
content: "\n* ServiceTerm start;\n" + fakeTerm2 + "\n* ServiceTerm end;",
|
|
489
|
-
filePath: ''
|
|
490
|
-
});
|
|
491
|
-
});
|
|
371
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeJobInit, fakeTerm2);
|
|
492
372
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
|
|
493
373
|
case 1:
|
|
494
374
|
dependencies = _a.sent();
|
|
@@ -511,18 +391,7 @@ describe('loadDependencies', function () {
|
|
|
511
391
|
return __generator(this, function (_a) {
|
|
512
392
|
switch (_a.label) {
|
|
513
393
|
case 0:
|
|
514
|
-
|
|
515
|
-
return Promise.resolve({
|
|
516
|
-
content: "\n* ServiceInit start;\n" + fakeInit2 + "\n* ServiceInit end;",
|
|
517
|
-
filePath: ''
|
|
518
|
-
});
|
|
519
|
-
});
|
|
520
|
-
jest.spyOn(internalModule, 'getTerm').mockImplementation(function () {
|
|
521
|
-
return Promise.resolve({
|
|
522
|
-
content: "\n* ServiceTerm start;\n" + fakeJobInit + "\n* ServiceTerm end;",
|
|
523
|
-
filePath: ''
|
|
524
|
-
});
|
|
525
|
-
});
|
|
394
|
+
getInitTerm_1.mockGetProgram(internalModule, fakeInit2, fakeJobInit);
|
|
526
395
|
return [4 /*yield*/, loadDependencies_1.loadDependencies(target, path_1.default.join(__dirname, './service.sas'), [path_1.default.join(__dirname, './macros')], [path_1.default.join(__dirname, './'), path_1.default.join(__dirname, './services')], utils_1.SASJsFileType.service)];
|
|
527
396
|
case 1:
|
|
528
397
|
dependencies = _a.sent();
|
|
@@ -119,8 +119,11 @@ describe('sasjs cbd with server type SASJS', function () {
|
|
|
119
119
|
return [4 /*yield*/, utils_1.readFile(macroCorePath + "/server/ms_webout.sas")];
|
|
120
120
|
case 7:
|
|
121
121
|
ms_webout = _a.sent();
|
|
122
|
-
webout = ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL);\n' +
|
|
123
|
-
' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt
|
|
122
|
+
webout = ' %macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);\n' +
|
|
123
|
+
' %ms_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt\n' +
|
|
124
|
+
' ,missing=&missing\n' +
|
|
125
|
+
' ,showmeta=&showmeta\n' +
|
|
126
|
+
' )' +
|
|
124
127
|
' %mend;\n';
|
|
125
128
|
expect(sasjs.deployToSASjs).toHaveBeenCalledWith({
|
|
126
129
|
members: [
|
|
@@ -136,13 +139,13 @@ describe('sasjs cbd with server type SASJS', function () {
|
|
|
136
139
|
name: 'appinit',
|
|
137
140
|
type: 'service',
|
|
138
141
|
code: utils_3.removeComments("" + mf_getuser + mp_jsonout + ms_webout + webout +
|
|
139
|
-
'/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n*Service Variables end;\n*
|
|
142
|
+
'/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\nproc sql;\ncreate table areas as select distinct area\n from sashelp.springs;\n%webout(OPEN)\n%webout(OBJ,areas)\n%webout(CLOSE)\n* Service end;')
|
|
140
143
|
},
|
|
141
144
|
{
|
|
142
145
|
name: 'getdata',
|
|
143
146
|
type: 'service',
|
|
144
147
|
code: utils_3.removeComments("" + mf_getuser + mp_jsonout + ms_webout + webout +
|
|
145
|
-
'/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n*Service Variables end;\n*
|
|
148
|
+
'/* provide additional debug info */\n%global _program;\n%put &=syscc;\n%put user=%mf_getuser();\n%put pgm=&_program;\n%put timestamp=%sysfunc(datetime(),datetime19.);\n* Service Variables start;\n* Service Variables end;\n* SAS Macros start;\n* SAS Macros end;\n* SAS Includes start;\n* SAS Includes end;\n* Binary Files start;\n* Binary Files end;\n* Service start;\n%webout(FETCH)\nproc sql;\ncreate table springs as select * from sashelp.springs\n where area in (select area from work.areas);\n%webout(OPEN)\n%webout(OBJ,springs)\n%webout(CLOSE)\n* Service end;')
|
|
146
149
|
}
|
|
147
150
|
]
|
|
148
151
|
}
|
|
@@ -92,6 +92,14 @@ var expectedDataObj = {
|
|
|
92
92
|
}
|
|
93
93
|
]
|
|
94
94
|
};
|
|
95
|
+
var getOutputJson = function () { return __awaiter(void 0, void 0, void 0, function () { var _a, _b; return __generator(this, function (_c) {
|
|
96
|
+
switch (_c.label) {
|
|
97
|
+
case 0:
|
|
98
|
+
_b = (_a = JSON).parse;
|
|
99
|
+
return [4 /*yield*/, utils_1.readFile(path_1.default.join(process.projectDir, 'output.json'))];
|
|
100
|
+
case 1: return [2 /*return*/, _b.apply(_a, [_c.sent()])];
|
|
101
|
+
}
|
|
102
|
+
}); }); };
|
|
95
103
|
describe('sasjs request without compute API', function () {
|
|
96
104
|
var appName = 'cli-tests-request-' + utils_2.generateTimestamp();
|
|
97
105
|
var target = test_1.generateTestTarget(appName, "/Public/app/cli-tests/" + appName, {
|
|
@@ -157,69 +165,77 @@ describe('sasjs request without compute API', function () {
|
|
|
157
165
|
});
|
|
158
166
|
}); });
|
|
159
167
|
it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
160
|
-
var
|
|
161
|
-
return __generator(this, function (
|
|
162
|
-
switch (
|
|
168
|
+
var _a, _b;
|
|
169
|
+
return __generator(this, function (_c) {
|
|
170
|
+
switch (_c.label) {
|
|
163
171
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, undefined, authConfig)).toResolve()];
|
|
164
172
|
case 1:
|
|
165
|
-
|
|
166
|
-
|
|
173
|
+
_c.sent();
|
|
174
|
+
_a = expect;
|
|
175
|
+
return [4 /*yield*/, getOutputJson()];
|
|
167
176
|
case 2:
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
177
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
|
|
178
|
+
_b = expect;
|
|
179
|
+
return [4 /*yield*/, getOutputJson()];
|
|
180
|
+
case 3:
|
|
181
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
|
|
172
182
|
return [2 /*return*/];
|
|
173
183
|
}
|
|
174
184
|
});
|
|
175
185
|
}); });
|
|
176
186
|
it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
177
|
-
var
|
|
178
|
-
return __generator(this, function (
|
|
179
|
-
switch (
|
|
187
|
+
var _a, _b;
|
|
188
|
+
return __generator(this, function (_c) {
|
|
189
|
+
switch (_c.label) {
|
|
180
190
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendObj", dataPathRel, undefined, authConfig)).toResolve()];
|
|
181
191
|
case 1:
|
|
182
|
-
|
|
183
|
-
|
|
192
|
+
_c.sent();
|
|
193
|
+
_a = expect;
|
|
194
|
+
return [4 /*yield*/, getOutputJson()];
|
|
184
195
|
case 2:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
196
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
|
|
197
|
+
_b = expect;
|
|
198
|
+
return [4 /*yield*/, getOutputJson()];
|
|
199
|
+
case 3:
|
|
200
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
|
|
189
201
|
return [2 /*return*/];
|
|
190
202
|
}
|
|
191
203
|
});
|
|
192
204
|
}); });
|
|
193
205
|
it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
194
|
-
var
|
|
195
|
-
return __generator(this, function (
|
|
196
|
-
switch (
|
|
206
|
+
var _a, _b;
|
|
207
|
+
return __generator(this, function (_c) {
|
|
208
|
+
switch (_c.label) {
|
|
197
209
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendArr', dataPathRel, undefined, authConfig)).toResolve()];
|
|
198
210
|
case 1:
|
|
199
|
-
|
|
200
|
-
|
|
211
|
+
_c.sent();
|
|
212
|
+
_a = expect;
|
|
213
|
+
return [4 /*yield*/, getOutputJson()];
|
|
201
214
|
case 2:
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
215
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
|
|
216
|
+
_b = expect;
|
|
217
|
+
return [4 /*yield*/, getOutputJson()];
|
|
218
|
+
case 3:
|
|
219
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
|
|
206
220
|
return [2 /*return*/];
|
|
207
221
|
}
|
|
208
222
|
});
|
|
209
223
|
}); });
|
|
210
224
|
it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
211
|
-
var
|
|
212
|
-
return __generator(this, function (
|
|
213
|
-
switch (
|
|
225
|
+
var _a, _b;
|
|
226
|
+
return __generator(this, function (_c) {
|
|
227
|
+
switch (_c.label) {
|
|
214
228
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendObj', dataPathRel, undefined, authConfig)).toResolve()];
|
|
215
229
|
case 1:
|
|
216
|
-
|
|
217
|
-
|
|
230
|
+
_c.sent();
|
|
231
|
+
_a = expect;
|
|
232
|
+
return [4 /*yield*/, getOutputJson()];
|
|
218
233
|
case 2:
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
234
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
|
|
235
|
+
_b = expect;
|
|
236
|
+
return [4 /*yield*/, getOutputJson()];
|
|
237
|
+
case 3:
|
|
238
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
|
|
223
239
|
return [2 /*return*/];
|
|
224
240
|
}
|
|
225
241
|
});
|
|
@@ -231,7 +247,7 @@ describe('sasjs request without compute API', function () {
|
|
|
231
247
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, undefined, authConfig, undefined, undefined, './myoutput.json')).toResolve()];
|
|
232
248
|
case 1:
|
|
233
249
|
_a.sent();
|
|
234
|
-
return [4 /*yield*/, utils_1.readFile(process.projectDir
|
|
250
|
+
return [4 /*yield*/, utils_1.readFile(path_1.default.join(process.projectDir, 'myoutput.json'))];
|
|
235
251
|
case 2:
|
|
236
252
|
rawData = _a.sent();
|
|
237
253
|
output = JSON.parse(rawData);
|
|
@@ -246,13 +262,13 @@ describe('sasjs request without compute API', function () {
|
|
|
246
262
|
return __generator(this, function (_a) {
|
|
247
263
|
switch (_a.label) {
|
|
248
264
|
case 0:
|
|
249
|
-
jobPath = utils_3.prefixAppLoc(target.appLoc,
|
|
265
|
+
jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
|
|
250
266
|
log = getLogFilePath_1.getLogFilePath('./mylog.txt', jobPath || '');
|
|
251
|
-
return [4 /*yield*/, expect(request_1.runSasJob(target, false,
|
|
267
|
+
return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
|
|
252
268
|
case 1:
|
|
253
269
|
_a.sent();
|
|
254
|
-
rawLogDataStats = fs_1.statSync(
|
|
255
|
-
rawDataStats = fs_1.statSync(process.projectDir
|
|
270
|
+
rawLogDataStats = fs_1.statSync(log);
|
|
271
|
+
rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
|
|
256
272
|
expect(rawLogDataStats.size).toBeGreaterThan(10);
|
|
257
273
|
expect(rawDataStats.size).toBeGreaterThan(10);
|
|
258
274
|
return [2 /*return*/];
|
|
@@ -264,13 +280,13 @@ describe('sasjs request without compute API', function () {
|
|
|
264
280
|
return __generator(this, function (_a) {
|
|
265
281
|
switch (_a.label) {
|
|
266
282
|
case 0:
|
|
267
|
-
jobPath = utils_3.prefixAppLoc(target.appLoc,
|
|
283
|
+
jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
|
|
268
284
|
log = getLogFilePath_1.getLogFilePath('', jobPath || '');
|
|
269
|
-
return [4 /*yield*/, expect(request_1.runSasJob(target, false,
|
|
285
|
+
return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
|
|
270
286
|
case 1:
|
|
271
287
|
_a.sent();
|
|
272
|
-
rawLogDataStats = fs_1.statSync(
|
|
273
|
-
rawDataStats = fs_1.statSync(process.projectDir
|
|
288
|
+
rawLogDataStats = fs_1.statSync(log);
|
|
289
|
+
rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
|
|
274
290
|
expect(rawLogDataStats.size).toBeGreaterThan(10);
|
|
275
291
|
expect(rawDataStats.size).toBeGreaterThan(10);
|
|
276
292
|
return [2 /*return*/];
|
|
@@ -339,69 +355,77 @@ describe('sasjs request with SAS9', function () {
|
|
|
339
355
|
});
|
|
340
356
|
}); });
|
|
341
357
|
it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
342
|
-
var
|
|
343
|
-
return __generator(this, function (
|
|
344
|
-
switch (
|
|
358
|
+
var _a, _b;
|
|
359
|
+
return __generator(this, function (_c) {
|
|
360
|
+
switch (_c.label) {
|
|
345
361
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel)).toResolve()];
|
|
346
362
|
case 1:
|
|
347
|
-
|
|
348
|
-
|
|
363
|
+
_c.sent();
|
|
364
|
+
_a = expect;
|
|
365
|
+
return [4 /*yield*/, getOutputJson()];
|
|
349
366
|
case 2:
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
367
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
|
|
368
|
+
_b = expect;
|
|
369
|
+
return [4 /*yield*/, getOutputJson()];
|
|
370
|
+
case 3:
|
|
371
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
|
|
354
372
|
return [2 /*return*/];
|
|
355
373
|
}
|
|
356
374
|
});
|
|
357
375
|
}); });
|
|
358
376
|
it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
359
|
-
var
|
|
360
|
-
return __generator(this, function (
|
|
361
|
-
switch (
|
|
377
|
+
var _a, _b;
|
|
378
|
+
return __generator(this, function (_c) {
|
|
379
|
+
switch (_c.label) {
|
|
362
380
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendObj", dataPathRel)).toResolve()];
|
|
363
381
|
case 1:
|
|
364
|
-
|
|
365
|
-
|
|
382
|
+
_c.sent();
|
|
383
|
+
_a = expect;
|
|
384
|
+
return [4 /*yield*/, getOutputJson()];
|
|
366
385
|
case 2:
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
386
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
|
|
387
|
+
_b = expect;
|
|
388
|
+
return [4 /*yield*/, getOutputJson()];
|
|
389
|
+
case 3:
|
|
390
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
|
|
371
391
|
return [2 /*return*/];
|
|
372
392
|
}
|
|
373
393
|
});
|
|
374
394
|
}); });
|
|
375
395
|
it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
376
|
-
var
|
|
377
|
-
return __generator(this, function (
|
|
378
|
-
switch (
|
|
396
|
+
var _a, _b;
|
|
397
|
+
return __generator(this, function (_c) {
|
|
398
|
+
switch (_c.label) {
|
|
379
399
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendArr', dataPathRel)).toResolve()];
|
|
380
400
|
case 1:
|
|
381
|
-
|
|
382
|
-
|
|
401
|
+
_c.sent();
|
|
402
|
+
_a = expect;
|
|
403
|
+
return [4 /*yield*/, getOutputJson()];
|
|
383
404
|
case 2:
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
405
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
|
|
406
|
+
_b = expect;
|
|
407
|
+
return [4 /*yield*/, getOutputJson()];
|
|
408
|
+
case 3:
|
|
409
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
|
|
388
410
|
return [2 /*return*/];
|
|
389
411
|
}
|
|
390
412
|
});
|
|
391
413
|
}); });
|
|
392
414
|
it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
393
|
-
var
|
|
394
|
-
return __generator(this, function (
|
|
395
|
-
switch (
|
|
415
|
+
var _a, _b;
|
|
416
|
+
return __generator(this, function (_c) {
|
|
417
|
+
switch (_c.label) {
|
|
396
418
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendObj', dataPathRel)).toResolve()];
|
|
397
419
|
case 1:
|
|
398
|
-
|
|
399
|
-
|
|
420
|
+
_c.sent();
|
|
421
|
+
_a = expect;
|
|
422
|
+
return [4 /*yield*/, getOutputJson()];
|
|
400
423
|
case 2:
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
424
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
|
|
425
|
+
_b = expect;
|
|
426
|
+
return [4 /*yield*/, getOutputJson()];
|
|
427
|
+
case 3:
|
|
428
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
|
|
405
429
|
return [2 /*return*/];
|
|
406
430
|
}
|
|
407
431
|
});
|
|
@@ -413,7 +437,7 @@ describe('sasjs request with SAS9', function () {
|
|
|
413
437
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, undefined, undefined, undefined, undefined, './myoutput.json')).toResolve()];
|
|
414
438
|
case 1:
|
|
415
439
|
_a.sent();
|
|
416
|
-
return [4 /*yield*/, utils_1.readFile(process.projectDir
|
|
440
|
+
return [4 /*yield*/, utils_1.readFile(path_1.default.join(process.projectDir, 'myoutput.json'))];
|
|
417
441
|
case 2:
|
|
418
442
|
rawData = _a.sent();
|
|
419
443
|
output = JSON.parse(rawData);
|
|
@@ -428,13 +452,13 @@ describe('sasjs request with SAS9', function () {
|
|
|
428
452
|
return __generator(this, function (_a) {
|
|
429
453
|
switch (_a.label) {
|
|
430
454
|
case 0:
|
|
431
|
-
jobPath = utils_3.prefixAppLoc(target.appLoc,
|
|
455
|
+
jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
|
|
432
456
|
log = getLogFilePath_1.getLogFilePath('./mylog.txt', jobPath || '');
|
|
433
|
-
return [4 /*yield*/, expect(request_1.runSasJob(target, false,
|
|
457
|
+
return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, undefined, log, jobPath)).toResolve()];
|
|
434
458
|
case 1:
|
|
435
459
|
_a.sent();
|
|
436
|
-
rawLogDataStats = fs_1.statSync(
|
|
437
|
-
rawDataStats = fs_1.statSync(process.projectDir
|
|
460
|
+
rawLogDataStats = fs_1.statSync(log);
|
|
461
|
+
rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
|
|
438
462
|
expect(rawLogDataStats.size).toBeGreaterThan(10);
|
|
439
463
|
expect(rawDataStats.size).toBeGreaterThan(10);
|
|
440
464
|
return [2 /*return*/];
|
|
@@ -446,13 +470,13 @@ describe('sasjs request with SAS9', function () {
|
|
|
446
470
|
return __generator(this, function (_a) {
|
|
447
471
|
switch (_a.label) {
|
|
448
472
|
case 0:
|
|
449
|
-
jobPath = utils_3.prefixAppLoc(target.appLoc,
|
|
473
|
+
jobPath = utils_3.prefixAppLoc(target.appLoc, 'services/runRequest/err');
|
|
450
474
|
log = getLogFilePath_1.getLogFilePath('', jobPath || '');
|
|
451
|
-
return [4 /*yield*/, expect(request_1.runSasJob(target, false,
|
|
475
|
+
return [4 /*yield*/, expect(request_1.runSasJob(target, false, jobPath, dataPathRel, undefined, undefined, log, jobPath)).toResolve()];
|
|
452
476
|
case 1:
|
|
453
477
|
_a.sent();
|
|
454
|
-
rawLogDataStats = fs_1.statSync(
|
|
455
|
-
rawDataStats = fs_1.statSync(process.projectDir
|
|
478
|
+
rawLogDataStats = fs_1.statSync(log);
|
|
479
|
+
rawDataStats = fs_1.statSync(path_1.default.join(process.projectDir, 'output.json'));
|
|
456
480
|
expect(rawLogDataStats.size).toBeGreaterThan(10);
|
|
457
481
|
expect(rawDataStats.size).toBeGreaterThan(10);
|
|
458
482
|
return [2 /*return*/];
|
|
@@ -520,69 +544,77 @@ describe("sasjs request with compute API", function () {
|
|
|
520
544
|
});
|
|
521
545
|
}); });
|
|
522
546
|
it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
523
|
-
var
|
|
524
|
-
return __generator(this, function (
|
|
525
|
-
switch (
|
|
547
|
+
var _a, _b;
|
|
548
|
+
return __generator(this, function (_c) {
|
|
549
|
+
switch (_c.label) {
|
|
526
550
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendArr", dataPathRel, configPathRel, authConfig)).toResolve()];
|
|
527
551
|
case 1:
|
|
528
|
-
|
|
529
|
-
|
|
552
|
+
_c.sent();
|
|
553
|
+
_a = expect;
|
|
554
|
+
return [4 /*yield*/, getOutputJson()];
|
|
530
555
|
case 2:
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
556
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
|
|
557
|
+
_b = expect;
|
|
558
|
+
return [4 /*yield*/, getOutputJson()];
|
|
559
|
+
case 3:
|
|
560
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
|
|
535
561
|
return [2 /*return*/];
|
|
536
562
|
}
|
|
537
563
|
});
|
|
538
564
|
}); });
|
|
539
565
|
it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
540
|
-
var
|
|
541
|
-
return __generator(this, function (
|
|
542
|
-
switch (
|
|
566
|
+
var _a, _b;
|
|
567
|
+
return __generator(this, function (_c) {
|
|
568
|
+
switch (_c.label) {
|
|
543
569
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, "/Public/app/cli-tests/" + target.name + "/services/runRequest/sendObj", dataPathRel, configPathRel, authConfig)).toResolve()];
|
|
544
570
|
case 1:
|
|
545
|
-
|
|
546
|
-
|
|
571
|
+
_c.sent();
|
|
572
|
+
_a = expect;
|
|
573
|
+
return [4 /*yield*/, getOutputJson()];
|
|
547
574
|
case 2:
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
575
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
|
|
576
|
+
_b = expect;
|
|
577
|
+
return [4 /*yield*/, getOutputJson()];
|
|
578
|
+
case 3:
|
|
579
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
|
|
552
580
|
return [2 /*return*/];
|
|
553
581
|
}
|
|
554
582
|
});
|
|
555
583
|
}); });
|
|
556
584
|
it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
557
|
-
var
|
|
558
|
-
return __generator(this, function (
|
|
559
|
-
switch (
|
|
585
|
+
var _a, _b;
|
|
586
|
+
return __generator(this, function (_c) {
|
|
587
|
+
switch (_c.label) {
|
|
560
588
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendArr', dataPathRel, undefined, authConfig)).toResolve()];
|
|
561
589
|
case 1:
|
|
562
|
-
|
|
563
|
-
|
|
590
|
+
_c.sent();
|
|
591
|
+
_a = expect;
|
|
592
|
+
return [4 /*yield*/, getOutputJson()];
|
|
564
593
|
case 2:
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
594
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataArr.table1);
|
|
595
|
+
_b = expect;
|
|
596
|
+
return [4 /*yield*/, getOutputJson()];
|
|
597
|
+
case 3:
|
|
598
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataArr.table2);
|
|
569
599
|
return [2 /*return*/];
|
|
570
600
|
}
|
|
571
601
|
});
|
|
572
602
|
}); });
|
|
573
603
|
it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
574
|
-
var
|
|
575
|
-
return __generator(this, function (
|
|
576
|
-
switch (
|
|
604
|
+
var _a, _b;
|
|
605
|
+
return __generator(this, function (_c) {
|
|
606
|
+
switch (_c.label) {
|
|
577
607
|
case 0: return [4 /*yield*/, expect(request_1.runSasJob(target, false, 'services/runRequest/sendObj', dataPathRel, undefined, authConfig)).toResolve()];
|
|
578
608
|
case 1:
|
|
579
|
-
|
|
580
|
-
|
|
609
|
+
_c.sent();
|
|
610
|
+
_a = expect;
|
|
611
|
+
return [4 /*yield*/, getOutputJson()];
|
|
581
612
|
case 2:
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
613
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(expectedDataObj.table1);
|
|
614
|
+
_b = expect;
|
|
615
|
+
return [4 /*yield*/, getOutputJson()];
|
|
616
|
+
case 3:
|
|
617
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(expectedDataObj.table2);
|
|
586
618
|
return [2 /*return*/];
|
|
587
619
|
}
|
|
588
620
|
});
|
|
@@ -76,7 +76,7 @@ var saveLog = function (outDirectory, test, log, lineBreak) {
|
|
|
76
76
|
return __generator(this, function (_a) {
|
|
77
77
|
switch (_a.label) {
|
|
78
78
|
case 0:
|
|
79
|
-
logPath = path_1.default.join(outDirectory, 'logs', test.replace(file_1.sasFileRegExp, '').split(
|
|
79
|
+
logPath = path_1.default.join(outDirectory, 'logs', test.replace(file_1.sasFileRegExp, '').split('/').slice(1).join('_') + '.log');
|
|
80
80
|
return [4 /*yield*/, utils_1.createFile(logPath, log)];
|
|
81
81
|
case 1:
|
|
82
82
|
_a.sent();
|
package/build/config.json
CHANGED
package/build/utils/config.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export declare function getFolders(): Promise<any>;
|
|
|
39
39
|
* @param {Target} target- the target to check program folders for.
|
|
40
40
|
*/
|
|
41
41
|
export declare function getProgramFolders(target: Target): Promise<string[]>;
|
|
42
|
+
export declare function getBinaryFolders(target: Target): Promise<string[]>;
|
|
42
43
|
/**
|
|
43
44
|
* Returns SAS macro folders from configuration.
|
|
44
45
|
* This list includes both common and target-specific folders.
|
package/build/utils/config.js
CHANGED
|
@@ -71,7 +71,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
71
71
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
72
72
|
};
|
|
73
73
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
74
|
-
exports.getTestTearDown = exports.getTestSetUp = exports.overrideEnvVariables = exports.getAccessToken = exports.getAuthConfig = exports.getProjectRoot = exports.sanitizeAppLoc = exports.getMacroCorePath = exports.getStreamConfig = exports.getMacroFolders = exports.getProgramFolders = exports.getFolders = exports.saveToLocalConfig = exports.saveLocalConfigFile = exports.getLocalOrGlobalConfig = exports.getLocalConfig = exports.removeFromLocalConfig = exports.removeFromGlobalConfig = exports.saveToGlobalConfig = exports.saveGlobalRcFile = exports.getLocalRcFile = exports.getGlobalRcFile = exports.findTargetInConfiguration = exports.getConfiguration = void 0;
|
|
74
|
+
exports.getTestTearDown = exports.getTestSetUp = exports.overrideEnvVariables = exports.getAccessToken = exports.getAuthConfig = exports.getProjectRoot = exports.sanitizeAppLoc = exports.getMacroCorePath = exports.getStreamConfig = exports.getMacroFolders = exports.getBinaryFolders = exports.getProgramFolders = exports.getFolders = exports.saveToLocalConfig = exports.saveLocalConfigFile = exports.getLocalOrGlobalConfig = exports.getLocalConfig = exports.removeFromLocalConfig = exports.removeFromGlobalConfig = exports.saveToGlobalConfig = exports.saveGlobalRcFile = exports.getLocalRcFile = exports.getGlobalRcFile = exports.findTargetInConfiguration = exports.getConfiguration = void 0;
|
|
75
75
|
var node_1 = __importDefault(require("@sasjs/adapter/node"));
|
|
76
76
|
var utils_1 = require("@sasjs/utils");
|
|
77
77
|
var auth_1 = require("./auth");
|
|
@@ -641,6 +641,32 @@ function getProgramFolders(target) {
|
|
|
641
641
|
});
|
|
642
642
|
}
|
|
643
643
|
exports.getProgramFolders = getProgramFolders;
|
|
644
|
+
function getBinaryFolders(target) {
|
|
645
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
646
|
+
var binaryFolders, localConfig, buildSourceFolder;
|
|
647
|
+
return __generator(this, function (_a) {
|
|
648
|
+
switch (_a.label) {
|
|
649
|
+
case 0:
|
|
650
|
+
binaryFolders = [];
|
|
651
|
+
return [4 /*yield*/, getLocalConfig().catch(function () { return null; })];
|
|
652
|
+
case 1:
|
|
653
|
+
localConfig = _a.sent();
|
|
654
|
+
if (localConfig === null || localConfig === void 0 ? void 0 : localConfig.binaryFolders) {
|
|
655
|
+
binaryFolders = binaryFolders.concat(localConfig.binaryFolders);
|
|
656
|
+
}
|
|
657
|
+
if (target === null || target === void 0 ? void 0 : target.binaryFolders) {
|
|
658
|
+
binaryFolders = binaryFolders.concat(target.binaryFolders);
|
|
659
|
+
}
|
|
660
|
+
buildSourceFolder = process.sasjsConstants.buildSourceFolder;
|
|
661
|
+
binaryFolders = binaryFolders.map(function (binaryFolder) {
|
|
662
|
+
return utils_1.getAbsolutePath(binaryFolder, buildSourceFolder);
|
|
663
|
+
});
|
|
664
|
+
return [2 /*return*/, __spreadArray([], __read(new Set(binaryFolders)))];
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
exports.getBinaryFolders = getBinaryFolders;
|
|
644
670
|
/**
|
|
645
671
|
* Returns SAS macro folders from configuration.
|
|
646
672
|
* This list includes both common and target-specific folders.
|
|
@@ -6,9 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getLogFilePath = void 0;
|
|
7
7
|
var path_1 = __importDefault(require("path"));
|
|
8
8
|
var getLogFilePath = function (logArg, jobPath) {
|
|
9
|
-
if (logArg === undefined || !jobPath || jobPath === '')
|
|
9
|
+
if (logArg === undefined || !jobPath || jobPath === '')
|
|
10
10
|
return undefined;
|
|
11
|
-
}
|
|
12
11
|
if (logArg) {
|
|
13
12
|
var currentDirPath = path_1.default.isAbsolute(logArg)
|
|
14
13
|
? ''
|
package/build/utils/test.js
CHANGED
|
@@ -350,7 +350,9 @@ var verifyPackageJsonContent = function (parentFolderName) {
|
|
|
350
350
|
case 2:
|
|
351
351
|
packageJsonContent = _a.sent();
|
|
352
352
|
packageJson = JSON.parse(packageJsonContent);
|
|
353
|
-
expect(
|
|
353
|
+
expect(parentFolderName.includes('minimal')
|
|
354
|
+
? packageJson.devDependencies
|
|
355
|
+
: packageJson.dependencies).toEqual(expect.objectContaining({ '@sasjs/core': expect.anything() }));
|
|
354
356
|
return [2 /*return*/];
|
|
355
357
|
}
|
|
356
358
|
});
|
package/build/utils/utils.js
CHANGED
|
@@ -410,7 +410,7 @@ function executeShellScript(filePath, logFilePath) {
|
|
|
410
410
|
return __generator(this, function (_b) {
|
|
411
411
|
switch (_b.label) {
|
|
412
412
|
case 0:
|
|
413
|
-
shellCommand = exports.isWindows() ? "" + filePath : "bash " + filePath;
|
|
413
|
+
shellCommand = exports.isWindows() ? "sh " + filePath : "bash " + filePath;
|
|
414
414
|
result = shelljs_1.default.exec(shellCommand, { silent: true });
|
|
415
415
|
if (!result.code) return [3 /*break*/, 1];
|
|
416
416
|
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.error("Error: " + result.stderr);
|
package/package.json
CHANGED
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"access": "public"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@sasjs/adapter": "3.
|
|
53
|
-
"@sasjs/core": "
|
|
52
|
+
"@sasjs/adapter": "3.4.1",
|
|
53
|
+
"@sasjs/core": "3.10.0",
|
|
54
54
|
"@sasjs/lint": "1.11.2",
|
|
55
|
-
"@sasjs/utils": "2.
|
|
55
|
+
"@sasjs/utils": "2.36.0",
|
|
56
56
|
"chalk": "4.1.2",
|
|
57
57
|
"csv-stringify": "5.6.5",
|
|
58
58
|
"dotenv": "10.0.0",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"node-graphviz": "0.1.0",
|
|
68
68
|
"ora": "5.4.1",
|
|
69
69
|
"rimraf": "3.0.2",
|
|
70
|
-
"shelljs": "0.8.
|
|
70
|
+
"shelljs": "0.8.5",
|
|
71
71
|
"xml": "1.0.1",
|
|
72
72
|
"yargs": "17.2.1"
|
|
73
73
|
},
|
|
@@ -97,5 +97,5 @@
|
|
|
97
97
|
"typescript": "4.3.5",
|
|
98
98
|
"util": "0.12.4"
|
|
99
99
|
},
|
|
100
|
-
"version": "3.
|
|
100
|
+
"version": "3.6.2"
|
|
101
101
|
}
|