@auttam/easycli
Version:
A quick and easy way of creating cli for your npm package.
152 lines (151 loc) • 6.52 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
const expect = require('chai').expect;
const decorators_1 = require("../lib/decorators");
const config_error_1 = require("../lib/errors/config-error");
const settings_1 = require("../lib/settings");
describe("Cli decorator", () => {
it("starts program automatically by default", () => {
var testValue = 0;
let SimpleProgram = class SimpleProgram {
static run() { testValue = 1; }
};
SimpleProgram = __decorate([
decorators_1.Cli()
], SimpleProgram);
expect(testValue).to.equal(1);
});
it("doesn't start program automatically if autorun is false", () => {
var testValue = 0;
let SimpleProgram = class SimpleProgram {
start() { testValue = 1; }
};
SimpleProgram = __decorate([
decorators_1.Cli({ autorun: false })
], SimpleProgram);
expect(testValue).to.equal(0);
new SimpleProgram().start();
expect(testValue).to.equal(1);
});
it("replaces auto generated program config", () => {
let SimpleProgram1 = class SimpleProgram1 {
};
SimpleProgram1 = __decorate([
decorators_1.Cli({ autorun: false })
], SimpleProgram1);
var prog = new SimpleProgram1();
expect(prog.config.toConfig()).to.eql({ name: 'Simple Program1', binaryName: 'simple-program1', version: '1.0.0', help: '' });
let SimpleProgram2 = class SimpleProgram2 {
};
SimpleProgram2 = __decorate([
decorators_1.Cli({ name: 'abc', autorun: false, version: '2', binaryName: 'b1', help: 'h1' })
], SimpleProgram2);
var prog = new SimpleProgram2();
expect(prog.config.toConfig()).to.eql({ name: 'abc', version: '2', binaryName: 'b1', help: 'h1' });
});
it("adds params to program param collection", () => {
let SimpleProgram1 = class SimpleProgram1 {
};
SimpleProgram1 = __decorate([
decorators_1.Cli({ autorun: false, params: [{ name: 'my-param1' }] })
], SimpleProgram1);
var prog = new SimpleProgram1();
expect(prog.config.params.toArray('my-param1')[0]).to.include({ name: 'my-param1', propName: 'myParam1' });
});
it("adds option to program options collection", () => {
let SimpleProgram1 = class SimpleProgram1 {
};
SimpleProgram1 = __decorate([
decorators_1.Cli({ autorun: false, options: [{ name: 'my-option1' }] })
], SimpleProgram1);
var prog = new SimpleProgram1();
expect(prog.config.options.toArray('my-option1')[0]).to.include({ name: 'my-option1', propName: 'my-option1' });
});
});
describe("Command decorator", () => {
beforeEach(() => {
settings_1.updateStore({
enableCommands: true
});
});
afterEach(() => {
settings_1.updateStore({
enableCommands: false
});
});
it("adds method as command", () => {
class SimpleProgram1 {
test() { }
}
__decorate([
decorators_1.Command(),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], SimpleProgram1.prototype, "test", null);
var prog = new SimpleProgram1();
expect(prog.config.commands.length).to.equal(1);
});
it("replaces config for auto generated params", () => {
class SimpleProgram1 {
test(message, testParam) { }
}
__decorate([
decorators_1.Command({
params: [{
name: 'message',
value: '2'
}]
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", void 0)
], SimpleProgram1.prototype, "test", null);
var prog = new SimpleProgram1();
var command = prog.config.commands.get('test');
expect(command.params.get('message').value).to.equal('2');
});
it("throws exception for property name change for parameter auto-generated ", () => {
expect(() => {
class SimpleProgram1 {
testCommand(message, testParam) { }
}
__decorate([
decorators_1.Command({
params: [{
name: 'test-param',
propName: 'abc'
}]
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", void 0)
], SimpleProgram1.prototype, "testCommand", null);
}).to.throw(config_error_1.ConfigurationError);
expect(() => {
class SimpleProgram1 {
testCommand(message, testParam) { }
}
__decorate([
decorators_1.Command({
params: [{
name: 'testParam',
propName: 'abc'
}]
}),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", void 0)
], SimpleProgram1.prototype, "testCommand", null);
}).to.throw(config_error_1.ConfigurationError);
});
});