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 { 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 Base {
|
||||
class ListCommand extends Command {
|
||||
async run() {
|
||||
const { flags } = this.parse(ListCommand);
|
||||
const Beau = this.loadConfig(flags.config);
|
||||
const Beau = loadConfig(flags.config);
|
||||
|
||||
if (flags['no-format']) {
|
||||
return Beau.requests.list.forEach(
|
||||
|
|
@ -47,6 +46,6 @@ class ListCommand extends Base {
|
|||
}
|
||||
|
||||
ListCommand.description = `Lists all available requests in the config file.`;
|
||||
ListCommand.flags = { ...Base.flags };
|
||||
ListCommand.flags = { ...baseFlags };
|
||||
|
||||
module.exports = ListCommand;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
const clc = require('cli-color');
|
||||
const jsome = require('jsome');
|
||||
const { Line } = require('clui');
|
||||
const { flags } = require('@oclif/command');
|
||||
const { Line, Spinner } = require('clui');
|
||||
const { flags, Command } = require('@oclif/command');
|
||||
const { baseFlags, loadConfig } = require('../utils');
|
||||
|
||||
const Base = require('../base');
|
||||
|
||||
class RequestCommand extends Base {
|
||||
class RequestCommand extends Command {
|
||||
prettyOutput(res, verbose = false) {
|
||||
let { status, body } = res.response;
|
||||
|
||||
|
|
@ -45,7 +44,10 @@ class RequestCommand extends Base {
|
|||
args
|
||||
} = 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;
|
||||
|
||||
|
|
@ -89,7 +91,7 @@ class RequestCommand extends Base {
|
|||
|
||||
RequestCommand.description = `Executes a request by name.`;
|
||||
RequestCommand.flags = {
|
||||
...Base.flags,
|
||||
...baseFlags,
|
||||
param: flags.string({
|
||||
char: 'P',
|
||||
multiple: true,
|
||||
|
|
|
|||
|
|
@ -1,17 +1,13 @@
|
|||
const clc = require('cli-color');
|
||||
const fs = require('fs');
|
||||
const yaml = require('js-yaml');
|
||||
const { flags } = require('@oclif/command');
|
||||
|
||||
const Base = require('../base');
|
||||
const { flags, Command } = require('@oclif/command');
|
||||
const { baseFlags, openConfigFile } = require('../utils');
|
||||
const { validate } = require('../../../src/schema.js');
|
||||
|
||||
class ValidateCommand extends Base {
|
||||
class ValidateCommand extends Command {
|
||||
async run() {
|
||||
const { flags, args } = this.parse(ValidateCommand);
|
||||
const configFile = args.alias || flags.config;
|
||||
|
||||
const config = this.openConfigFile(configFile);
|
||||
const config = openConfigFile(configFile);
|
||||
|
||||
let result = await validate(config);
|
||||
if (result.valid) {
|
||||
|
|
@ -23,7 +19,7 @@ class ValidateCommand extends Base {
|
|||
}
|
||||
|
||||
ValidateCommand.description = `Validates the given configuration file against Beau's configuration schema.`;
|
||||
ValidateCommand.flags = { ...Base.flags };
|
||||
ValidateCommand.flags = { ...baseFlags };
|
||||
ValidateCommand.args = [
|
||||
{
|
||||
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