diff --git a/lib/common/runner.js b/lib/common/runner.js index fd392ac..49426ef 100644 --- a/lib/common/runner.js +++ b/lib/common/runner.js @@ -9,11 +9,15 @@ const mRunnable = Symbol('runable'); */ class Runner { - constructor(argument) { - if (typeof argument === 'function'){ - this[mRunnable] = new Runable(argument) - } else if (argument instanceof Runable) { - this[mRunnable] = argument + constructor(...params) { + if (!params[0]) { + throw new Error('Runner Must be Inintialized with Runnable or a function') + } + + if (typeof params[0] === 'function'){ + this[mRunnable] = new Runable(...params) + } else if (params[0] instanceof Runable) { + this[mRunnable] = params[0] } } diff --git a/package.json b/package.json index 11e0b16..cc7244e 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "clean": "rm -rf dist docs", "prebuild": "yarn clean", - "test": "mocha --require babel-core/register", + "test": "mocha --require @babel/register", "build": "yarn build-babel && yarn build-docs", "build-babel": "babel lib --out-dir dist", "build-docs": "jsdoc --readme DOCS.md -c .jsdocrc -d ./docs/ -r", diff --git a/test/creators.test.js b/test/creators.test.js index 88a8aea..1f7fa18 100644 --- a/test/creators.test.js +++ b/test/creators.test.js @@ -6,8 +6,8 @@ import { expect, assert } from 'chai'; import Joker from '../lib/common/joker'; import Runner from '../lib/common/runner'; +import ApiFactoryGenerator from '../lib/creators/api.factory.creator'; import JokerFactoryGenerator from '../lib/creators/joker.factory.creator'; -import RunnerFactoryGenerator from '../lib/creators/runner.factory.creator'; const Randomizer = new Chance(); @@ -47,15 +47,15 @@ describe('Creators', () => { it('Init', () => { - expect(() => new RunnerFactoryGenerator()).to.not.throw(); - expect(() => new RunnerFactoryGenerator(Randomizer)).to.not.throw(); + expect(() => new ApiFactoryGenerator()).to.not.throw(); + expect(() => new ApiFactoryGenerator(Randomizer)).to.not.throw(); }); it('Create will fill Runners', () => { let factory = {}; - let jfg = new RunnerFactoryGenerator(Randomizer); + let jfg = new ApiFactoryGenerator(Randomizer); jfg.create(factory); diff --git a/test/function.runner.test.js b/test/function.runner.test.js deleted file mode 100644 index c70d894..0000000 --- a/test/function.runner.test.js +++ /dev/null @@ -1,88 +0,0 @@ - -import sinon from 'sinon'; -import chai, { expect, assert } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; -chai.use(chaiAsPromised); -chai.should(); - -import Runable from '../lib/common/runable'; -import FunctionRunner from '../lib/runner/function.runner'; - -describe('FunctionRunner', () => { - - it('Initialisation', () => { - let runnable = { }; - expect(() => new FunctionRunner()).to.not.throw(); - expect(() => new FunctionRunner(runnable)).to.not.throw(); - }); - - it('No Runner Should Throw', () => { - let fnr = new FunctionRunner(); - expect(() => fnr.exec(0)).to.throw(); - }); - - it('Sync Exec', () => { - - let runable = { call: sinon.spy() }; - - let fnr = new FunctionRunner(runable); - - return fnr.exec(200).should.be.fulfilled - .then(() => expect(runable.call.callCount).to.equal(200)); - }); - - it('Async Exec', () => { - let runable = { call: sinon.stub().returns(Promise.resolve()) }; - - let fnr = new FunctionRunner(runable); - - return fnr.exec(200, 10).should.be.fulfilled - .then(() => expect(runable.call.callCount).to.equal(200)); - }); - - it('Assertion Error', () => { - - let rejectVaue = { - err: new Error('Some Value'), - params: [1, 2, 3], - extend: { index: 0 } - }; - - let runable = { - call: sinon.stub().returns( - Promise.reject(rejectVaue) - ) - }; - - let fnr = new FunctionRunner(runable); - - return fnr.exec(1).should.be.rejected - .then(err => { - expect(err.message).to.have.string(`Path: FunctionRunner(${rejectVaue.extend.index})`); - expect(err.message).to.have.string(`Params: [${rejectVaue.params.join(', ')}]`); - }); - - }); - - it('Internal Error', () => { - let runable = { - call: sinon.stub().returns( - Promise.reject(new Error('Things')) - ) - }; - - let fnr = new FunctionRunner(runable); - - return fnr.exec(1).should.be.rejectedWith(Error, 'Internal lib-monkey Error'); - }); - - it('Immutability', () => { - - let fnr = new FunctionRunner(); - - let newFnr = fnr.register([], () => {}, this); - - expect(fnr).to.not.equal(newFnr); - }); - -}); \ No newline at end of file diff --git a/test/monkey.test.js b/test/monkey.test.js index 9ff1c5b..53588e0 100644 --- a/test/monkey.test.js +++ b/test/monkey.test.js @@ -20,8 +20,8 @@ describe('Monkey', () => { const monkey = __requireUncached('../lib/monkey'); expect(monkey).to.have.property('randomiser'); + expect(monkey).to.have.property('ApiCreator'); expect(monkey).to.have.property('JokerCreator'); - expect(monkey).to.have.property('RunnerCreator'); }); it('Random Seed for Randmosizer', () => { diff --git a/test/piped.runner.test.js b/test/piped.runner.test.js deleted file mode 100644 index 777b904..0000000 --- a/test/piped.runner.test.js +++ /dev/null @@ -1,91 +0,0 @@ - -import sinon from 'sinon'; -import chai, { expect, assert } from 'chai'; -import chaiAsPromised from 'chai-as-promised'; -chai.use(chaiAsPromised); -chai.should(); - -import Runable from '../lib/common/runable'; -import PipedRunner from '../lib/runner/piped.runner'; - -describe('PipedRunner', () => { - - it('Initialisation', () => { - let runnable = { }; - expect(() => new PipedRunner()).to.not.throw(); - expect(() => new PipedRunner(runnable)).to.not.throw(); - }); - - it('No Runner Should Throw', () => { - let pnr = new PipedRunner(); - expect(() => pnr.exec(0)).to.throw(); - }); - - it('Piped Execution', () => { - let runable = { call: sinon.stub().returns(Promise.resolve({ value: null })) }; - - let pnr = new PipedRunner(runable, runable); - - return pnr.exec(200).should.eventually.be.fulfilled - .then(() => expect(runable.call.callCount).to.equal(400)); - }); - - it('Parallel Piped Execution', () => { - let runable = { call: sinon.stub().returns(Promise.resolve({ value: null })) }; - - let pnr = new PipedRunner(runable, runable); - - return pnr.exec(200, 10).should.eventually.be.fulfilled - .then(() => expect(runable.call.callCount).to.equal(400)); - }); - - it('Piped Params', () => { - let initialValue = '12'; - - let runable = { call: sinon.stub().returns(Promise.resolve({ value: initialValue })) }; - let runable2 = { call: sinon.stub().returns(Promise.resolve({ value: null })) }; - - let pnr = new PipedRunner(runable, runable2); - - return pnr.exec(1).should.eventually.be.fulfilled - .then(() => assert(runable2.call.calledWith(initialValue), 'Value not passed to second runnable')); - }); - - it('Falsable Piped Params', () => { - let values = [false, 0, null]; - - return Promise.all(values.map(val => { - let runable = { call: sinon.stub().returns(Promise.resolve({ value: val })) }; - let runable2 = { call: sinon.stub().returns(Promise.resolve({ value: null })) }; - - let pnr = new PipedRunner(runable, runable2); - - return pnr.exec(1).should.eventually.be.fulfilled - .then(() => assert(runable2.call.calledWith(val), `Value not passed to second runnable for ${val}`)); - })); - }); - - it('Piped Error', () => { - let rejectVaue = { - err: new Error('Some Value'), - params: [1, 2, 3], - extend: { index: 0 } - }; - - let runable = { - call: sinon.stub().returns( - Promise.reject(rejectVaue) - ) - }; - - let pnr = new PipedRunner(runable); - - return pnr.exec(1).should.eventually.be.rejected - .then(err => { - expect(err.message).to.have.string(`Path: PipedRunner(${rejectVaue.extend.depth}:${rejectVaue.extend.index})`); - expect(err.message).to.have.string(`Params: [${rejectVaue.params.join(', ')}]`); - }); - - }); - -}); \ No newline at end of file diff --git a/test/runnable.test.js b/test/runnable.test.js index 996c7c5..8d954f4 100644 --- a/test/runnable.test.js +++ b/test/runnable.test.js @@ -18,32 +18,28 @@ describe('Runnable', () => { it('Calling', () => { let fn = sinon.spy(); - let params = [1, 2, 3]; - let runable = new Runable(fn, params); + let runable = new Runable(fn); runable.call().should.eventually.be.fulfilled .then(() => assert(fn.calledOnce)); }); it('Sync', () => { - let params = [11]; let returnValue = "Working"; - let fn = (value) => { - expect(value).to.equal(params[0]); + let fn = () => { return returnValue; }; - let runable = new Runable(fn, params); + let runable = new Runable(fn); return runable.call().should.eventually.have.property('value', returnValue); }); it('Sync fail', () => { - let params = [11]; let fn = (value) => { expect(value).to.equal("something else"); }; - let runable = new Runable(fn, params); + let runable = new Runable(fn); return runable.call().should.eventually.be.rejected; }); @@ -105,55 +101,4 @@ describe('Runnable', () => { .should.eventually.have.property('value', someValue); }); - it('Extract Joker Params', () => { - let fakeChance = { bool: () => false }; - let joker_value = 'Some Value'; - let joker = new Joker(fakeChance); - sinon.stub(joker, 'getValue').returns(joker_value); - - let params = [joker]; - let fn = sinon.spy(); - - let runable = new Runable(fn, params); - return runable.call() - .should.eventually.be.fulfilled - .then(() => assert(fn.calledWith(joker_value), 'Joker value wasn\'t called')); - }); - - it('Extract Joker Params With Args', () => { - let jokerValue = 'Some Value'; - let someValue = 'Some Value 2'; - let fakeChance = { bool: () => false }; - let joker = new Joker(fakeChance); - sinon.stub(joker, 'getValue').returns(jokerValue); - - let params = [joker]; - let fn = sinon.spy(); - - let runable = new Runable(fn, params); - return runable.call(someValue) - .should.eventually.be.fulfilled - .then(() => assert(fn.calledWith(someValue, jokerValue), 'Joker value wasn\'t called with the right params')); - }); - - it('Internal Error', () => { - let fakeChance = { bool: () => false }; - let joker_value = 'Some Value'; - let joker = new Joker(fakeChance); - sinon.stub(joker, 'getValue').throws(new Error('Hey')); - - let params = [joker]; - - let runable = new Runable(() => {}, params); - - let extend = { hey: 'ho' }; - - return runable.call(null, extend) - .should.eventually.be.rejected - .then(res => { - expect(res).to.nested.include({'err.message': 'Hey'}); - expect(res.extend).to.deep.equal(extend); - }); - }); - }); \ No newline at end of file diff --git a/test/runner.test.js b/test/runner.test.js new file mode 100644 index 0000000..1f0762f --- /dev/null +++ b/test/runner.test.js @@ -0,0 +1,57 @@ + +import sinon from 'sinon'; +import chai, { expect, assert } from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +chai.use(chaiAsPromised); +chai.should(); + +import Runable from '../lib/common/runable'; +import Runner from '../lib/common/runner'; + +describe('Runner', () => { + + it('Initialisation', () => { + let runnable = { }; + expect(() => new Runner()).to.throw(); + expect(() => new Runner(runnable)).to.not.throw(); + }); + + it('Sync do', () => { + + let runable = sinon.spy(); + + let fnr = new Runner(runable); + + return fnr.do(200).should.be.fulfilled + .then(() => expect(runable.callCount).to.equal(200)); + }); + + it('Async do', () => { + let runable = sinon.stub().returns(Promise.resolve()); + + let fnr = new Runner(runable); + + return fnr.do(200, 10).should.be.fulfilled + .then(() => expect(runable.callCount).to.equal(200)); + }); + + it('Assertion Error', () => { + + let rejectVaue = { + err: new Error('Some Value'), + extend: { index: 0 } + }; + + let runable = sinon.stub().returns( + Promise.reject(rejectVaue) + ); + + let fnr = new Runner(runable); + + return fnr.do(1).should.be.rejected + .then(err => { + expect(err.message).to.have.string(`Path: Runner(${rejectVaue.extend.index})`); + }); + }); + +}); \ No newline at end of file