flagpole
Version:
Simple and fast DOM integration, headless or headful browser, and REST API testing framework.
295 lines • 9.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const cli_helper_1 = require("./cli-helper");
const cli_1 = require("./cli");
const { prompt } = require('enquirer');
const fs = require('fs');
const typesOfTest = {
'HTML Page': 'html',
'REST API (JSON Format)': 'json',
'Browser (Puppeteer)': 'browser'
};
const canAdd = [
'suite', 'scenario', 'env'
];
function addSuite() {
cli_helper_1.printSubheader('Add New Suite');
if (!cli_1.Cli.config.isValid()) {
cli_1.Cli.log('Config file is invalid.');
cli_1.Cli.exit(1);
}
let questions = [
{
type: 'input',
name: 'suiteName',
message: 'Name of Suite',
initial: cli_1.Cli.commandArg2 || 'smoke',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^[a-z0-9_-]{1,63}$/i.test(input);
}
},
{
type: 'input',
name: 'suiteDescription',
message: 'Description of Suite',
initial: 'Basic Smoke Test of Site',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^[a-z0-9].{1,63}$/i.test(input);
}
},
{
type: 'input',
name: 'scenarioDescription',
message: 'First Scenario',
initial: 'Homepage Loads',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^[a-z0-9].{1,63}$/i.test(input);
}
},
{
type: 'select',
name: 'type',
message: 'What type of test is this scenario?',
initial: 0,
choices: Object.keys(typesOfTest)
}
];
let envs = cli_1.Cli.config.getEnvironments();
if (envs.length <= 1) {
questions.push({
type: 'input',
name: 'baseDomain',
message: 'Base Domain',
initial: envs[0].defaultDomain || 'https://www.google.com',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^.{1,63}$/i.test(input);
}
});
}
else {
envs.forEach(function (env) {
questions.push({
type: 'input',
name: 'baseDomain_' + env.name,
message: 'Base Domain for ' + env.name,
initial: env.defaultDomain || 'https://www.google.com',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^.{1,63}$/i.test(input);
}
});
});
}
questions.push({
type: 'input',
name: 'scenarioPath',
message: 'Scenario Start Path',
initial: '/',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^\/.{0,63}$/i.test(input);
}
});
prompt(questions).then(function (answers) {
let suitePath = cli_1.Cli.config.getTestsFolder() + answers.suiteName + '.js';
let baseDomain = answers.baseDomain;
if (!baseDomain) {
baseDomain = {};
cli_1.Cli.config.getEnvironments().forEach(function (env) {
baseDomain[env.name] = answers['baseDomain_' + env.name];
});
}
cli_1.Cli.log('');
cli_1.Cli.addSuite({
suiteName: answers.suiteName,
baseDomain: baseDomain,
suiteDescription: answers.suiteDescription,
scenarioDescription: answers.scenarioDescription,
scenarioType: typesOfTest[answers.type],
scenarioPath: answers.scenarioPath
})
.then(() => {
cli_1.Cli.log('Created new test suite.');
cli_1.Cli.list([
'Suite file created: ' + suitePath,
'Scenario added: ' + answers.scenarioDescription,
'Config file updated'
]);
cli_1.Cli.log('');
cli_1.Cli.exit(0);
})
.catch((err) => {
cli_1.Cli.log('Error creating scenario!');
cli_1.Cli.log('Tried to write to: ' + suitePath);
cli_1.Cli.log('Got Error: ' + err);
cli_1.Cli.log('');
cli_1.Cli.exit(1);
});
});
}
function addScenario() {
cli_helper_1.printSubheader('Add New Scenaio');
let suites = cli_1.Cli.config.getSuiteNames();
if (suites.length == 0) {
cli_1.Cli.log('');
cli_1.Cli.log('You have not created any test suites yet. You should do that first.');
cli_1.Cli.log('');
cli_1.Cli.log('To add a test suite:');
cli_1.Cli.log('flagpole add suite');
cli_1.Cli.log('');
cli_1.Cli.exit(1);
}
prompt([
{
type: 'select',
name: 'suite',
message: 'What suite do you want to add it to?',
initial: suites.indexOf(cli_1.Cli.commandArg2 || '') || 0,
choices: suites,
validate: function (input) {
return (input.length > 0);
}
},
{
type: 'select',
name: 'type',
message: 'What type of test is this scenario?',
initial: 0,
choices: Object.keys(typesOfTest)
},
{
type: 'input',
name: 'scenarioDescription',
message: 'Description of Scenario',
initial: 'Some Other Page Loads',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^[a-z0-9].{1,63}$/i.test(input);
}
},
{
type: 'input',
name: 'scenarioPath',
message: 'Scenario Start Path',
initial: '/some-other-page',
result: function (input) {
return input.trim();
},
validate: function (input) {
return /^\/.{0,63}$/i.test(input);
}
}
]).then(function (answers) {
const suite = cli_1.Cli.config.suites[answers.suite];
if (!suite) {
cli_1.Cli.log(`Invalid suite: ${answers.suite}`);
cli_1.Cli.log('');
cli_1.Cli.exit(1);
}
cli_1.Cli.addScenario(suite, {
description: answers.scenarioDescription,
path: answers.scenarioPath,
type: typesOfTest[answers.type]
}).then(() => {
cli_1.Cli.log('Appended new scenario to suite:');
cli_1.Cli.log(suite.getPath());
cli_1.Cli.log('');
cli_1.Cli.log('Scenario added to that suite:');
cli_1.Cli.log(answers.scenarioDescription);
cli_1.Cli.log('');
cli_1.Cli.exit(0);
}).catch((err) => {
cli_1.Cli.log('Error creating scenario!');
cli_1.Cli.log('Got Error: ' + err);
cli_1.Cli.log('');
cli_1.Cli.exit(1);
});
}).catch(function (err) {
cli_1.Cli.log('Error: ' + err);
cli_1.Cli.exit(1);
});
}
function addEnv() {
cli_helper_1.printSubheader('Add New Environment');
prompt([
{
type: 'input',
name: 'name',
message: 'What do you want to call the environment?',
initial: cli_1.Cli.commandArg2 || '',
validate: function (input) {
return /^[a-z0-9]{1,12}$/i.test(input);
}
},
{
type: 'input',
name: 'defaultDomain',
message: 'Default Domain (optional)',
result: function (input) {
return input.trim();
}
}
]).then(function (answers) {
cli_1.Cli.config.addEnvironment(answers.name, {
defaultDomain: answers.defaultDomain
});
fs.writeFile(cli_1.Cli.config.getConfigPath(), cli_1.Cli.config.toString(), function (err) {
if (err) {
cli_1.Cli.log('Error creating environment!');
cli_1.Cli.log('Failed updating config: ' + cli_1.Cli.config.getConfigPath());
cli_1.Cli.log('Got Error: ' + err);
cli_1.Cli.log('');
cli_1.Cli.exit(1);
}
cli_1.Cli.log('Added new environment.');
cli_1.Cli.list([
'Config file updated'
]);
cli_1.Cli.log('');
cli_1.Cli.exit(0);
});
}).catch(function (err) {
cli_1.Cli.log('Error: ' + err);
cli_1.Cli.exit(1);
});
}
function add() {
cli_1.Cli.hideBanner = true;
cli_helper_1.printHeader();
if (!canAdd.includes(cli_1.Cli.commandArg || '')) {
cli_1.Cli.log('');
cli_1.Cli.log('You can add: ' + canAdd.join(', '));
cli_1.Cli.log('Example syntax: flagpole add suite');
cli_1.Cli.log('');
cli_1.Cli.exit(1);
}
else if (cli_1.Cli.commandArg == 'scenario') {
addScenario();
}
else if (cli_1.Cli.commandArg == 'env') {
addEnv();
}
else {
addSuite();
}
}
exports.add = add;
//# sourceMappingURL=add.js.map