@sasjs/cli 3.8.0 → 3.8.3
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/add/addCredential.js +1 -1
- package/build/commands/build/build.js +1 -1
- package/build/commands/build/internal/getLaunchPageCode.js +1 -1
- package/build/commands/job/spec/jobCommand.spec.js +2 -2
- package/build/commands/testing/spec/mockedAdapter/testResponses.d.ts +3 -0
- package/build/commands/testing/spec/mockedAdapter/testResponses.js +23 -0
- package/build/commands/testing/spec/{testing.spec.server.d.ts → testing.spec.d.ts} +0 -0
- package/build/commands/testing/spec/{testing.spec.server.js → testing.spec.js} +70 -12
- package/build/commands/testing/test.js +90 -92
- package/build/utils/auth.js +8 -1
- package/build/utils/createSASjsInstance.d.ts +2 -0
- package/build/utils/createSASjsInstance.js +11 -0
- package/build/utils/utils.js +2 -2
- package/package.json +3 -3
|
@@ -174,7 +174,7 @@ var getTokens = function (target, client, secret, httpsAgentOptions) { return __
|
|
|
174
174
|
});
|
|
175
175
|
return [4 /*yield*/, (0, auth_1.getNewAccessToken)(adapter, client, secret, target).catch(function (e) {
|
|
176
176
|
var _a;
|
|
177
|
-
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.error("An error has occurred while validating your credentials: "
|
|
177
|
+
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.error("An error has occurred while validating your credentials: ", e, "\nPlease check your Client ID ".concat(target.serverType === types_1.ServerType.Sasjs ? '' : 'and Client Secret ', "and try again.\n"));
|
|
178
178
|
throw e;
|
|
179
179
|
})];
|
|
180
180
|
case 1:
|
|
@@ -221,7 +221,7 @@ function getBuildInfo(target, streamWeb) {
|
|
|
221
221
|
];
|
|
222
222
|
case 5:
|
|
223
223
|
dependencyFilePathsForCreateFile = _a.sent();
|
|
224
|
-
return [4 /*yield*/, (0, utils_1.readFile)("".concat((0, config_1.getMacroCorePath)(), "/base/
|
|
224
|
+
return [4 /*yield*/, (0, utils_1.readFile)("".concat((0, config_1.getMacroCorePath)(), "/base/mp_replace.sas"))];
|
|
225
225
|
case 6:
|
|
226
226
|
gsubScript = _a.sent();
|
|
227
227
|
buildConfig += "".concat(gsubScript, "\n");
|
|
@@ -4,7 +4,7 @@ exports.getLaunchPageCode = void 0;
|
|
|
4
4
|
var error_1 = require("@sasjs/utils/error");
|
|
5
5
|
var types_1 = require("@sasjs/utils/types");
|
|
6
6
|
var SAS9Code = function (streamServiceName) { return "\noptions notes;\ndata _null_;\n format url $256.;\n rc=METADATA_GETURI(\"Stored Process Web App\",url);\n url=coalescec(url,\"localhost/SASStoredProcess\");\n urlEscaped = tranwrd(trim(url),\" \",\"%20\");\n putlog \"NOTE: SASjs Streaming App Created! Check it out here:\" ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\n putlog \"NOTE- \" urlEscaped +(-1) \"?_program=&appLoc/services/".concat(streamServiceName, "\" ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\nrun;\n"); };
|
|
7
|
-
var SASViyaCode = function (streamServiceName) { return "\n\n/**\n * The streamService we just deployed (as a _FILE) had the compile-time appLoc\n * In this section we replace with the deploy-time appLoc\n */\n\nfilename _homein filesrvc\n folderPath=\"&apploc/services\"\n filename=\"".concat(streamServiceName, ".html\"\n recfm=v\n lrecl=1048544;\n\n%let local_file=%sysfunc(pathname(work))/service.html;\nfilename _homeout \"&local_file\";\n\ndata _null_;\n rc=fcopy('_homein','_homeout');\n put rc=;\nrun;\n\n%
|
|
7
|
+
var SASViyaCode = function (streamServiceName) { return "\n\n/**\n * The streamService we just deployed (as a _FILE) had the compile-time appLoc\n * In this section we replace with the deploy-time appLoc\n */\n\nfilename _homein filesrvc\n folderPath=\"&apploc/services\"\n filename=\"".concat(streamServiceName, ".html\"\n recfm=v\n lrecl=1048544;\n\n%let local_file=%sysfunc(pathname(work))/service.html;\nfilename _homeout \"&local_file\";\n\ndata _null_;\n rc=fcopy('_homein','_homeout');\n put rc=;\nrun;\n\n%mp_replace(infile=\"&local_file\", findvar=compiled_apploc, replacevar=apploc)\n\ndata _null_;\n rc=fcopy('_homeout','_homein');\n put rc=;\nrun;\n\n/* Tell the user where the app was deployed so they can open it */\noptions notes;\ndata _null_;\n if symexist('_baseurl') then do;\n url=symget('_baseurl');\n if subpad(url,length(url)-9,9)='SASStudio'\n then url=substr(url,1,length(url)-11);\n else url=\"&systcpiphostname\";\n end;\n else url=\"&systcpiphostname\";\n url=cats(url,\"/SASJobExecution?_FILE=&appLoc/services/\");\n urlEscaped = tranwrd(trim(url),\" \",\"%20\");\n putlog \"NOTE: SASjs Streaming App Created! Check it out here:\" ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\n putlog \"NOTE- \" urlEscaped +(-1) '").concat(streamServiceName, ".html&_debug=2' ;\n putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";putlog \"NOTE- \";\nrun;\n"); };
|
|
8
8
|
var getLaunchPageCode = function (serverType, streamServiceName) {
|
|
9
9
|
switch (serverType) {
|
|
10
10
|
case types_1.ServerType.SasViya:
|
|
@@ -318,11 +318,11 @@ describe('JobCommand', function () {
|
|
|
318
318
|
});
|
|
319
319
|
}); });
|
|
320
320
|
});
|
|
321
|
-
describe
|
|
321
|
+
describe('for server type sas9', function () {
|
|
322
322
|
beforeEach(function () {
|
|
323
323
|
setupMocksForSAS9();
|
|
324
324
|
});
|
|
325
|
-
it
|
|
325
|
+
it('should return the error code when user credentials are not found', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
326
326
|
var username, password, returnCode;
|
|
327
327
|
return __generator(this, function (_a) {
|
|
328
328
|
switch (_a.label) {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testResponses = void 0;
|
|
4
|
+
exports.testResponses = {
|
|
5
|
+
'dostuff.test.0': [
|
|
6
|
+
{
|
|
7
|
+
TEST_DESCRIPTION: 'dostuff 0 test description',
|
|
8
|
+
TEST_RESULT: 'FAIL'
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
'dostuff.test.1': [
|
|
12
|
+
{
|
|
13
|
+
TEST_DESCRIPTION: 'dostuff 1 test description',
|
|
14
|
+
TEST_RESULT: 'PASS'
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
'examplemacro.test': [
|
|
18
|
+
{
|
|
19
|
+
TEST_DESCRIPTION: 'examplemacro test.1 description',
|
|
20
|
+
TEST_RESULT: 'PASS'
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
};
|
|
File without changes
|
|
@@ -10,6 +10,25 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
13
32
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
33
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
34
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -54,9 +73,11 @@ var path_1 = __importDefault(require("path"));
|
|
|
54
73
|
var test_1 = require("../test");
|
|
55
74
|
var utils_1 = require("@sasjs/utils");
|
|
56
75
|
var test_2 = require("../../../utils/test");
|
|
57
|
-
var
|
|
76
|
+
var setConstants_1 = require("../../../utils/setConstants");
|
|
58
77
|
var dotenv_1 = __importDefault(require("dotenv"));
|
|
59
78
|
var __1 = require("../..");
|
|
79
|
+
var sasJsModules = __importStar(require("../../../utils/createSASjsInstance"));
|
|
80
|
+
var testResponses_1 = require("./mockedAdapter/testResponses");
|
|
60
81
|
describe('sasjs test', function () {
|
|
61
82
|
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
83
|
describe('SASVIYA', function () {
|
|
@@ -76,23 +97,20 @@ describe('sasjs test', function () {
|
|
|
76
97
|
_a.sent();
|
|
77
98
|
return [4 /*yield*/, (0, __1.build)(target)];
|
|
78
99
|
case 3:
|
|
79
|
-
_a.sent();
|
|
80
|
-
return [4 /*yield*/, (0, __1.deploy)(target, false)];
|
|
81
|
-
case 4:
|
|
82
100
|
_a.sent();
|
|
83
101
|
process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
|
|
84
102
|
return [2 /*return*/];
|
|
85
103
|
}
|
|
86
104
|
});
|
|
87
105
|
}); });
|
|
106
|
+
beforeEach(function () {
|
|
107
|
+
setupMocksForSASVIYA();
|
|
108
|
+
});
|
|
88
109
|
afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
89
110
|
return __generator(this, function (_a) {
|
|
90
111
|
switch (_a.label) {
|
|
91
|
-
case 0: return [4 /*yield*/, (0, test_2.
|
|
112
|
+
case 0: return [4 /*yield*/, (0, test_2.removeTestApp)(__dirname, target.name)];
|
|
92
113
|
case 1:
|
|
93
|
-
_a.sent();
|
|
94
|
-
return [4 /*yield*/, (0, test_2.removeTestApp)(__dirname, target.name)];
|
|
95
|
-
case 2:
|
|
96
114
|
_a.sent();
|
|
97
115
|
return [2 /*return*/];
|
|
98
116
|
}
|
|
@@ -382,15 +400,15 @@ describe('sasjs test', function () {
|
|
|
382
400
|
_a.sent();
|
|
383
401
|
return [4 /*yield*/, (0, __1.build)(target)];
|
|
384
402
|
case 3:
|
|
385
|
-
_a.sent();
|
|
386
|
-
return [4 /*yield*/, (0, __1.deploy)(target, false)];
|
|
387
|
-
case 4:
|
|
388
403
|
_a.sent();
|
|
389
404
|
process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
|
|
390
405
|
return [2 /*return*/];
|
|
391
406
|
}
|
|
392
407
|
});
|
|
393
408
|
}); });
|
|
409
|
+
beforeEach(function () {
|
|
410
|
+
setupMocksForSASJS();
|
|
411
|
+
});
|
|
394
412
|
afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
395
413
|
return __generator(this, function (_a) {
|
|
396
414
|
switch (_a.label) {
|
|
@@ -574,7 +592,7 @@ function generateTarget(serverType) {
|
|
|
574
592
|
? process.env.SAS9_SERVER_URL
|
|
575
593
|
: process.env.SASJS_SERVER_URL),
|
|
576
594
|
appLoc: "/Public/app/cli-tests/".concat(targetName),
|
|
577
|
-
contextName:
|
|
595
|
+
contextName: setConstants_1.contextName,
|
|
578
596
|
macroFolders: ['sasjs/macros'],
|
|
579
597
|
serviceConfig: {
|
|
580
598
|
serviceFolders: [],
|
|
@@ -631,3 +649,43 @@ var copyTestFiles = function (appName) { return __awaiter(void 0, void 0, void 0
|
|
|
631
649
|
}
|
|
632
650
|
});
|
|
633
651
|
}); };
|
|
652
|
+
var setupMocksForSASVIYA = function () {
|
|
653
|
+
jest
|
|
654
|
+
.spyOn(sasJsModules, 'createSASjsInstance')
|
|
655
|
+
.mockImplementation(function (config) {
|
|
656
|
+
return {
|
|
657
|
+
request: function (sasJob) { return __awaiter(void 0, void 0, void 0, function () {
|
|
658
|
+
var testName;
|
|
659
|
+
return __generator(this, function (_a) {
|
|
660
|
+
testName = sasJob.split('/').pop() || '';
|
|
661
|
+
if (testName === 'shouldFail.test') {
|
|
662
|
+
throw {
|
|
663
|
+
errorCode: 404,
|
|
664
|
+
error: { details: { result: 'some log from server' } }
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
return [2 /*return*/, {
|
|
668
|
+
result: { test_results: testResponses_1.testResponses[testName] },
|
|
669
|
+
log: 'some log from server'
|
|
670
|
+
}];
|
|
671
|
+
});
|
|
672
|
+
}); }
|
|
673
|
+
};
|
|
674
|
+
});
|
|
675
|
+
};
|
|
676
|
+
var setupMocksForSASJS = function () {
|
|
677
|
+
jest
|
|
678
|
+
.spyOn(sasJsModules, 'createSASjsInstance')
|
|
679
|
+
.mockImplementation(function (config) {
|
|
680
|
+
return {
|
|
681
|
+
request: function (sasJob) { return __awaiter(void 0, void 0, void 0, function () {
|
|
682
|
+
var testName, test_results;
|
|
683
|
+
return __generator(this, function (_a) {
|
|
684
|
+
testName = sasJob.split('/').pop() || '';
|
|
685
|
+
test_results = testResponses_1.testResponses[testName];
|
|
686
|
+
return [2 /*return*/, { result: { test_results: test_results } }];
|
|
687
|
+
});
|
|
688
|
+
}); }
|
|
689
|
+
};
|
|
690
|
+
});
|
|
691
|
+
};
|
|
@@ -82,10 +82,10 @@ var file_1 = require("../../utils/file");
|
|
|
82
82
|
var config_1 = require("../../utils/config");
|
|
83
83
|
var displayResult_1 = require("../../utils/displayResult");
|
|
84
84
|
var utils_1 = require("@sasjs/utils");
|
|
85
|
-
var node_1 = __importDefault(require("@sasjs/adapter/node"));
|
|
86
85
|
var path_1 = __importDefault(require("path"));
|
|
87
86
|
var chalk_1 = __importDefault(require("chalk"));
|
|
88
87
|
var utils_2 = require("../../utils/utils");
|
|
88
|
+
var createSASjsInstance_1 = require("../../utils/createSASjsInstance");
|
|
89
89
|
function runTest(target, testRegExps, outDirectory, flowSourcePath) {
|
|
90
90
|
var _a, _b;
|
|
91
91
|
if (testRegExps === void 0) { testRegExps = []; }
|
|
@@ -146,7 +146,7 @@ function runTest(target, testRegExps, outDirectory, flowSourcePath) {
|
|
|
146
146
|
})), false);
|
|
147
147
|
if (testFlow.testTearDown)
|
|
148
148
|
flow.push(testFlow.testTearDown);
|
|
149
|
-
sasjs =
|
|
149
|
+
sasjs = (0, createSASjsInstance_1.createSASjsInstance)({
|
|
150
150
|
serverUrl: target.serverUrl,
|
|
151
151
|
httpsAgentOptions: target.httpsAgentOptions,
|
|
152
152
|
appLoc: target.appLoc,
|
|
@@ -204,14 +204,15 @@ function runTest(target, testRegExps, outDirectory, flowSourcePath) {
|
|
|
204
204
|
}
|
|
205
205
|
};
|
|
206
206
|
return [4 /*yield*/, (0, utils_1.asyncForEach)(flow, function (test) { return __awaiter(_this, void 0, void 0, function () {
|
|
207
|
-
var sasJobLocation, testTarget, testId, testUrl, printTestUrl
|
|
207
|
+
var pathSepRegExp, sasJobLocation, testTarget, testId, testUrl, printTestUrl;
|
|
208
208
|
var _this = this;
|
|
209
209
|
return __generator(this, function (_a) {
|
|
210
210
|
switch (_a.label) {
|
|
211
211
|
case 0:
|
|
212
|
+
pathSepRegExp = new RegExp(path_1.default.sep.replace(/\\/g, '\\\\'), 'g');
|
|
212
213
|
sasJobLocation = [
|
|
213
214
|
target.appLoc,
|
|
214
|
-
test.replace(file_1.sasFileRegExp, '')
|
|
215
|
+
test.replace(pathSepRegExp, '/').replace(file_1.sasFileRegExp, '')
|
|
215
216
|
].join('/');
|
|
216
217
|
testTarget = test
|
|
217
218
|
.split('/')
|
|
@@ -224,108 +225,105 @@ function runTest(target, testRegExps, outDirectory, flowSourcePath) {
|
|
|
224
225
|
}
|
|
225
226
|
printTestUrl = function () { return process.logger.info("Test URL: ".concat(testUrl)); };
|
|
226
227
|
printTestUrl();
|
|
227
|
-
handleRes = function (res) { return __awaiter(_this, void 0, void 0, function () {
|
|
228
|
-
var lineBreak, test_results, existingTestTarget, existingTestTarget;
|
|
229
|
-
var _a, _b;
|
|
230
|
-
return __generator(this, function (_c) {
|
|
231
|
-
switch (_c.label) {
|
|
232
|
-
case 0:
|
|
233
|
-
lineBreak = true;
|
|
234
|
-
test_results = (_a = res.result) === null || _a === void 0 ? void 0 : _a.test_results;
|
|
235
|
-
if (!test_results) {
|
|
236
|
-
(0, displayResult_1.displayError)({}, "Job did not return a response, to debug click ".concat(testUrl));
|
|
237
|
-
printCodeExample();
|
|
238
|
-
lineBreak = false;
|
|
239
|
-
existingTestTarget = result.sasjs_test_meta.find(function (testResult) { return testResult.test_target === testTarget; });
|
|
240
|
-
if (existingTestTarget) {
|
|
241
|
-
existingTestTarget.results.push({
|
|
242
|
-
test_loc: test,
|
|
243
|
-
sasjs_test_id: testId,
|
|
244
|
-
result: types_1.TestResultStatus.notProvided,
|
|
245
|
-
test_url: testUrl
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
result.sasjs_test_meta.push({
|
|
250
|
-
test_target: testTarget,
|
|
251
|
-
results: [
|
|
252
|
-
{
|
|
253
|
-
test_loc: test,
|
|
254
|
-
sasjs_test_id: testId,
|
|
255
|
-
result: types_1.TestResultStatus.notProvided,
|
|
256
|
-
test_url: testUrl
|
|
257
|
-
}
|
|
258
|
-
]
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
if (!res.log) return [3 /*break*/, 2];
|
|
263
|
-
return [4 /*yield*/, (0, saveOutput_1.saveLog)(outDirectory, test, res.log, lineBreak)];
|
|
264
|
-
case 1:
|
|
265
|
-
_c.sent();
|
|
266
|
-
_c.label = 2;
|
|
267
|
-
case 2:
|
|
268
|
-
if ((_b = res.result) === null || _b === void 0 ? void 0 : _b.test_results) {
|
|
269
|
-
existingTestTarget = result.sasjs_test_meta.find(function (testResult) { return testResult.test_target === testTarget; });
|
|
270
|
-
if (existingTestTarget) {
|
|
271
|
-
existingTestTarget.results.push({
|
|
272
|
-
test_loc: test,
|
|
273
|
-
sasjs_test_id: testId,
|
|
274
|
-
result: res.result.test_results,
|
|
275
|
-
test_url: testUrl
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
result.sasjs_test_meta.push({
|
|
280
|
-
test_target: testTarget,
|
|
281
|
-
results: [
|
|
282
|
-
{
|
|
283
|
-
test_loc: test,
|
|
284
|
-
sasjs_test_id: testId,
|
|
285
|
-
result: res.result.test_results,
|
|
286
|
-
test_url: testUrl
|
|
287
|
-
}
|
|
288
|
-
]
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
else if (target.serverType !== utils_1.ServerType.Sasjs) {
|
|
293
|
-
(0, displayResult_1.displayError)({}, "'test_results' not found in server response, to debug click ".concat(testUrl));
|
|
294
|
-
printCodeExample();
|
|
295
|
-
}
|
|
296
|
-
return [2 /*return*/];
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
}); };
|
|
300
228
|
return [4 /*yield*/, sasjs
|
|
301
229
|
.request(sasJobLocation, {}, { username: username, password: password }, function () {
|
|
302
230
|
(0, displayResult_1.displayError)(null, 'Login callback called. Request failed.');
|
|
303
231
|
}, authConfig, ['log'])
|
|
304
|
-
.then(
|
|
305
|
-
|
|
306
|
-
var _a
|
|
307
|
-
return __generator(this, function (
|
|
308
|
-
switch (
|
|
232
|
+
.then(function (res) { return __awaiter(_this, void 0, void 0, function () {
|
|
233
|
+
var lineBreak, test_results, existingTestTarget, existingTestTarget;
|
|
234
|
+
var _a;
|
|
235
|
+
return __generator(this, function (_b) {
|
|
236
|
+
switch (_b.label) {
|
|
309
237
|
case 0:
|
|
310
|
-
|
|
311
|
-
|
|
238
|
+
lineBreak = true;
|
|
239
|
+
test_results = (_a = res.result) === null || _a === void 0 ? void 0 : _a.test_results;
|
|
240
|
+
if (!test_results) {
|
|
241
|
+
(0, displayResult_1.displayError)({}, "Job did not return a response, to debug click ".concat(testUrl));
|
|
242
|
+
printCodeExample();
|
|
243
|
+
lineBreak = false;
|
|
244
|
+
existingTestTarget = result.sasjs_test_meta.find(function (testResult) {
|
|
245
|
+
return testResult.test_target === testTarget;
|
|
246
|
+
});
|
|
247
|
+
if (existingTestTarget) {
|
|
248
|
+
existingTestTarget.results.push({
|
|
249
|
+
test_loc: test,
|
|
250
|
+
sasjs_test_id: testId,
|
|
251
|
+
result: types_1.TestResultStatus.notProvided,
|
|
252
|
+
test_url: testUrl
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
result.sasjs_test_meta.push({
|
|
257
|
+
test_target: testTarget,
|
|
258
|
+
results: [
|
|
259
|
+
{
|
|
260
|
+
test_loc: test,
|
|
261
|
+
sasjs_test_id: testId,
|
|
262
|
+
result: types_1.TestResultStatus.notProvided,
|
|
263
|
+
test_url: testUrl
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (!res.log) return [3 /*break*/, 2];
|
|
270
|
+
return [4 /*yield*/, (0, saveOutput_1.saveLog)(outDirectory, test, res.log, lineBreak)];
|
|
312
271
|
case 1:
|
|
313
|
-
|
|
314
|
-
|
|
272
|
+
_b.sent();
|
|
273
|
+
_b.label = 2;
|
|
315
274
|
case 2:
|
|
275
|
+
if (test_results) {
|
|
276
|
+
existingTestTarget = result.sasjs_test_meta.find(function (testResult) {
|
|
277
|
+
return testResult.test_target === testTarget;
|
|
278
|
+
});
|
|
279
|
+
if (existingTestTarget) {
|
|
280
|
+
existingTestTarget.results.push({
|
|
281
|
+
test_loc: test,
|
|
282
|
+
sasjs_test_id: testId,
|
|
283
|
+
result: test_results,
|
|
284
|
+
test_url: testUrl
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
result.sasjs_test_meta.push({
|
|
289
|
+
test_target: testTarget,
|
|
290
|
+
results: [
|
|
291
|
+
{
|
|
292
|
+
test_loc: test,
|
|
293
|
+
sasjs_test_id: testId,
|
|
294
|
+
result: test_results,
|
|
295
|
+
test_url: testUrl
|
|
296
|
+
}
|
|
297
|
+
]
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else if (target.serverType !== utils_1.ServerType.Sasjs) {
|
|
302
|
+
(0, displayResult_1.displayError)({}, "'test_results' not found in server response, to debug click ".concat(testUrl));
|
|
303
|
+
printCodeExample();
|
|
304
|
+
}
|
|
305
|
+
return [2 /*return*/];
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
}); })
|
|
309
|
+
.catch(function (err) { return __awaiter(_this, void 0, void 0, function () {
|
|
310
|
+
var _a, _b;
|
|
311
|
+
return __generator(this, function (_c) {
|
|
312
|
+
switch (_c.label) {
|
|
313
|
+
case 0:
|
|
316
314
|
printTestUrl();
|
|
317
|
-
if (err
|
|
315
|
+
if ((err === null || err === void 0 ? void 0 : err.errorCode) === 404) {
|
|
318
316
|
(0, utils_2.displaySasjsRunnerError)(username);
|
|
319
317
|
}
|
|
320
318
|
else {
|
|
321
319
|
(0, displayResult_1.displayError)({}, "An error occurred while executing the request. Job location: ".concat(sasJobLocation));
|
|
322
320
|
}
|
|
323
|
-
if (!((
|
|
321
|
+
if (!((_b = (_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.details) === null || _b === void 0 ? void 0 : _b.result)) return [3 /*break*/, 2];
|
|
324
322
|
return [4 /*yield*/, (0, saveOutput_1.saveLog)(outDirectory, test, err.error.details.result)];
|
|
325
|
-
case
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
case
|
|
323
|
+
case 1:
|
|
324
|
+
_c.sent();
|
|
325
|
+
_c.label = 2;
|
|
326
|
+
case 2: return [2 /*return*/];
|
|
329
327
|
}
|
|
330
328
|
});
|
|
331
329
|
}); })];
|
package/build/utils/auth.js
CHANGED
|
@@ -124,7 +124,14 @@ function getNewAccessToken(sasjsInstance, clientId, clientSecret, target) {
|
|
|
124
124
|
return [4 /*yield*/, getAuthCode(authUrl)];
|
|
125
125
|
case 1:
|
|
126
126
|
authCode = _b.sent();
|
|
127
|
-
return [4 /*yield*/, sasjsInstance
|
|
127
|
+
return [4 /*yield*/, sasjsInstance
|
|
128
|
+
.getAccessToken(clientId, clientSecret, authCode)
|
|
129
|
+
.then(function (res) {
|
|
130
|
+
var access_token = res.access_token, refresh_token = res.refresh_token;
|
|
131
|
+
if (access_token && refresh_token)
|
|
132
|
+
return res;
|
|
133
|
+
throw res;
|
|
134
|
+
})];
|
|
128
135
|
case 2:
|
|
129
136
|
_a = _b.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token;
|
|
130
137
|
return [2 /*return*/, { access_token: access_token, refresh_token: refresh_token }];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createSASjsInstance = void 0;
|
|
7
|
+
var node_1 = __importDefault(require("@sasjs/adapter/node"));
|
|
8
|
+
var createSASjsInstance = function (config) {
|
|
9
|
+
return new node_1.default(config);
|
|
10
|
+
};
|
|
11
|
+
exports.createSASjsInstance = createSASjsInstance;
|
package/build/utils/utils.js
CHANGED
|
@@ -511,8 +511,8 @@ function getAdapterInstance(target) {
|
|
|
511
511
|
exports.getAdapterInstance = getAdapterInstance;
|
|
512
512
|
function displaySasjsRunnerError(username) {
|
|
513
513
|
var _a;
|
|
514
|
-
var sasjsRunnerCode = "\nfilename mc url \"https://raw.githubusercontent.com/sasjs/core/main/all.sas\";\n%inc mc;\nfilename ft15f001 temp;\nparmcards4;\n%macro sasjs_runner();\n%if %symexist(_webin_fileref) %then %do;\n%inc &_webin_fileref;\n%end;\n%mend sasjs_runner;\n%sasjs_runner()\n;;;;\n%mm_createwebservice(path=/User Folders/&
|
|
515
|
-
var message = "The SASjs runner was not found in your user folder at /User Folders/
|
|
514
|
+
var sasjsRunnerCode = "\nfilename mc url \"https://raw.githubusercontent.com/sasjs/core/main/all.sas\";\n%inc mc;\nfilename ft15f001 temp;\nparmcards4;\n%macro sasjs_runner();\n%if %symexist(_webin_fileref) %then %do;\n%inc &_webin_fileref;\n%end;\n%mend sasjs_runner;\n%sasjs_runner()\n;;;;\n%mm_createwebservice(path=/User Folders/&_metauser/My Folder/sasjs,name=runner)\n";
|
|
515
|
+
var message = "The SASjs runner was not found in your user folder at /User Folders/&_metauser/My Folder/sasjs/runner.";
|
|
516
516
|
(0, displayResult_1.displayError)(message, 'An error occurred while executing the request.');
|
|
517
517
|
(_a = process.logger) === null || _a === void 0 ? void 0 : _a.info("Please deploy the SASjs runner by running the code below and try again:\n".concat(sasjsRunnerCode));
|
|
518
518
|
}
|
package/package.json
CHANGED
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@sasjs/adapter": "3.7.
|
|
51
|
-
"@sasjs/core": "4.
|
|
50
|
+
"@sasjs/adapter": "3.7.8",
|
|
51
|
+
"@sasjs/core": "4.15.3",
|
|
52
52
|
"@sasjs/lint": "1.11.2",
|
|
53
53
|
"@sasjs/utils": "2.36.0",
|
|
54
54
|
"chalk": "4.1.2",
|
|
@@ -94,5 +94,5 @@
|
|
|
94
94
|
"typescript": "4.5.4",
|
|
95
95
|
"util": "0.12.4"
|
|
96
96
|
},
|
|
97
|
-
"version": "3.8.
|
|
97
|
+
"version": "3.8.3"
|
|
98
98
|
}
|