@sasjs/cli 3.16.2 → 3.18.0
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/build/build.js +42 -40
- package/build/commands/build/spec/build.spec.js +51 -0
- package/build/commands/build/spec/{cb.spec.server.d.ts → cb.spec.server.viya.d.ts} +0 -0
- package/build/commands/build/spec/{cb.spec.server.js → cb.spec.server.viya.js} +1 -1
- package/build/commands/compile/internal/compileFile.js +6 -3
- package/build/commands/compile/internal/loadDependencies.js +29 -21
- package/build/commands/deploy/spec/cbd.spec.js +24 -19
- package/build/commands/deploy/spec/{cbd.spec.server.d.ts → cbd.spec.server.viya.d.ts} +0 -0
- package/build/commands/deploy/spec/cbd.spec.server.viya.js +334 -0
- package/build/commands/flow/spec/{flow.spec.server.d.ts → flow.spec.server.viya.d.ts} +0 -0
- package/build/commands/flow/spec/{flow.spec.server.js → flow.spec.server.viya.js} +39 -55
- package/build/commands/folder/spec/{folder.spec.server.d.ts → folder.spec.server.viya.d.ts} +0 -0
- package/build/commands/folder/spec/{folder.spec.server.js → folder.spec.server.viya.js} +17 -23
- package/build/commands/init/init.js +7 -10
- package/build/commands/init/spec/{init.spec.server.d.ts → init.spec.d.ts} +0 -0
- package/build/commands/init/spec/{init.spec.server.js → init.spec.js} +0 -0
- package/build/commands/job/spec/{job.spec.server.d.ts → job.spec.server.viya.d.ts} +0 -0
- package/build/commands/job/spec/{job.spec.server.js → job.spec.server.viya.js} +45 -56
- package/build/commands/request/request.js +3 -2
- package/build/commands/request/spec/{request.spec.server.d.ts → request.spec.server.sas9.d.ts} +0 -0
- package/build/commands/request/spec/request.spec.server.sas9.js +283 -0
- package/build/commands/{run/spec/run.spec.server.d.ts → request/spec/request.spec.server.viya.d.ts} +0 -0
- package/build/commands/request/spec/request.spec.server.viya.js +460 -0
- package/build/commands/request/spec/utils.d.ts +23 -0
- package/build/commands/request/spec/utils.js +87 -0
- package/build/commands/{servicepack/spec/servicepack.spec.server.d.ts → run/spec/run.spec.server.sas9.d.ts} +0 -0
- package/build/commands/run/spec/run.spec.server.sas9.js +115 -0
- package/build/commands/run/spec/run.spec.server.viya.d.ts +1 -0
- package/build/commands/run/spec/{run.spec.server.js → run.spec.server.viya.js} +32 -101
- package/build/commands/servicepack/spec/servicepack.spec.server.viya.d.ts +1 -0
- package/build/commands/servicepack/spec/{servicepack.spec.server.js → servicepack.spec.server.viya.js} +1 -1
- package/build/utils/test.js +4 -2
- package/build/utils/utils.d.ts +0 -7
- package/build/utils/utils.js +92 -114
- package/package.json +6 -5
- package/build/commands/deploy/spec/cbd.spec.server.js +0 -331
- package/build/commands/request/spec/request.spec.server.js +0 -709
- package/build/utils/spec/removeComments.spec.d.ts +0 -1
- package/build/utils/spec/removeComments.spec.js +0 -47
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
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
|
+
};
|
|
32
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
33
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
34
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
35
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
36
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
37
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
38
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
42
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
43
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
44
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
45
|
+
function step(op) {
|
|
46
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
47
|
+
while (_) try {
|
|
48
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
49
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
50
|
+
switch (op[0]) {
|
|
51
|
+
case 0: case 1: t = op; break;
|
|
52
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
53
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
54
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
55
|
+
default:
|
|
56
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
57
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
58
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
59
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
60
|
+
if (t[2]) _.ops.pop();
|
|
61
|
+
_.trys.pop(); continue;
|
|
62
|
+
}
|
|
63
|
+
op = body.call(thisArg, _);
|
|
64
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
65
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
69
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
70
|
+
};
|
|
71
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
|
+
var path_1 = __importDefault(require("path"));
|
|
73
|
+
var utils_1 = require("@sasjs/utils");
|
|
74
|
+
var utils_2 = require("@sasjs/utils");
|
|
75
|
+
var test_1 = require("../../../utils/test");
|
|
76
|
+
var timeStampUtils = __importStar(require("@sasjs/utils/time"));
|
|
77
|
+
var config_1 = require("../../../utils/config");
|
|
78
|
+
var request_1 = require("../request");
|
|
79
|
+
var build_1 = require("../../build/build");
|
|
80
|
+
var deploy_1 = require("../../deploy/deploy");
|
|
81
|
+
var utils_3 = require("../../../utils");
|
|
82
|
+
var getLogFilePath_1 = require("../../../utils/getLogFilePath");
|
|
83
|
+
var fs_1 = require("fs");
|
|
84
|
+
var utils_4 = require("./utils");
|
|
85
|
+
describe('sasjs request with Viya', function () {
|
|
86
|
+
describe('sasjs request without compute API', function () {
|
|
87
|
+
var appName = 'cli-tests-request-' + (0, utils_2.generateTimestamp)();
|
|
88
|
+
var target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName), {
|
|
89
|
+
serviceFolders: ['sasjs/runRequest'],
|
|
90
|
+
initProgram: '',
|
|
91
|
+
termProgram: '',
|
|
92
|
+
macroVars: {}
|
|
93
|
+
}, utils_1.ServerType.SasViya);
|
|
94
|
+
var authConfig;
|
|
95
|
+
var dataPathRel = 'data.json';
|
|
96
|
+
var configPathRel = 'sasjsconfig-temp.json';
|
|
97
|
+
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
98
|
+
var sasjsBuildDirPath;
|
|
99
|
+
return __generator(this, function (_a) {
|
|
100
|
+
switch (_a.label) {
|
|
101
|
+
case 0: return [4 /*yield*/, (0, test_1.createTestApp)(__dirname, appName)];
|
|
102
|
+
case 1:
|
|
103
|
+
_a.sent();
|
|
104
|
+
return [4 /*yield*/, (0, config_1.getAuthConfig)(target)];
|
|
105
|
+
case 2:
|
|
106
|
+
authConfig = _a.sent();
|
|
107
|
+
return [4 /*yield*/, (0, utils_1.copy)(path_1.default.join(__dirname, 'runRequest'), path_1.default.join(process.projectDir, 'sasjs', 'runRequest'))];
|
|
108
|
+
case 3:
|
|
109
|
+
_a.sent();
|
|
110
|
+
return [4 /*yield*/, (0, build_1.build)(target)];
|
|
111
|
+
case 4:
|
|
112
|
+
_a.sent();
|
|
113
|
+
return [4 /*yield*/, (0, deploy_1.deploy)(target, false)];
|
|
114
|
+
case 5:
|
|
115
|
+
_a.sent();
|
|
116
|
+
sasjsBuildDirPath = path_1.default.join(process.projectDir, 'sasjsbuild');
|
|
117
|
+
return [4 /*yield*/, (0, utils_1.deleteFolder)(sasjsBuildDirPath)];
|
|
118
|
+
case 6:
|
|
119
|
+
_a.sent();
|
|
120
|
+
return [2 /*return*/];
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}); });
|
|
124
|
+
afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
125
|
+
return __generator(this, function (_a) {
|
|
126
|
+
switch (_a.label) {
|
|
127
|
+
case 0: return [4 /*yield*/, (0, test_1.removeTestServerFolder)(target.appLoc, target)];
|
|
128
|
+
case 1:
|
|
129
|
+
_a.sent();
|
|
130
|
+
return [4 /*yield*/, (0, test_1.removeTestApp)(__dirname, target.name)];
|
|
131
|
+
case 2:
|
|
132
|
+
_a.sent();
|
|
133
|
+
return [2 /*return*/];
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}); });
|
|
137
|
+
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
138
|
+
return __generator(this, function (_a) {
|
|
139
|
+
switch (_a.label) {
|
|
140
|
+
case 0: return [4 /*yield*/, (0, utils_1.createFile)(path_1.default.join(process.projectDir, configPathRel), JSON.stringify(target.toJson(), null, 2))];
|
|
141
|
+
case 1:
|
|
142
|
+
_a.sent();
|
|
143
|
+
return [4 /*yield*/, (0, utils_1.createFile)(path_1.default.join(process.projectDir, dataPathRel), JSON.stringify(utils_4.sampleDataJson, null, 2))];
|
|
144
|
+
case 2:
|
|
145
|
+
_a.sent();
|
|
146
|
+
return [2 /*return*/];
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}); });
|
|
150
|
+
it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
151
|
+
var timestamp, outputFilename, _a, _b;
|
|
152
|
+
return __generator(this, function (_c) {
|
|
153
|
+
switch (_c.label) {
|
|
154
|
+
case 0:
|
|
155
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
156
|
+
jest
|
|
157
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
158
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
159
|
+
outputFilename = "sendArr-".concat(timestamp, ".json");
|
|
160
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, "/Public/app/cli-tests/".concat(target.name, "/services/runRequest/sendArr"), dataPathRel, undefined, authConfig)).toResolve()];
|
|
161
|
+
case 1:
|
|
162
|
+
_c.sent();
|
|
163
|
+
_a = expect;
|
|
164
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
165
|
+
case 2:
|
|
166
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataArr.table1);
|
|
167
|
+
_b = expect;
|
|
168
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
169
|
+
case 3:
|
|
170
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataArr.table2);
|
|
171
|
+
return [2 /*return*/];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}); });
|
|
175
|
+
it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
176
|
+
var timestamp, outputFilename, _a, _b;
|
|
177
|
+
return __generator(this, function (_c) {
|
|
178
|
+
switch (_c.label) {
|
|
179
|
+
case 0:
|
|
180
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
181
|
+
jest
|
|
182
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
183
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
184
|
+
outputFilename = "sendObj-".concat(timestamp, ".json");
|
|
185
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, "/Public/app/cli-tests/".concat(target.name, "/services/runRequest/sendObj"), dataPathRel, undefined, authConfig)).toResolve()];
|
|
186
|
+
case 1:
|
|
187
|
+
_c.sent();
|
|
188
|
+
_a = expect;
|
|
189
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
190
|
+
case 2:
|
|
191
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataObj.table1);
|
|
192
|
+
_b = expect;
|
|
193
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
194
|
+
case 3:
|
|
195
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataObj.table2);
|
|
196
|
+
return [2 /*return*/];
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}); });
|
|
200
|
+
it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
201
|
+
var timestamp, outputFilename, _a, _b;
|
|
202
|
+
return __generator(this, function (_c) {
|
|
203
|
+
switch (_c.label) {
|
|
204
|
+
case 0:
|
|
205
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
206
|
+
jest
|
|
207
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
208
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
209
|
+
outputFilename = "sendArr-".concat(timestamp, ".json");
|
|
210
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, 'services/runRequest/sendArr', dataPathRel, undefined, authConfig)).toResolve()];
|
|
211
|
+
case 1:
|
|
212
|
+
_c.sent();
|
|
213
|
+
_a = expect;
|
|
214
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
215
|
+
case 2:
|
|
216
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataArr.table1);
|
|
217
|
+
_b = expect;
|
|
218
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
219
|
+
case 3:
|
|
220
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataArr.table2);
|
|
221
|
+
return [2 /*return*/];
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}); });
|
|
225
|
+
it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
226
|
+
var timestamp, outputFilename, _a, _b;
|
|
227
|
+
return __generator(this, function (_c) {
|
|
228
|
+
switch (_c.label) {
|
|
229
|
+
case 0:
|
|
230
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
231
|
+
jest
|
|
232
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
233
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
234
|
+
outputFilename = "sendObj-".concat(timestamp, ".json");
|
|
235
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, 'services/runRequest/sendObj', dataPathRel, undefined, authConfig)).toResolve()];
|
|
236
|
+
case 1:
|
|
237
|
+
_c.sent();
|
|
238
|
+
_a = expect;
|
|
239
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
240
|
+
case 2:
|
|
241
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataObj.table1);
|
|
242
|
+
_b = expect;
|
|
243
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
244
|
+
case 3:
|
|
245
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataObj.table2);
|
|
246
|
+
return [2 /*return*/];
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
}); });
|
|
250
|
+
it("should execute service 'sendArr' with absolute path with output path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
251
|
+
var rawData, output;
|
|
252
|
+
return __generator(this, function (_a) {
|
|
253
|
+
switch (_a.label) {
|
|
254
|
+
case 0: return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, "/Public/app/cli-tests/".concat(target.name, "/services/runRequest/sendArr"), dataPathRel, undefined, authConfig, undefined, undefined, './myoutput.json')).toResolve()];
|
|
255
|
+
case 1:
|
|
256
|
+
_a.sent();
|
|
257
|
+
return [4 /*yield*/, (0, utils_1.readFile)(path_1.default.join(process.projectDir, 'myoutput.json'))];
|
|
258
|
+
case 2:
|
|
259
|
+
rawData = _a.sent();
|
|
260
|
+
output = JSON.parse(rawData);
|
|
261
|
+
expect(output.table1).toEqual(utils_4.expectedDataArr.table1);
|
|
262
|
+
expect(output.table2).toEqual(utils_4.expectedDataArr.table2);
|
|
263
|
+
return [2 /*return*/];
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}); });
|
|
267
|
+
it("should execute service 'err' with absolute path with log path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
268
|
+
var jobPath, log, rawLogDataStats;
|
|
269
|
+
return __generator(this, function (_a) {
|
|
270
|
+
switch (_a.label) {
|
|
271
|
+
case 0:
|
|
272
|
+
jobPath = (0, utils_3.prefixAppLoc)(target.appLoc, 'services/runRequest/err');
|
|
273
|
+
log = (0, getLogFilePath_1.getLogFilePath)('./mylog.txt', jobPath || '');
|
|
274
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, jobPath, dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
|
|
275
|
+
case 1:
|
|
276
|
+
_a.sent();
|
|
277
|
+
rawLogDataStats = (0, fs_1.statSync)(log);
|
|
278
|
+
expect(rawLogDataStats.size).toBeGreaterThan(10);
|
|
279
|
+
return [2 /*return*/];
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}); });
|
|
283
|
+
it("should execute service 'err' with absolute path with default log path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
284
|
+
var jobPath, log, rawLogDataStats;
|
|
285
|
+
return __generator(this, function (_a) {
|
|
286
|
+
switch (_a.label) {
|
|
287
|
+
case 0:
|
|
288
|
+
jobPath = (0, utils_3.prefixAppLoc)(target.appLoc, 'services/runRequest/err');
|
|
289
|
+
log = (0, getLogFilePath_1.getLogFilePath)('', jobPath || '');
|
|
290
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, jobPath, dataPathRel, undefined, authConfig, log, jobPath)).toResolve()];
|
|
291
|
+
case 1:
|
|
292
|
+
_a.sent();
|
|
293
|
+
rawLogDataStats = (0, fs_1.statSync)(log);
|
|
294
|
+
expect(rawLogDataStats.size).toBeGreaterThan(10);
|
|
295
|
+
return [2 /*return*/];
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
}); });
|
|
299
|
+
});
|
|
300
|
+
describe("sasjs request with compute API", function () {
|
|
301
|
+
var appName = 'cli-tests-request-' + (0, utils_2.generateTimestamp)();
|
|
302
|
+
var target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName), {
|
|
303
|
+
serviceFolders: ['sasjs/runRequest'],
|
|
304
|
+
initProgram: '',
|
|
305
|
+
termProgram: '',
|
|
306
|
+
macroVars: {}
|
|
307
|
+
});
|
|
308
|
+
var authConfig;
|
|
309
|
+
var dataPathRel = 'data.json';
|
|
310
|
+
var configPathRel = 'sasjsconfig-temp.json';
|
|
311
|
+
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
312
|
+
return __generator(this, function (_a) {
|
|
313
|
+
switch (_a.label) {
|
|
314
|
+
case 0: return [4 /*yield*/, (0, test_1.createTestApp)(__dirname, appName)];
|
|
315
|
+
case 1:
|
|
316
|
+
_a.sent();
|
|
317
|
+
return [4 /*yield*/, (0, config_1.getAuthConfig)(target)];
|
|
318
|
+
case 2:
|
|
319
|
+
authConfig = _a.sent();
|
|
320
|
+
return [4 /*yield*/, (0, utils_1.copy)(path_1.default.join(__dirname, 'runRequest'), path_1.default.join(process.projectDir, 'sasjs', 'runRequest'))];
|
|
321
|
+
case 3:
|
|
322
|
+
_a.sent();
|
|
323
|
+
return [4 /*yield*/, (0, build_1.build)(target)];
|
|
324
|
+
case 4:
|
|
325
|
+
_a.sent();
|
|
326
|
+
return [4 /*yield*/, (0, deploy_1.deploy)(target, false)];
|
|
327
|
+
case 5:
|
|
328
|
+
_a.sent();
|
|
329
|
+
return [2 /*return*/];
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
}); });
|
|
333
|
+
afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
334
|
+
return __generator(this, function (_a) {
|
|
335
|
+
switch (_a.label) {
|
|
336
|
+
case 0: return [4 /*yield*/, (0, test_1.removeTestServerFolder)(target.appLoc, target)];
|
|
337
|
+
case 1:
|
|
338
|
+
_a.sent();
|
|
339
|
+
return [4 /*yield*/, (0, test_1.removeTestApp)(__dirname, target.name)];
|
|
340
|
+
case 2:
|
|
341
|
+
_a.sent();
|
|
342
|
+
return [2 /*return*/];
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
}); });
|
|
346
|
+
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
347
|
+
return __generator(this, function (_a) {
|
|
348
|
+
switch (_a.label) {
|
|
349
|
+
case 0: return [4 /*yield*/, (0, utils_1.createFile)(path_1.default.join(process.projectDir, configPathRel), JSON.stringify(__assign(__assign({}, target.toJson()), { useComputeApi: true, contextName: utils_3.contextName }), null, 2))];
|
|
350
|
+
case 1:
|
|
351
|
+
_a.sent();
|
|
352
|
+
return [4 /*yield*/, (0, utils_1.createFile)(path_1.default.join(process.projectDir, dataPathRel), JSON.stringify(utils_4.sampleDataJson, null, 2))];
|
|
353
|
+
case 2:
|
|
354
|
+
_a.sent();
|
|
355
|
+
return [2 /*return*/];
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
}); });
|
|
359
|
+
it("should execute service 'sendArr' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
360
|
+
var timestamp, outputFilename, _a, _b;
|
|
361
|
+
return __generator(this, function (_c) {
|
|
362
|
+
switch (_c.label) {
|
|
363
|
+
case 0:
|
|
364
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
365
|
+
jest
|
|
366
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
367
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
368
|
+
outputFilename = "sendArr-".concat(timestamp, ".json");
|
|
369
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, "/Public/app/cli-tests/".concat(target.name, "/services/runRequest/sendArr"), dataPathRel, configPathRel, authConfig)).toResolve()];
|
|
370
|
+
case 1:
|
|
371
|
+
_c.sent();
|
|
372
|
+
_a = expect;
|
|
373
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
374
|
+
case 2:
|
|
375
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataArr.table1);
|
|
376
|
+
_b = expect;
|
|
377
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
378
|
+
case 3:
|
|
379
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataArr.table2);
|
|
380
|
+
return [2 /*return*/];
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
}); });
|
|
384
|
+
it("should execute service 'sendObj' with absolute path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
385
|
+
var timestamp, outputFilename, _a, _b;
|
|
386
|
+
return __generator(this, function (_c) {
|
|
387
|
+
switch (_c.label) {
|
|
388
|
+
case 0:
|
|
389
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
390
|
+
jest
|
|
391
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
392
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
393
|
+
outputFilename = "sendObj-".concat(timestamp, ".json");
|
|
394
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, "/Public/app/cli-tests/".concat(target.name, "/services/runRequest/sendObj"), dataPathRel, configPathRel, authConfig)).toResolve()];
|
|
395
|
+
case 1:
|
|
396
|
+
_c.sent();
|
|
397
|
+
_a = expect;
|
|
398
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
399
|
+
case 2:
|
|
400
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataObj.table1);
|
|
401
|
+
_b = expect;
|
|
402
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
403
|
+
case 3:
|
|
404
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataObj.table2);
|
|
405
|
+
return [2 /*return*/];
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
}); });
|
|
409
|
+
it("should execute service 'sendArr' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
410
|
+
var timestamp, outputFilename, _a, _b;
|
|
411
|
+
return __generator(this, function (_c) {
|
|
412
|
+
switch (_c.label) {
|
|
413
|
+
case 0:
|
|
414
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
415
|
+
jest
|
|
416
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
417
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
418
|
+
outputFilename = "sendArr-".concat(timestamp, ".json");
|
|
419
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, 'services/runRequest/sendArr', dataPathRel, undefined, authConfig)).toResolve()];
|
|
420
|
+
case 1:
|
|
421
|
+
_c.sent();
|
|
422
|
+
_a = expect;
|
|
423
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
424
|
+
case 2:
|
|
425
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataArr.table1);
|
|
426
|
+
_b = expect;
|
|
427
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
428
|
+
case 3:
|
|
429
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataArr.table2);
|
|
430
|
+
return [2 /*return*/];
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}); });
|
|
434
|
+
it("should execute service 'sendObj' with relative path", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
435
|
+
var timestamp, outputFilename, _a, _b;
|
|
436
|
+
return __generator(this, function (_c) {
|
|
437
|
+
switch (_c.label) {
|
|
438
|
+
case 0:
|
|
439
|
+
timestamp = (0, utils_2.generateTimestamp)();
|
|
440
|
+
jest
|
|
441
|
+
.spyOn(timeStampUtils, 'generateTimestamp')
|
|
442
|
+
.mockImplementationOnce(function () { return timestamp; });
|
|
443
|
+
outputFilename = "sendObj-".concat(timestamp, ".json");
|
|
444
|
+
return [4 /*yield*/, expect((0, request_1.runSasJob)(target, false, 'services/runRequest/sendObj', dataPathRel, undefined, authConfig)).toResolve()];
|
|
445
|
+
case 1:
|
|
446
|
+
_c.sent();
|
|
447
|
+
_a = expect;
|
|
448
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
449
|
+
case 2:
|
|
450
|
+
_a.apply(void 0, [(_c.sent()).table1]).toEqual(utils_4.expectedDataObj.table1);
|
|
451
|
+
_b = expect;
|
|
452
|
+
return [4 /*yield*/, (0, utils_4.getOutputJson)(outputFilename)];
|
|
453
|
+
case 3:
|
|
454
|
+
_b.apply(void 0, [(_c.sent()).table2]).toEqual(utils_4.expectedDataObj.table2);
|
|
455
|
+
return [2 /*return*/];
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
}); });
|
|
459
|
+
});
|
|
460
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const sampleDataJson: {
|
|
2
|
+
table1: {
|
|
3
|
+
col1: string;
|
|
4
|
+
col2: string;
|
|
5
|
+
}[];
|
|
6
|
+
table2: {
|
|
7
|
+
col1: string;
|
|
8
|
+
}[];
|
|
9
|
+
};
|
|
10
|
+
export declare const expectedDataArr: {
|
|
11
|
+
table1: string[][];
|
|
12
|
+
table2: string[][];
|
|
13
|
+
};
|
|
14
|
+
export declare const expectedDataObj: {
|
|
15
|
+
table1: {
|
|
16
|
+
COL1: string;
|
|
17
|
+
COL2: string;
|
|
18
|
+
}[];
|
|
19
|
+
table2: {
|
|
20
|
+
COL1: string;
|
|
21
|
+
}[];
|
|
22
|
+
};
|
|
23
|
+
export declare const getOutputJson: (fileName: string) => Promise<any>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.getOutputJson = exports.expectedDataObj = exports.expectedDataArr = exports.sampleDataJson = void 0;
|
|
43
|
+
var path_1 = __importDefault(require("path"));
|
|
44
|
+
var utils_1 = require("@sasjs/utils");
|
|
45
|
+
exports.sampleDataJson = {
|
|
46
|
+
table1: [
|
|
47
|
+
{ col1: 'first col value1', col2: 'second col value1' },
|
|
48
|
+
{ col1: 'first col value2', col2: 'second col value2' }
|
|
49
|
+
],
|
|
50
|
+
table2: [{ col1: 'first col value' }]
|
|
51
|
+
};
|
|
52
|
+
exports.expectedDataArr = {
|
|
53
|
+
table1: [
|
|
54
|
+
['first col value1', 'second col value1'],
|
|
55
|
+
['first col value2', 'second col value2']
|
|
56
|
+
],
|
|
57
|
+
table2: [['first col value']]
|
|
58
|
+
};
|
|
59
|
+
exports.expectedDataObj = {
|
|
60
|
+
table1: [
|
|
61
|
+
{
|
|
62
|
+
COL1: 'first col value1',
|
|
63
|
+
COL2: 'second col value1'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
COL1: 'first col value2',
|
|
67
|
+
COL2: 'second col value2'
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
table2: [
|
|
71
|
+
{
|
|
72
|
+
COL1: 'first col value'
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
var getOutputJson = function (fileName) { return __awaiter(void 0, void 0, void 0, function () {
|
|
77
|
+
var _a, _b;
|
|
78
|
+
return __generator(this, function (_c) {
|
|
79
|
+
switch (_c.label) {
|
|
80
|
+
case 0:
|
|
81
|
+
_b = (_a = JSON).parse;
|
|
82
|
+
return [4 /*yield*/, (0, utils_1.readFile)(path_1.default.join(process.sasjsConstants.buildDestinationResultsFolder, 'requests', fileName))];
|
|
83
|
+
case 1: return [2 /*return*/, _b.apply(_a, [_c.sent()])];
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}); };
|
|
87
|
+
exports.getOutputJson = getOutputJson;
|
|
File without changes
|