Skip to content

Basic test for CLI definitions #3050

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Nov 14, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
186 changes: 113 additions & 73 deletions spec/CLI.spec.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
'use strict';
var commander = require("../src/cli/utils/commander").default;
import commander from '../src/cli/utils/commander';
import definitions from '../src/cli/definitions/parse-server';
import liveQueryDefinitions from '../src/cli/definitions/parse-live-query-server';

var definitions = {
"arg0": "PROGRAM_ARG_0",
"arg1": {
env: "PROGRAM_ARG_1",
var testDefinitions = {
'arg0': 'PROGRAM_ARG_0',
'arg1': {
env: 'PROGRAM_ARG_1',
required: true
},
"arg2": {
env: "PROGRAM_ARG_2",
'arg2': {
env: 'PROGRAM_ARG_2',
action: function(value) {
var value = parseInt(value);
if (!Number.isInteger(value)) {
throw "arg2 is invalid";
var intValue = parseInt(value);
if (!Number.isInteger(intValue)) {
throw 'arg2 is invalid';
}
return value;
return intValue;
}
},
"arg3": {},
"arg4": {
default: "arg4Value"
'arg3': {},
'arg4': {
default: 'arg4Value'
}
}
};

describe("commander additions", () => {
describe('commander additions', () => {
afterEach((done) => {
commander.options = [];
delete commander.arg0;
Expand All @@ -32,107 +34,145 @@ describe("commander additions", () => {
delete commander.arg3;
delete commander.arg4;
done();
})
});

it("should load properly definitions from args", (done) => {
commander.loadDefinitions(definitions);
commander.parse(["node","./CLI.spec.js","--arg0", "arg0Value", "--arg1", "arg1Value", "--arg2", "2", "--arg3", "some"]);
expect(commander.arg0).toEqual("arg0Value");
expect(commander.arg1).toEqual("arg1Value");
it('should load properly definitions from args', (done) => {
commander.loadDefinitions(testDefinitions);
commander.parse(['node','./CLI.spec.js','--arg0', 'arg0Value', '--arg1', 'arg1Value', '--arg2', '2', '--arg3', 'some']);
expect(commander.arg0).toEqual('arg0Value');
expect(commander.arg1).toEqual('arg1Value');
expect(commander.arg2).toEqual(2);
expect(commander.arg3).toEqual("some");
expect(commander.arg4).toEqual("arg4Value");
expect(commander.arg3).toEqual('some');
expect(commander.arg4).toEqual('arg4Value');
done();
});

it("should load properly definitions from env", (done) => {
commander.loadDefinitions(definitions);
it('should load properly definitions from env', (done) => {
commander.loadDefinitions(testDefinitions);
commander.parse([], {
"PROGRAM_ARG_0": "arg0ENVValue",
"PROGRAM_ARG_1": "arg1ENVValue",
"PROGRAM_ARG_2": "3",
'PROGRAM_ARG_0': 'arg0ENVValue',
'PROGRAM_ARG_1': 'arg1ENVValue',
'PROGRAM_ARG_2': '3',
});
expect(commander.arg0).toEqual("arg0ENVValue");
expect(commander.arg1).toEqual("arg1ENVValue");
expect(commander.arg0).toEqual('arg0ENVValue');
expect(commander.arg1).toEqual('arg1ENVValue');
expect(commander.arg2).toEqual(3);
expect(commander.arg4).toEqual("arg4Value");
expect(commander.arg4).toEqual('arg4Value');
done();
});

it("should load properly use args over env", (done) => {
commander.loadDefinitions(definitions);
commander.parse(["node","./CLI.spec.js","--arg0", "arg0Value", "--arg4", "anotherArg4"], {
"PROGRAM_ARG_0": "arg0ENVValue",
"PROGRAM_ARG_1": "arg1ENVValue",
"PROGRAM_ARG_2": "4",
it('should load properly use args over env', (done) => {
commander.loadDefinitions(testDefinitions);
commander.parse(['node','./CLI.spec.js','--arg0', 'arg0Value', '--arg4', 'anotherArg4'], {
'PROGRAM_ARG_0': 'arg0ENVValue',
'PROGRAM_ARG_1': 'arg1ENVValue',
'PROGRAM_ARG_2': '4',
});
expect(commander.arg0).toEqual("arg0Value");
expect(commander.arg1).toEqual("arg1ENVValue");
expect(commander.arg0).toEqual('arg0Value');
expect(commander.arg1).toEqual('arg1ENVValue');
expect(commander.arg2).toEqual(4);
expect(commander.arg4).toEqual("anotherArg4");
expect(commander.arg4).toEqual('anotherArg4');
done();
});

it("should fail in action as port is invalid", (done) => {
commander.loadDefinitions(definitions);
it('should fail in action as port is invalid', (done) => {
commander.loadDefinitions(testDefinitions);
expect(()=> {
commander.parse(["node","./CLI.spec.js","--arg0", "arg0Value"], {
"PROGRAM_ARG_0": "arg0ENVValue",
"PROGRAM_ARG_1": "arg1ENVValue",
"PROGRAM_ARG_2": "hello",
commander.parse(['node','./CLI.spec.js','--arg0', 'arg0Value'], {
'PROGRAM_ARG_0': 'arg0ENVValue',
'PROGRAM_ARG_1': 'arg1ENVValue',
'PROGRAM_ARG_2': 'hello',
});
}).toThrow("arg2 is invalid");
}).toThrow('arg2 is invalid');
done();
});

it("should not override config.json", (done) => {
commander.loadDefinitions(definitions);
commander.parse(["node","./CLI.spec.js","--arg0", "arg0Value", "./spec/configs/CLIConfig.json"], {
"PROGRAM_ARG_0": "arg0ENVValue",
"PROGRAM_ARG_1": "arg1ENVValue",
it('should not override config.json', (done) => {
commander.loadDefinitions(testDefinitions);
commander.parse(['node','./CLI.spec.js','--arg0', 'arg0Value', './spec/configs/CLIConfig.json'], {
'PROGRAM_ARG_0': 'arg0ENVValue',
'PROGRAM_ARG_1': 'arg1ENVValue',
});
let options = commander.getOptions();
expect(options.arg2).toBe(8888);
expect(options.arg3).toBe("hello"); //config value
expect(options.arg3).toBe('hello'); //config value
expect(options.arg4).toBe('/1');
done();
});

it("should fail with invalid values in JSON", (done) => {
commander.loadDefinitions(definitions);
it('should fail with invalid values in JSON', (done) => {
commander.loadDefinitions(testDefinitions);
expect(() => {
commander.parse(["node","./CLI.spec.js","--arg0", "arg0Value", "./spec/configs/CLIConfigFail.json"], {
"PROGRAM_ARG_0": "arg0ENVValue",
"PROGRAM_ARG_1": "arg1ENVValue",
commander.parse(['node','./CLI.spec.js','--arg0', 'arg0Value', './spec/configs/CLIConfigFail.json'], {
'PROGRAM_ARG_0': 'arg0ENVValue',
'PROGRAM_ARG_1': 'arg1ENVValue',
});
}).toThrow("arg2 is invalid")
}).toThrow('arg2 is invalid');
done();
});

it("should fail when too many apps are set", (done) => {
commander.loadDefinitions(definitions);
it('should fail when too many apps are set', (done) => {
commander.loadDefinitions(testDefinitions);
expect(() => {
commander.parse(["node","./CLI.spec.js","./spec/configs/CLIConfigFailTooManyApps.json"]);
}).toThrow("Multiple apps are not supported")
commander.parse(['node','./CLI.spec.js','./spec/configs/CLIConfigFailTooManyApps.json']);
}).toThrow('Multiple apps are not supported');
done();
});

it("should load config from apps", (done) => {
commander.loadDefinitions(definitions);
commander.parse(["node", "./CLI.spec.js", "./spec/configs/CLIConfigApps.json"]);
it('should load config from apps', (done) => {
commander.loadDefinitions(testDefinitions);
commander.parse(['node', './CLI.spec.js', './spec/configs/CLIConfigApps.json']);
let options = commander.getOptions();
expect(options.arg1).toBe("my_app");
expect(options.arg1).toBe('my_app');
expect(options.arg2).toBe(8888);
expect(options.arg3).toBe("hello"); //config value
expect(options.arg3).toBe('hello'); //config value
expect(options.arg4).toBe('/1');
done();
});

it("should fail when passing an invalid arguement", (done) => {
commander.loadDefinitions(definitions);
it('should fail when passing an invalid arguement', (done) => {
commander.loadDefinitions(testDefinitions);
expect(() => {
commander.parse(["node", "./CLI.spec.js", "./spec/configs/CLIConfigUnknownArg.json"]);
}).toThrow('error: unknown option myArg')
commander.parse(['node', './CLI.spec.js', './spec/configs/CLIConfigUnknownArg.json']);
}).toThrow('error: unknown option myArg');
done();
});
});

describe('definitions', () => {
it('should have valid types', () => {
for (let key in definitions) {
let definition = definitions[key];
expect(typeof definition).toBe('object');
if (typeof definition.env !== 'undefined') {
expect(typeof definition.env).toBe('string');
}
expect(typeof definition.help).toBe('string');
if (typeof definition.required !== 'undefined') {
expect(typeof definition.required).toBe('boolean');
}
if (typeof definition.action !== 'undefined') {
expect(typeof definition.action).toBe('function');
}
}
});
});

describe('LiveQuery definitions', () => {
it('should have valid types', () => {
for (let key in liveQueryDefinitions) {
let definition = liveQueryDefinitions[key];
expect(typeof definition).toBe('object');
if (typeof definition.env !== 'undefined') {
expect(typeof definition.env).toBe('string');
}
expect(typeof definition.help).toBe('string');
if (typeof definition.required !== 'undefined') {
expect(typeof definition.required).toBe('boolean');
}
if (typeof definition.action !== 'undefined') {
expect(typeof definition.action).toBe('function');
}
}
});
});