@villedemontreal/scripting
Version:
Scripting core utilities
484 lines (472 loc) • 28.5 kB
JavaScript
;
/* eslint-disable @typescript-eslint/no-misused-promises */
Object.defineProperty(exports, "__esModule", { value: true });
const caporal_1 = require("@villedemontreal/caporal");
const general_utils_1 = require("@villedemontreal/general-utils");
const chai_1 = require("chai");
const fs = require("fs-extra");
const path = require("path");
const sinon = require("sinon");
const testingScript_1 = require("../scripts/testing/testingScript");
const configs_1 = require("./config/configs");
const testingUtils_1 = require("./utils/testingUtils");
const nock = require("nock");
describe(`Scripts tests`, function () {
(0, testingUtils_1.timeout)(this, 30000);
before(() => {
(0, testingUtils_1.setTestingConfigs)();
});
describe(`Compilation`, () => {
it(`Default`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const distDir = path.resolve(`${__dirname}/..`);
await general_utils_1.utils.deleteDir(distDir);
chai_1.assert.isFalse(fs.existsSync(distDir));
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isFalse(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: info`) > -1);
// ==========================================
// The "dist" folder has been generated
// ==========================================
chai_1.assert.isTrue(fs.existsSync(distDir));
});
it(`No compilation`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isTrue(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: info`) > -1);
});
it(`Compilation silent option`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--silent`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isFalse(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isFalse(output.indexOf(`msg: info`) > -1);
});
});
describe(`Logs`, () => {
it(`Default is info`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`msg: debug`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: info`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: warn`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: error`) > -1);
});
it(`Silent arg`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--silent`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`msg: debug`) > -1);
chai_1.assert.isFalse(output.indexOf(`msg: info`) > -1);
chai_1.assert.isFalse(output.indexOf(`msg: warn`) > -1);
chai_1.assert.isFalse(output.indexOf(`msg: error`) > -1);
});
it(`Quiet arg`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--quiet`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`msg: debug`) > -1);
chai_1.assert.isFalse(output.indexOf(`msg: info`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: warn`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: error`) > -1);
});
it(`Verbose arg`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--verbose`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`msg: debug`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: info`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: warn`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: error`) > -1);
});
it(`Verbose short arg`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `-v`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`msg: debug`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: info`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: warn`) > -1);
chai_1.assert.isTrue(output.indexOf(`msg: error`) > -1);
});
});
describe(`Main Help`, () => {
it(`No args at all - compilation is done and main help is displayed`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const { output, isSuccess } = await (0, testingUtils_1.run)();
chai_1.assert.isFalse(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isFalse(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isShortHelpDisplayed)(output));
});
it(`Just "help" and "--nc" - no compilation is done and main help is displayed`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const { output, isSuccess } = await (0, testingUtils_1.run)(`help`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isTrue(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Just "--help" - compilation is done and main help is displayed`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const { output, isSuccess } = await (0, testingUtils_1.run)(`--help`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isFalse(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Just "-h" - compilation is done and main help is displayed`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const { output, isSuccess } = await (0, testingUtils_1.run)(`-h`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isFalse(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Just "--nc" - No compilation is done and main help is displayed`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isTrue(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`"--help" and "--nc" - No compilation is done and main help is displayed`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`--help`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isTrue(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`"-h" and "--nc" - No compilation is done and main help is displayed`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`-h`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isFalse(output.indexOf(`Compilation done.`) > -1);
chai_1.assert.isTrue(output.indexOf(`Compilation skipped because of the "--nc" parameter...`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Unknown command - Main help is displayed`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const { output, isSuccess } = await (0, testingUtils_1.run)(`NOPE`, `--nc`);
chai_1.assert.isFalse(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Unknown command NOPE`) > -1);
chai_1.assert.isTrue((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Unknown command with --silent arg - Main help not displayed`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const { output, isSuccess } = await (0, testingUtils_1.run)(`NOPE`, `--nc`, `--silent`);
chai_1.assert.isFalse(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Unknown command NOPE`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Unknown command with --quiet arg - Main help not displayed`, async function () {
(0, testingUtils_1.timeout)(this, 60000);
const { output, isSuccess } = await (0, testingUtils_1.run)(`NOPE`, `--nc`, `--quiet`);
chai_1.assert.isFalse(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Unknown command NOPE`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
});
});
describe(`Command Help`, () => {
it(`Using "--help"`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--help`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`A simple testing script`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Using "-h"`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `-h`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`A simple testing script`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Help command`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`help`, `testing:testingScript`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`A simple testing script`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`Command Help for hidden scripts works too`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingHiddenScript`, `--nc`, `--userName`, `Stromgol`, `--help`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`A testing hidden script`) > -1);
});
});
describe(`Varia`, () => {
it(`Custom short option`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `-p`, `123`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`port: 123`) > -1);
});
it(`Custom long option`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--port`, `123`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`port: 123`) > -1);
});
it(`Option not specified but required ("--userName" here) - The help of the command is displayed`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingHiddenScript`, `--nc`);
chai_1.assert.isFalse(isSuccess);
chai_1.assert.isFalse(output.indexOf(`userName is`) > -1);
chai_1.assert.isTrue(output.indexOf(`Missing required flag --username`) > -1);
chai_1.assert.isTrue(output.indexOf(`USAGE — testing:testingHiddenScript`) > -1); // command help
});
it(`Regular Error (the help of the command is not printed!)`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--throwError`);
chai_1.assert.isFalse(isSuccess);
chai_1.assert.isTrue(output.indexOf(`This is a regular error`) > -1);
chai_1.assert.isFalse(output.indexOf(`userName is`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
chai_1.assert.isFalse(output.indexOf(`USAGE — testing:testingHiddenScript`) > -1); // NO command help!
});
it(`Invalid argument`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`, `--port`, `notANumber`);
chai_1.assert.isFalse(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Invalid value for option`) > -1);
chai_1.assert.isFalse(output.indexOf(`userName is`) > -1);
chai_1.assert.isTrue(output.indexOf(`USAGE — testing:testingScript`) > -1); // command help
});
it(`Hidden script can still be called`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingHiddenScript`, `--nc`, `--username`, `Stromgol`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`username is Stromgol`) > -1);
});
it(`We can register a script without passing action parameters`, async () => {
const prog = new caporal_1.Program();
chai_1.assert.isFalse(caporal_1.program.getCommands().some((command) => command.name === 'testing:testingScript'));
const script = new testingScript_1.TestingScript(null); // no params!
await script.registerScript(prog);
let found = false;
for (let i = prog.getCommands().length - 1; i >= 0; --i) {
if (prog.getCommands()[i].name === 'testing:testingScript') {
found = true;
prog.getCommands().splice(i, 1);
break;
}
}
chai_1.assert.isTrue(found);
});
it(`Calling a script using NPM`, async () => {
let output = ``;
await general_utils_1.utils.exec(configs_1.configs.isWindows ? 'npm.cmd' : 'npm', [`run`, `lint`, `--`, `--nc`, `--help`], {
outputHandler: (stdoutData, stderrData) => {
const newOut = `${stdoutData ? ` ${stdoutData}` : ''} ${stderrData ? ` ${stderrData}` : ''} `;
output += newOut;
},
});
chai_1.assert.isTrue(output.indexOf(`Run the ESLint validation`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
});
/**
* Note that it is way easier to call a script
* programatically *from another script*, since you
* can simply use `this.invokeScript()`.
*
* Also, if some logic is required in a script
* *and* elsewhere in the application, it may be a good
* idea to move this code in a service or in an utility!
*/
it(`Calling a script programmatically`, async () => {
let output = '';
const logger = new Proxy({}, {
get: (target, prop) => {
return function () {
if (prop === 'info') {
// eslint-disable-next-line prefer-rest-params
output += `${arguments[0]}\n`;
}
};
},
});
await new testingScript_1.TestingScript({
args: {},
options: {
port: 789,
},
program: sinon.stub(),
command: sinon.stub(),
ddash: sinon.stub(),
logger: logger,
}).run();
chai_1.assert.isTrue(output.indexOf(`port: 789`) > -1);
});
it(`OutputName - Regular script`, async () => {
// Core script
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingScript`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Script "testing:testingScript"`) > -1);
});
/**
* Since the `run()` command starts a new process, we
* can't add a global option to the proper Caporal
* instance directly here. We need to tweak the `run`
* file and add it there.
*/
it(`Custom global options`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.withCustomRunFile)(`const caporal = require('@villedemontreal/caporal').program;`, `const caporal = require('@villedemontreal/caporal').program;
caporal.option('--custom', 'Custom global option', {
global: true
});
`, `testing:testingScriptGlobalCustomOptions1`, `--nc`, `--custom`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`custom #1: true`) > -1);
chai_1.assert.isTrue(output.indexOf(`custom #2: true`) > -1);
});
it(`"scriptsIndexModule" can be undefined`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.withCustomRunFile)('scriptsIndexModule: `./scripts/index`,', ``, `lint`, `--help`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`Run the ESLint validation`) > -1);
chai_1.assert.isFalse((0, testingUtils_1.isMainHelpDisplayed)(output));
});
it(`A required dependency is missing`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingDepMissingScript`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`This script requires some dependencies that are not direct`) > -1);
chai_1.assert.isTrue(output.indexOf(`- _missingDependency`) > -1);
// Script still called
chai_1.assert.isTrue(output.indexOf(`In TestingDepMissingScript`) > -1);
});
});
describe('Cascading scripts', () => {
it(`Call subscript with defaults`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingCallingScript`, `--nc`, `--foo`, `55`);
chai_1.assert.isTrue(isSuccess);
const expectedOutput = `info: Script "testing:testingCallingScript" starting...
info: Script "testing:testingScriptWithArgs" starting...
info: Start service MyService on port 55 with delay undefined, --verbose: undefined
info: Script "testing:testingScriptWithArgs" successful
info: Script "testing:testingExampleScript" starting...
info: The lucky number is 55
info: Script "testing:testingExampleScript" successful
info: Script "testing:testingCallingScript" successful`;
chai_1.assert.isTrue((0, testingUtils_1.containsText)(output, expectedOutput));
});
it(`Call subscript without defaults, with the "--verbose" global option`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingCallingScript`, `--nc`, `--verbose`, `--foo`, `56`, `--bar`, `someName`, `--delay`, `100`);
chai_1.assert.isTrue(isSuccess);
const expectedOutput = `info: Script "testing:testingCallingScript" starting...
info: Script "testing:testingScriptWithArgs" starting...
info: Start service someName on port 56 with delay 100, --verbose: true
info: Script "testing:testingScriptWithArgs" successful
info: Script "testing:testingExampleScript" starting...
info: The lucky number is 56
info: Script "testing:testingExampleScript" successful
info: Script "testing:testingCallingScript" successful`;
chai_1.assert.isTrue((0, testingUtils_1.containsText)(output, expectedOutput));
});
it(`Call subscript without defaults, without the "--verbose" global option`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingCallingScript`, `--nc`,
// `--verbose`, // no verbose
`--foo`, `56`, `--bar`, `someName`, `--delay`, `100`);
chai_1.assert.isTrue(isSuccess);
const expectedOutput = `info: Script "testing:testingCallingScript" starting...
info: Script "testing:testingScriptWithArgs" starting...
info: Start service someName on port 56 with delay 100, --verbose: undefined
info: Script "testing:testingScriptWithArgs" successful
info: Script "testing:testingExampleScript" starting...
info: The lucky number is 56
info: Script "testing:testingExampleScript" successful
info: Script "testing:testingCallingScript" successful`;
chai_1.assert.isTrue((0, testingUtils_1.containsText)(output, expectedOutput));
});
it(`Call subscript without defaults, with the "--verbose" global option but then forced to false`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingCallingScript`, `--nc`, `--verbose`, // verbose
`--forceVerboseToFalse`, // force verbose to false when calling another script
`--foo`, `56`, `--bar`, `someName`, `--delay`, `100`);
chai_1.assert.isTrue(isSuccess);
const expectedOutput = `info: Script "testing:testingCallingScript" starting...
info: Script "testing:testingScriptWithArgs" starting...
info: Start service someName on port 56 with delay 100, --verbose: false
info: Script "testing:testingScriptWithArgs" successful
info: Script "testing:testingExampleScript" starting...
info: The lucky number is 56
info: Script "testing:testingExampleScript" successful
info: Script "testing:testingCallingScript" successful`;
chai_1.assert.isTrue((0, testingUtils_1.containsText)(output, expectedOutput));
});
it(`Call failing subscript`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`testing:testingCallingScript`, `--nc`, `--foo`, `56`, `--bar`, `someName`, `--delay`, `100`, `--throwError`);
chai_1.assert.isFalse(isSuccess);
const expectedOutput = `info: Script "testing:testingCallingScript" starting...
info: Script "testing:testingCallingScript" starting...
info: Script "testing:testingScriptWithArgs" starting...
info: Start service someName on port 56 with delay 100
error: Script "testing:testingScriptWithArgs" failed after
warn: Script "testing:testingCallingScript" was aborted after`;
chai_1.assert.isTrue((0, testingUtils_1.containsText)(output, expectedOutput));
chai_1.assert.isTrue(output.indexOf(`with: Some error...`) > -1);
});
});
describe(`NODE_APP_INSTANCE env var`, () => {
let nodeAppInstanceOriginal;
before(() => {
nodeAppInstanceOriginal = process.env[general_utils_1.globalConstants.envVariables.NODE_APP_INSTANCE];
});
after(() => {
if (nodeAppInstanceOriginal) {
process.env[general_utils_1.globalConstants.envVariables.NODE_APP_INSTANCE] = nodeAppInstanceOriginal;
}
else {
delete process.env[general_utils_1.globalConstants.envVariables.NODE_APP_INSTANCE];
}
});
it(`test script -> set to "tests" automatically`, async () => {
delete process.env[general_utils_1.globalConstants.envVariables.NODE_APP_INSTANCE];
const { output, isSuccess } = await (0, testingUtils_1.withLogNodeInstance)(`testing:testingScript`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`MAIN NODE_APP_INSTANCE: tests`) > -1);
});
it(`non test script -> not set to "tests"`, async () => {
delete process.env[general_utils_1.globalConstants.envVariables.NODE_APP_INSTANCE];
const { output, isSuccess } = await (0, testingUtils_1.withLogNodeInstance)(`lint`, `--nc`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`MAIN NODE_APP_INSTANCE: undefined`) > -1);
});
it(`non test script with "--testing"`, async () => {
delete process.env[general_utils_1.globalConstants.envVariables.NODE_APP_INSTANCE];
const { output, isSuccess } = await (0, testingUtils_1.withLogNodeInstance)(`lint`, `--nc`, `--testing`);
chai_1.assert.isTrue(isSuccess);
chai_1.assert.isTrue(output.indexOf(`MAIN NODE_APP_INSTANCE: tests`) > -1);
});
});
describe('Sonar-init script', () => {
it(` should fail when sonar-project.properties is missing`, async () => {
const { output, isSuccess } = await (0, testingUtils_1.run)(`sonar-init`);
chai_1.assert.isFalse(isSuccess);
const expectedOutput = `info: Script "sonar-init" starting...
error: Script "sonar-init" failed after 0 s with: "sonar-project.properties" file does not exist!
`;
chai_1.assert.isTrue((0, testingUtils_1.containsText)(output, expectedOutput));
});
// Skipping this unit test suite: all these tests are integration tests on scripts; scripts are
// executed in another spawned process; therefore, using Nock to stub http calls does not work.
// One solution to make these tests succeed would be to run a sonar server in a side-car container,
// and then use it to test 'sonar' and 'sonar-init' scripts.
describe.skip(' with valid sonar-project.properties file', async () => {
before(async () => {
await fs.copyFile('./src/utils/test-sonar-project_url-with-trailing-slash.properties', './sonar-project.properties');
});
after(async () => {
await fs.unlink('./sonar-project.properties');
});
afterEach(() => {
nock.cleanAll();
});
it(` should do something`, async () => {
nock('https://example.com')
.get('/sonar/api/project_branches/list')
.query({ project: 'my-project-key' })
.reply(200);
nock('https://example.com').get('/sonar/api/another_endpoint').reply(200);
const { output, isSuccess } = await (0, testingUtils_1.run)(`sonar-init`, '-v');
console.info('***** Pending mocks *****');
console.info(nock.pendingMocks());
console.info('*************************');
chai_1.assert.isTrue(nock.isDone(), `There are remaining expected HTTP calls: ${nock.pendingMocks().toString()}`);
chai_1.assert.isTrue(isSuccess);
const expectedOutput = `info: Script "sonar-init" starting...
error: Script "sonar-init" failed after 0 s with: ENOENT: no such file or directory, open 'sonar-project.properties'
`;
chai_1.assert.isTrue((0, testingUtils_1.containsText)(output, expectedOutput));
});
});
});
});
//# sourceMappingURL=scripts.test.js.map