@sasjs/cli
Version:
Command line interface for SASjs
814 lines (813 loc) • 40.6 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
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;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = require("../config");
var authUtils = __importStar(require("../auth"));
var fileUtils = __importStar(require("@sasjs/utils/file"));
var dotenv_1 = __importDefault(require("dotenv"));
var path_1 = __importDefault(require("path"));
var utils_1 = require("@sasjs/utils");
var test_1 = require("../test");
var setConstants_1 = require("../setConstants");
describe('getAccessToken', function () {
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
process.projectDir = process.cwd();
return [4 /*yield*/, (0, setConstants_1.setConstants)()];
case 1:
_a.sent();
dotenv_1.default.config();
process.env.ACCESS_TOKEN = undefined;
process.env.CLIENT = undefined;
process.env.SECRET = undefined;
return [2 /*return*/];
}
});
}); });
afterEach(function () {
process.env.ACCESS_TOKEN = undefined;
process.env.CLIENT = undefined;
process.env.SECRET = undefined;
process.env.REFRESH_TOKEN = undefined;
jest.resetAllMocks();
});
it('should get access token from authInfo', function () { return __awaiter(void 0, void 0, void 0, function () {
var target, token;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
target = {
authConfig: {
access_token: 'T0K3N'
}
};
return [4 /*yield*/, (0, config_1.getAccessToken)(target, false)];
case 1:
token = _a.sent();
expect(token).toEqual('T0K3N');
return [2 /*return*/];
}
});
}); });
it('should prioritise the access token from matching env file if available', function () { return __awaiter(void 0, void 0, void 0, function () {
var target, token;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
process.env.ACCESS_TOKEN = '3NVT0K3N';
target = {
name: 'ConfigTest'
};
return [4 /*yield*/, (0, utils_1.createFile)(path_1.default.join(__dirname, '.env.ConfigTest'), 'ACCESS_TOKEN=T4RG3TT0K3N')];
case 1:
_a.sent();
process.projectDir = __dirname;
return [4 /*yield*/, (0, setConstants_1.setConstants)()];
case 2:
_a.sent();
return [4 /*yield*/, (0, config_1.getAccessToken)(target, false)];
case 3:
token = _a.sent();
expect(token).toEqual('T4RG3TT0K3N');
return [4 /*yield*/, (0, utils_1.deleteFile)(path_1.default.join(__dirname, '.env.ConfigTest'))];
case 4:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should throw an error when access token is unavailable', function () { return __awaiter(void 0, void 0, void 0, function () {
var target;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
target = {
authConfig: {
access_token: ''
}
};
return [4 /*yield*/, expect((0, config_1.getAccessToken)(target, false)).rejects.toThrow()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should throw an error when auth config is unavailable', function () { return __awaiter(void 0, void 0, void 0, function () {
var target;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
target = null;
return [4 /*yield*/, expect((0, config_1.getAccessToken)(target, false)).rejects.toThrow()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should get access token from environment', function () { return __awaiter(void 0, void 0, void 0, function () {
var target, token;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
target = null;
process.env.ACCESS_TOKEN = '3NVT0K3N';
return [4 /*yield*/, (0, config_1.getAccessToken)(target, false)];
case 1:
token = _a.sent();
expect(token).toEqual('3NVT0K3N');
return [2 /*return*/];
}
});
}); });
it('should refresh access token when it is expiring and refresh token is available & not expired', function () { return __awaiter(void 0, void 0, void 0, function () {
var target, token;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
jest
.spyOn(authUtils, 'isAccessTokenExpiring')
.mockImplementation(function () { return true; });
jest
.spyOn(authUtils, 'isRefreshTokenExpiring')
.mockImplementation(function () { return false; });
jest.spyOn(authUtils, 'getNewAccessToken');
jest.spyOn(authUtils, 'refreshTokens').mockImplementation(function () {
return Promise.resolve({
access_token: 'N3WT0K3N'
});
});
target = {
authConfig: {
access_token: 'T0K3N',
refresh_token: 'R3FR35H',
client: 'CL13NT',
secret: '53CR3T'
}
};
return [4 /*yield*/, (0, config_1.getAccessToken)(target, true)];
case 1:
token = _a.sent();
expect(authUtils.isAccessTokenExpiring).toHaveBeenCalledTimes(1);
expect(authUtils.isRefreshTokenExpiring).toHaveBeenCalledTimes(1);
expect(authUtils.refreshTokens).toHaveBeenCalledTimes(1);
expect(authUtils.getNewAccessToken).not.toHaveBeenCalled();
expect(token).toEqual('N3WT0K3N');
return [2 /*return*/];
}
});
}); });
it('should get new access token when it is expiring and refresh token is available & expired', function () { return __awaiter(void 0, void 0, void 0, function () {
var target, token;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
jest
.spyOn(authUtils, 'isAccessTokenExpiring')
.mockImplementation(function () { return true; });
jest
.spyOn(authUtils, 'isRefreshTokenExpiring')
.mockImplementation(function () { return true; });
jest.spyOn(authUtils, 'refreshTokens');
jest.spyOn(authUtils, 'getNewAccessToken').mockImplementation(function () {
return Promise.resolve({
access_token: 'N3WT0K3N'
});
});
target = {
authConfig: {
access_token: 'T0K3N',
refresh_token: 'R3FR35H',
client: 'CL13NT',
secret: '53CR3T'
}
};
process.env.REFRESH_TOKEN = undefined;
return [4 /*yield*/, (0, config_1.getAccessToken)(target, true)];
case 1:
token = _a.sent();
expect(authUtils.isAccessTokenExpiring).toHaveBeenCalledTimes(1);
expect(authUtils.isRefreshTokenExpiring).toHaveBeenCalledTimes(1);
expect(authUtils.refreshTokens).not.toHaveBeenCalled();
expect(authUtils.getNewAccessToken).toHaveBeenCalledTimes(1);
expect(token).toEqual('N3WT0K3N');
return [2 /*return*/];
}
});
}); });
it('should get new access token when it is expiring and refresh token is not available', function () { return __awaiter(void 0, void 0, void 0, function () {
var target, token;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
jest
.spyOn(authUtils, 'isAccessTokenExpiring')
.mockImplementation(function () { return true; });
jest
.spyOn(authUtils, 'isRefreshTokenExpiring')
.mockImplementation(function () { return true; });
jest.spyOn(authUtils, 'refreshTokens');
jest.spyOn(authUtils, 'getNewAccessToken').mockImplementation(function () {
return Promise.resolve({
access_token: 'N3WT0K3N'
});
});
target = {
authConfig: {
access_token: 'T0K3N',
client: 'CL13NT',
secret: '53CR3T'
}
};
process.env.REFRESH_TOKEN = undefined;
return [4 /*yield*/, (0, config_1.getAccessToken)(target, true)];
case 1:
token = _a.sent();
expect(authUtils.isAccessTokenExpiring).toHaveBeenCalledTimes(1);
expect(authUtils.isRefreshTokenExpiring).toHaveBeenCalledTimes(1);
expect(authUtils.refreshTokens).not.toHaveBeenCalled();
expect(authUtils.getNewAccessToken).toHaveBeenCalledTimes(1);
expect(token).toEqual('N3WT0K3N');
return [2 /*return*/];
}
});
}); });
it('should throw an error if access token is expiring and client ID is not available', function () { return __awaiter(void 0, void 0, void 0, function () {
var target;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
jest
.spyOn(authUtils, 'isAccessTokenExpiring')
.mockImplementation(function () { return true; });
target = {
authConfig: {
access_token: 'T0K3N',
secret: '53CR3T'
}
};
process.env.CLIENT = undefined;
return [4 /*yield*/, expect((0, config_1.getAccessToken)(target)).rejects.toThrow()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should throw an error if access token is expiring and client secret is not available', function () { return __awaiter(void 0, void 0, void 0, function () {
var target;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
jest
.spyOn(authUtils, 'isAccessTokenExpiring')
.mockImplementation(function () { return true; });
target = {
authConfig: {
access_token: 'T0K3N',
client: 'CL13NT'
}
};
process.env.SECRET = undefined;
return [4 /*yield*/, expect((0, config_1.getAccessToken)(target)).rejects.toThrow()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
});
describe('sanitizeAppLoc', function () {
var notValidAppLoc = '///Public/app///';
var validAppLoc = '/Public/app';
it('should remove trailing slash', function () {
expect((0, config_1.sanitizeAppLoc)(notValidAppLoc)).toEqual(validAppLoc);
});
it('should remove multiple leading slashes', function () {
expect((0, config_1.sanitizeAppLoc)(notValidAppLoc)).toEqual(validAppLoc);
});
notValidAppLoc = 'Public/app///';
it('should add leading slash', function () {
expect((0, config_1.sanitizeAppLoc)(notValidAppLoc)).toEqual(validAppLoc);
});
});
describe('overrideEnvVariables', function () {
it('should do nothing when the target name is falsy', function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
jest.spyOn(fileUtils, 'readFile');
jest.spyOn(dotenv_1.default, 'parse');
return [4 /*yield*/, (0, config_1.overrideEnvVariables)('')];
case 1:
_a.sent();
expect(fileUtils.readFile).not.toHaveBeenCalled();
expect(dotenv_1.default.parse).not.toHaveBeenCalled();
return [2 /*return*/];
}
});
}); });
it('should display a warning when the target env file is not found', function () { return __awaiter(void 0, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
process.projectDir = __dirname;
return [4 /*yield*/, (0, setConstants_1.setConstants)()];
case 1:
_b.sent();
jest
.spyOn(fileUtils, 'readFile')
.mockImplementationOnce(function () { return Promise.reject(); });
jest.spyOn(process.logger, 'warn');
jest.spyOn(dotenv_1.default, 'parse');
return [4 /*yield*/, (0, config_1.overrideEnvVariables)('test')];
case 2:
_b.sent();
expect((_a = process.logger) === null || _a === void 0 ? void 0 : _a.warn).toHaveBeenCalledWith('A .env.test file was not found in your project directory. Defaulting to variables from the main .env file.');
expect(dotenv_1.default.parse).not.toHaveBeenCalled();
return [2 /*return*/];
}
});
}); });
it('should override env variables with values from the target-specific file', function () { return __awaiter(void 0, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
process.logger = new utils_1.Logger(utils_1.LogLevel.Off);
process.projectDir = __dirname;
return [4 /*yield*/, (0, setConstants_1.setConstants)()];
case 1:
_b.sent();
jest
.spyOn(fileUtils, 'readFile')
.mockImplementationOnce(function () { return Promise.resolve('ACCESS_TOKEN=T4RG3TT0K3N'); });
jest.spyOn(process.logger, 'warn');
jest.spyOn(dotenv_1.default, 'parse');
return [4 /*yield*/, (0, config_1.overrideEnvVariables)('OverrideTest')];
case 2:
_b.sent();
expect((_a = process.logger) === null || _a === void 0 ? void 0 : _a.warn).not.toHaveBeenCalled();
expect(dotenv_1.default.parse).toHaveBeenCalledWith('ACCESS_TOKEN=T4RG3TT0K3N');
expect(process.env.ACCESS_TOKEN).toEqual('T4RG3TT0K3N');
return [2 /*return*/];
}
});
}); });
});
describe('saveToGlobalConfig', function () {
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
process.projectDir = __dirname;
return [4 /*yield*/, (0, setConstants_1.setConstants)()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should set the target as default when isDefault is true', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName, target, config, configTarget;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
appName = 'cli-tests-config-' + (0, utils_1.generateTimestamp)();
target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName));
return [4 /*yield*/, (0, config_1.saveToGlobalConfig)(target, true)];
case 1:
_b.sent();
return [4 /*yield*/, (0, config_1.getGlobalRcFile)()];
case 2:
config = (_b.sent());
expect(config.defaultTarget).toEqual(target.name);
configTarget = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target.name; });
expect(configTarget).toBeTruthy();
return [4 /*yield*/, (0, config_1.removeFromGlobalConfig)(target.name)];
case 3:
_b.sent();
return [2 /*return*/];
}
});
}); });
it('should not set the target as default when isDefault is false', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName, target, config, configTarget;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
appName = 'cli-tests-config-' + (0, utils_1.generateTimestamp)();
target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName));
return [4 /*yield*/, (0, config_1.saveToGlobalConfig)(target, false)];
case 1:
_b.sent();
return [4 /*yield*/, (0, config_1.getGlobalRcFile)()];
case 2:
config = (_b.sent());
expect(config.defaultTarget).not.toEqual(target.name);
configTarget = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target.name; });
expect(configTarget).toBeTruthy();
return [4 /*yield*/, (0, config_1.removeFromGlobalConfig)(target.name)];
case 3:
_b.sent();
return [2 /*return*/];
}
});
}); });
});
describe('removeFromGlobalConfig', function () {
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
process.projectDir = __dirname;
return [4 /*yield*/, (0, setConstants_1.setConstants)()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should reset the default target when that target is removed', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName, target, config, configTarget;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
appName = 'cli-tests-config-' + (0, utils_1.generateTimestamp)();
target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName));
return [4 /*yield*/, (0, config_1.saveToGlobalConfig)(target, true)];
case 1:
_b.sent();
return [4 /*yield*/, (0, config_1.getGlobalRcFile)()];
case 2:
config = (_b.sent());
expect(config.defaultTarget).toEqual(target.name);
return [4 /*yield*/, (0, config_1.removeFromGlobalConfig)(target.name)];
case 3:
_b.sent();
return [4 /*yield*/, (0, config_1.getGlobalRcFile)()];
case 4:
config = (_b.sent());
configTarget = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target.name; });
expect(configTarget).toBeFalsy();
expect(config.defaultTarget).toEqual('');
return [2 /*return*/];
}
});
}); });
it('should not change the default target when another target is removed', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName1, appName2, target1, target2, config, configTarget1, configTarget2;
var _a, _b, _c;
return __generator(this, function (_d) {
switch (_d.label) {
case 0:
appName1 = 'cli-tests-config-1-' + (0, utils_1.generateTimestamp)();
appName2 = 'cli-tests-config-2-' + (0, utils_1.generateTimestamp)();
target1 = (0, test_1.generateTestTarget)(appName1, "/Public/app/cli-tests/".concat(appName1));
target2 = (0, test_1.generateTestTarget)(appName2, "/Public/app/cli-tests/".concat(appName2));
return [4 /*yield*/, (0, config_1.saveToGlobalConfig)(target1, true)];
case 1:
_d.sent();
return [4 /*yield*/, (0, config_1.saveToGlobalConfig)(target2, false)];
case 2:
_d.sent();
return [4 /*yield*/, (0, config_1.getGlobalRcFile)()];
case 3:
config = (_d.sent());
expect(config.defaultTarget).toEqual(target1.name);
configTarget1 = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target1.name; });
expect(configTarget1).toBeTruthy();
configTarget2 = (_b = config.targets) === null || _b === void 0 ? void 0 : _b.find(function (t) { return t.name === target2.name; });
expect(configTarget2).toBeTruthy();
return [4 /*yield*/, (0, config_1.removeFromGlobalConfig)(target2.name)];
case 4:
_d.sent();
return [4 /*yield*/, (0, config_1.getGlobalRcFile)()];
case 5:
config = (_d.sent());
configTarget2 = (_c = config.targets) === null || _c === void 0 ? void 0 : _c.find(function (t) { return t.name === target2.name; });
expect(configTarget2).toBeFalsy();
expect(config.defaultTarget).toEqual(target1.name);
return [2 /*return*/];
}
});
}); });
});
describe('saveToLocalConfig', function () {
var appName;
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
appName = "cli-tests-config-".concat((0, utils_1.generateTimestamp)());
return [4 /*yield*/, (0, test_1.createTestMinimalApp)(__dirname, appName)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
afterEach(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, test_1.removeTestApp)(__dirname, appName)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should set the target as default when isDefault is true', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName, target, config, configTarget;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
appName = 'cli-tests-cb-' + (0, utils_1.generateTimestamp)();
target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName));
return [4 /*yield*/, (0, config_1.saveToLocalConfig)(target, true)];
case 1:
_b.sent();
return [4 /*yield*/, (0, config_1.getLocalConfig)()];
case 2:
config = (_b.sent());
expect(config.defaultTarget).toEqual(target.name);
configTarget = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target.name; });
expect(configTarget).toBeTruthy();
return [4 /*yield*/, (0, config_1.removeFromLocalConfig)(target.name)];
case 3:
_b.sent();
return [2 /*return*/];
}
});
}); });
it('should not set the target as default when isDefault is false', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName, target, config, configTarget;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
appName = 'cli-tests-cb-' + (0, utils_1.generateTimestamp)();
target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName));
return [4 /*yield*/, (0, config_1.saveToLocalConfig)(target, false)];
case 1:
_b.sent();
return [4 /*yield*/, (0, config_1.getLocalConfig)()];
case 2:
config = (_b.sent());
expect(config.defaultTarget).not.toEqual(target.name);
configTarget = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target.name; });
expect(configTarget).toBeTruthy();
return [4 /*yield*/, (0, config_1.removeFromLocalConfig)(target.name)];
case 3:
_b.sent();
return [2 /*return*/];
}
});
}); });
});
describe('removeFromLocalConfig', function () {
var appName;
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
appName = "cli-tests-config-".concat((0, utils_1.generateTimestamp)());
return [4 /*yield*/, (0, test_1.createTestMinimalApp)(__dirname, appName)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
afterEach(function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, test_1.removeTestApp)(__dirname, appName)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
it('should reset the default target when that target is removed', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName, target, config, configTarget;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
appName = 'cli-tests-config-' + (0, utils_1.generateTimestamp)();
target = (0, test_1.generateTestTarget)(appName, "/Public/app/cli-tests/".concat(appName));
return [4 /*yield*/, (0, config_1.saveToLocalConfig)(target, true)];
case 1:
_b.sent();
return [4 /*yield*/, (0, config_1.getLocalConfig)()];
case 2:
config = (_b.sent());
expect(config.defaultTarget).toEqual(target.name);
return [4 /*yield*/, (0, config_1.removeFromLocalConfig)(target.name)];
case 3:
_b.sent();
return [4 /*yield*/, (0, config_1.getLocalConfig)()];
case 4:
config = (_b.sent());
configTarget = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target.name; });
expect(configTarget).toBeFalsy();
expect(config.defaultTarget).toEqual('');
return [2 /*return*/];
}
});
}); });
it('should not change the default target when another target is removed', function () { return __awaiter(void 0, void 0, void 0, function () {
var appName1, appName2, target1, target2, config, configTarget1, configTarget2;
var _a, _b, _c;
return __generator(this, function (_d) {
switch (_d.label) {
case 0:
appName1 = 'cli-tests-config-1-' + (0, utils_1.generateTimestamp)();
appName2 = 'cli-tests-config-2-' + (0, utils_1.generateTimestamp)();
target1 = (0, test_1.generateTestTarget)(appName1, "/Public/app/cli-tests/".concat(appName1));
target2 = (0, test_1.generateTestTarget)(appName2, "/Public/app/cli-tests/".concat(appName2));
return [4 /*yield*/, (0, config_1.saveToLocalConfig)(target1, true)];
case 1:
_d.sent();
return [4 /*yield*/, (0, config_1.saveToLocalConfig)(target2, false)];
case 2:
_d.sent();
return [4 /*yield*/, (0, config_1.getLocalConfig)()];
case 3:
config = (_d.sent());
expect(config.defaultTarget).toEqual(target1.name);
configTarget1 = (_a = config.targets) === null || _a === void 0 ? void 0 : _a.find(function (t) { return t.name === target1.name; });
expect(configTarget1).toBeTruthy();
configTarget2 = (_b = config.targets) === null || _b === void 0 ? void 0 : _b.find(function (t) { return t.name === target2.name; });
expect(configTarget2).toBeTruthy();
return [4 /*yield*/, (0, config_1.removeFromLocalConfig)(target2.name)];
case 4:
_d.sent();
return [4 /*yield*/, (0, config_1.getLocalConfig)()];
case 5:
config = (_d.sent());
configTarget2 = (_c = config.targets) === null || _c === void 0 ? void 0 : _c.find(function (t) { return t.name === target2.name; });
expect(configTarget2).toBeFalsy();
expect(config.defaultTarget).toEqual(target1.name);
return [2 /*return*/];
}
});
}); });
});
describe('getSASjs', function () {
it('should set sasjsConfig according to target', function () {
var target = {
serverUrl: 'test_serverUrl',
appLoc: 'test_appLoc',
serverType: utils_1.ServerType.SasViya,
contextName: 'test_contextName',
httpsAgentOptions: {
caPath: 'test_caPath',
keyPath: 'test_keyPath',
certPath: 'test_certPath',
allowInsecureRequests: false
}
};
var sasjs = (0, config_1.getSASjs)(target);
var sasjsConfig = sasjs.getSasjsConfig();
var serverUrl = sasjsConfig.serverUrl, appLoc = sasjsConfig.appLoc, serverType = sasjsConfig.serverType, contextName = sasjsConfig.contextName, httpsAgentOptions = sasjsConfig.httpsAgentOptions;
expect(serverUrl).toEqual(target.serverUrl);
expect(appLoc).toEqual(target.appLoc);
expect(serverType).toEqual(target.serverType);
expect(contextName).toEqual(target.contextName);
expect(httpsAgentOptions).toEqual(target.httpsAgentOptions);
});
it('should set debug to true by default', function () {
var sasjs = (0, config_1.getSASjs)({});
var sasjsConfig = sasjs.getSasjsConfig();
var debug = sasjsConfig.debug;
expect(debug).toEqual(true);
});
it('should set useComputeApi to true if server type is Viya', function () {
var sasjs = (0, config_1.getSASjs)({ serverType: utils_1.ServerType.SasViya });
var sasjsConfig = sasjs.getSasjsConfig();
var useComputeApi = sasjsConfig.useComputeApi;
expect(useComputeApi).toEqual(true);
});
it('should set useComputeApi to false if server type is not Viya', function () {
var sasjs = (0, config_1.getSASjs)({ serverType: utils_1.ServerType.Sas9 });
var sasjsConfig = sasjs.getSasjsConfig();
var useComputeApi = sasjsConfig.useComputeApi;
expect(useComputeApi).toEqual(false);
sasjs = (0, config_1.getSASjs)({ serverType: utils_1.ServerType.Sasjs });
sasjsConfig = sasjs.getSasjsConfig();
useComputeApi = sasjsConfig.useComputeApi;
expect(useComputeApi).toEqual(false);
});
it("should enable verbose mode if VERBOSE env is present and is equal to 'on'(case insensitive)", function () {
process.env.VERBOSE = 'on';
var sasjs = (0, config_1.getSASjs)({});
var sasjsConfig = sasjs.getSasjsConfig();
var verbose = sasjsConfig.verbose;
expect(verbose).toEqual(true);
process.env.VERBOSE = 'ON';
sasjs = (0, config_1.getSASjs)({});
sasjsConfig = sasjs.getSasjsConfig();
verbose = sasjsConfig.verbose;
expect(verbose).toEqual(true);
});
it("should enable verbose mode if LOG_LEVEL env is present and is equal to 'trace'(case insensitive)", function () {
process.env.LOG_LEVEL = 'trace';
var sasjs = (0, config_1.getSASjs)({});
var sasjsConfig = sasjs.getSasjsConfig();
var verbose = sasjsConfig.verbose;
expect(verbose).toEqual(true);
process.env.LOG_LEVEL = 'TRACE';
sasjs = (0, config_1.getSASjs)({});
sasjsConfig = sasjs.getSasjsConfig();
verbose = sasjsConfig.verbose;
expect(verbose).toEqual(true);
});
it('should disable verbose mode if VERBOSE and LOG_LEVEL env are not present', function () {
process.env.VERBOSE = '';
process.env.LOG_LEVEL = '';
var sasjs = (0, config_1.getSASjs)({});
var sasjsConfig = sasjs.getSasjsConfig();
var verbose = sasjsConfig.verbose;
expect(verbose).toEqual(false);
});
it("should disable verbose mode if VERBOSE env is present and is not equal to 'on'(case insensitive) and LOG_LEVEL env is present and is not equal to 'trace'(case insensitive)", function () {
process.env.VERBOSE = 'start';
process.env.LOG_LEVEL = 'Info';
var sasjs = (0, config_1.getSASjs)({});
var sasjsConfig = sasjs.getSasjsConfig();
var verbose = sasjsConfig.verbose;
expect(verbose).toEqual(false);
});
});