UNPKG

@auttam/easycli

Version:

A quick and easy way of creating cli for your npm package.

152 lines (151 loc) 6.52 kB
"use strict"; 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); }); });