mirror of https://github.com/Seich/Beau.git
Got rid of the base class, it complicated testing.
Now it lives on as a utils file. Should make it easier to test the CLI.
This commit is contained in:
parent
d502f1dd01
commit
aa0b937582
|
|
@ -0,0 +1,11 @@
|
||||||
|
const { test, expect } = require('@oclif/test');
|
||||||
|
const Nock = require('@fancy-test/nock');
|
||||||
|
|
||||||
|
const Test = test.register('nock', Nock);
|
||||||
|
|
||||||
|
describe('List Command', () => {
|
||||||
|
let a = Test.stdout().command(['list', '-c', 'hello.yml']);
|
||||||
|
a.it('tst', ctx => {
|
||||||
|
console.log(ctx);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const dotenv = require('dotenv');
|
|
||||||
const { Command, flags } = require('@oclif/command');
|
|
||||||
const { Spinner } = require('clui');
|
|
||||||
|
|
||||||
const Beau = require('../../src/beau');
|
|
||||||
|
|
||||||
class Base extends Command {
|
|
||||||
async init() {
|
|
||||||
const spinnerSprite = ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷'];
|
|
||||||
this.spinner = new Spinner('', spinnerSprite);
|
|
||||||
}
|
|
||||||
|
|
||||||
openConfigFile(configFile) {
|
|
||||||
if (!fs.existsSync(configFile)) {
|
|
||||||
this.error(`The config file, ${configFile} was not found.`);
|
|
||||||
this.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return yaml.safeLoad(fs.readFileSync(configFile, 'utf-8'));
|
|
||||||
}
|
|
||||||
|
|
||||||
loadConfig(configFile, params = []) {
|
|
||||||
const config = this.openConfigFile(configFile);
|
|
||||||
const env = dotenv.config().parsed || {};
|
|
||||||
params = dotenv.parse(params.reduce((a, p) => a + '\n' + p, ''));
|
|
||||||
|
|
||||||
const envParams = { _: Object.assign(env, params) };
|
|
||||||
|
|
||||||
const configFileDir = path.dirname(
|
|
||||||
path.resolve(process.cwd(), configFile)
|
|
||||||
);
|
|
||||||
|
|
||||||
process.chdir(configFileDir);
|
|
||||||
|
|
||||||
return new Beau(config, envParams);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Base.flags = {
|
|
||||||
config: flags.string({
|
|
||||||
char: 'c',
|
|
||||||
description: 'The configuration file to be used.',
|
|
||||||
default: 'beau.yml'
|
|
||||||
}),
|
|
||||||
verbose: flags.boolean({
|
|
||||||
char: 'V',
|
|
||||||
description: `Show all additional information available for a command.`
|
|
||||||
}),
|
|
||||||
'no-format': flags.boolean({
|
|
||||||
description: `Disables color formatting for usage on external tools.`
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = Base;
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
const clc = require('cli-color');
|
const clc = require('cli-color');
|
||||||
const { Line } = require('clui');
|
const { Line } = require('clui');
|
||||||
const { flags } = require('@oclif/command');
|
const { flags, Command } = require('@oclif/command');
|
||||||
|
const { baseFlags, loadConfig } = require('../utils');
|
||||||
|
|
||||||
const Base = require('../base');
|
class ListCommand extends Command {
|
||||||
|
|
||||||
class ListCommand extends Base {
|
|
||||||
async run() {
|
async run() {
|
||||||
const { flags } = this.parse(ListCommand);
|
const { flags } = this.parse(ListCommand);
|
||||||
const Beau = this.loadConfig(flags.config);
|
const Beau = loadConfig(flags.config);
|
||||||
|
|
||||||
if (flags['no-format']) {
|
if (flags['no-format']) {
|
||||||
return Beau.requests.list.forEach(
|
return Beau.requests.list.forEach(
|
||||||
|
|
@ -47,6 +46,6 @@ class ListCommand extends Base {
|
||||||
}
|
}
|
||||||
|
|
||||||
ListCommand.description = `Lists all available requests in the config file.`;
|
ListCommand.description = `Lists all available requests in the config file.`;
|
||||||
ListCommand.flags = { ...Base.flags };
|
ListCommand.flags = { ...baseFlags };
|
||||||
|
|
||||||
module.exports = ListCommand;
|
module.exports = ListCommand;
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
const clc = require('cli-color');
|
const clc = require('cli-color');
|
||||||
const jsome = require('jsome');
|
const jsome = require('jsome');
|
||||||
const { Line } = require('clui');
|
const { Line, Spinner } = require('clui');
|
||||||
const { flags } = require('@oclif/command');
|
const { flags, Command } = require('@oclif/command');
|
||||||
|
const { baseFlags, loadConfig } = require('../utils');
|
||||||
|
|
||||||
const Base = require('../base');
|
class RequestCommand extends Command {
|
||||||
|
|
||||||
class RequestCommand extends Base {
|
|
||||||
prettyOutput(res, verbose = false) {
|
prettyOutput(res, verbose = false) {
|
||||||
let { status, body } = res.response;
|
let { status, body } = res.response;
|
||||||
|
|
||||||
|
|
@ -45,7 +44,10 @@ class RequestCommand extends Base {
|
||||||
args
|
args
|
||||||
} = this.parse(RequestCommand);
|
} = this.parse(RequestCommand);
|
||||||
|
|
||||||
const Beau = this.loadConfig(config, params);
|
const Beau = loadConfig(config, params);
|
||||||
|
|
||||||
|
const spinnerSprite = ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷'];
|
||||||
|
this.spinner = new Spinner('', spinnerSprite);
|
||||||
|
|
||||||
let spinnerEnabled = !noFormat && !asJson && !quiet;
|
let spinnerEnabled = !noFormat && !asJson && !quiet;
|
||||||
|
|
||||||
|
|
@ -89,7 +91,7 @@ class RequestCommand extends Base {
|
||||||
|
|
||||||
RequestCommand.description = `Executes a request by name.`;
|
RequestCommand.description = `Executes a request by name.`;
|
||||||
RequestCommand.flags = {
|
RequestCommand.flags = {
|
||||||
...Base.flags,
|
...baseFlags,
|
||||||
param: flags.string({
|
param: flags.string({
|
||||||
char: 'P',
|
char: 'P',
|
||||||
multiple: true,
|
multiple: true,
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,13 @@
|
||||||
const clc = require('cli-color');
|
const { flags, Command } = require('@oclif/command');
|
||||||
const fs = require('fs');
|
const { baseFlags, openConfigFile } = require('../utils');
|
||||||
const yaml = require('js-yaml');
|
|
||||||
const { flags } = require('@oclif/command');
|
|
||||||
|
|
||||||
const Base = require('../base');
|
|
||||||
const { validate } = require('../../../src/schema.js');
|
const { validate } = require('../../../src/schema.js');
|
||||||
|
|
||||||
class ValidateCommand extends Base {
|
class ValidateCommand extends Command {
|
||||||
async run() {
|
async run() {
|
||||||
const { flags, args } = this.parse(ValidateCommand);
|
const { flags, args } = this.parse(ValidateCommand);
|
||||||
const configFile = args.alias || flags.config;
|
const configFile = args.alias || flags.config;
|
||||||
|
|
||||||
const config = this.openConfigFile(configFile);
|
const config = openConfigFile(configFile);
|
||||||
|
|
||||||
let result = await validate(config);
|
let result = await validate(config);
|
||||||
if (result.valid) {
|
if (result.valid) {
|
||||||
|
|
@ -23,7 +19,7 @@ class ValidateCommand extends Base {
|
||||||
}
|
}
|
||||||
|
|
||||||
ValidateCommand.description = `Validates the given configuration file against Beau's configuration schema.`;
|
ValidateCommand.description = `Validates the given configuration file against Beau's configuration schema.`;
|
||||||
ValidateCommand.flags = { ...Base.flags };
|
ValidateCommand.flags = { ...baseFlags };
|
||||||
ValidateCommand.args = [
|
ValidateCommand.args = [
|
||||||
{
|
{
|
||||||
name: 'alias',
|
name: 'alias',
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
const yaml = require('js-yaml');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const dotenv = require('dotenv');
|
||||||
|
const Beau = require('../../src/beau');
|
||||||
|
const { flags } = require('@oclif/command');
|
||||||
|
|
||||||
|
const openConfigFile = configFile => {
|
||||||
|
if (!fs.existsSync(configFile)) {
|
||||||
|
throw new Error(`The config file, ${configFile} was not found.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return yaml.safeLoad(fs.readFileSync(configFile, 'utf-8'));
|
||||||
|
};
|
||||||
|
|
||||||
|
const loadConfig = (configFile, params = []) => {
|
||||||
|
const config = openConfigFile(configFile);
|
||||||
|
const env = dotenv.config().parsed || {};
|
||||||
|
params = dotenv.parse(params.reduce((a, p) => a + '\n' + p, ''));
|
||||||
|
|
||||||
|
const envParams = { _: Object.assign(env, params) };
|
||||||
|
|
||||||
|
const configFileDir = path.dirname(path.resolve(process.cwd(), configFile));
|
||||||
|
|
||||||
|
process.chdir(configFileDir);
|
||||||
|
|
||||||
|
return new Beau(config, envParams);
|
||||||
|
};
|
||||||
|
|
||||||
|
const baseFlags = {
|
||||||
|
config: flags.string({
|
||||||
|
char: 'c',
|
||||||
|
description: 'The configuration file to be used.',
|
||||||
|
default: 'beau.yml'
|
||||||
|
}),
|
||||||
|
verbose: flags.boolean({
|
||||||
|
char: 'V',
|
||||||
|
description: `Show all additional information available for a command.`
|
||||||
|
}),
|
||||||
|
'no-format': flags.boolean({
|
||||||
|
description: `Disables color formatting for usage on external tools.`
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
openConfigFile,
|
||||||
|
loadConfig,
|
||||||
|
baseFlags
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue