From ce3b147173db6234bc8b05f2bebbf0ae8b2781d5 Mon Sep 17 00:00:00 2001 From: kbparagua Date: Fri, 18 Mar 2016 00:53:28 +0800 Subject: [PATCH] Spec for Paloma.BeforeCallbackPeformer --- .../before_callback_performer_spec.js | 71 +++++++++++++++++++ .../paloma/before_callback_performer.js | 6 +- 2 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 test_app/spec/javascripts/before_callback_performer_spec.js diff --git a/test_app/spec/javascripts/before_callback_performer_spec.js b/test_app/spec/javascripts/before_callback_performer_spec.js new file mode 100644 index 0000000..7054aea --- /dev/null +++ b/test_app/spec/javascripts/before_callback_performer_spec.js @@ -0,0 +1,71 @@ +describe('Paloma.BeforeCallbackPerformer', function(){ + describe('#perform(action)', function(){ + + var Controller = Paloma.controller('MyController', { + before: [ + 'all -> doThat', + 'singleCallback unknown -> doSomething', + 'multiCallback -> doSomething doAnotherThing' + ], + + didThat: false, + didSomething: false, + didAnotherThing: false, + + noCallback: function(){ console.log('I have no callback.'); }, + singleCallback: function(){ console.log('Single callback.'); }, + multiCallback: function(){ console.log('Multiple callbacks.')}, + + doThat: function(){ this.didThat = true; }, + doSomething: function(){ this.didSomething = true; }, + doAnotherThing: function(){ this.didAnotherThing = true; } + }); + + function itPerformsCallbackForAll(controller){ + it('performs callback for all', function(){ + expect(controller.didThat).toBeTruthy(); + }); + }; + + describe('when there is no matched callback', function(){ + var controller = new Controller(), + performer = new Paloma.BeforeCallbackPerformer(controller); + + performer.perform('noCallback'); + + it('will not perform any callback', function(){ + expect(controller.didSomething).toBeFalsy(); + }); + + itPerformsCallbackForAll(controller); + }); + + describe('when there is one matched callback', function(){ + var controller = new Controller(), + performer = new Paloma.BeforeCallbackPerformer(controller); + + performer.perform('singleCallback'); + + it('will perform the matched callback', function(){ + expect(controller.didSomething).toBeTruthy(); + }); + + itPerformsCallbackForAll(controller); + }); + + describe('when there is more than one matched callbacks', function(){ + var controller = new Controller(), + performer = new Paloma.BeforeCallbackPerformer(controller); + + performer.perform('multiCallback'); + + it('will perform all the matched callbacks', function(){ + expect(controller.didSomething && controller.didAnotherThing). + toBeTruthy(); + }); + + itPerformsCallbackForAll(controller); + }); + + }); +}); diff --git a/vendor/assets/javascripts/paloma/before_callback_performer.js b/vendor/assets/javascripts/paloma/before_callback_performer.js index 7a9ab23..7ee38c5 100644 --- a/vendor/assets/javascripts/paloma/before_callback_performer.js +++ b/vendor/assets/javascripts/paloma/before_callback_performer.js @@ -12,8 +12,8 @@ Paloma.BeforeCallbackPerformer.prototype = { }, _executeCallbacks: function(){ - for (var i = 0, n = this._callbacks.length; i < n; i++) - this._executeCallback( this._callbacks[i] ); + for (var i = 0, n = this._callbacks().length; i < n; i++) + this._executeCallback( this._callbacks()[i] ); }, _executeCallback: function(name){ @@ -43,7 +43,7 @@ Paloma.BeforeCallbackPerformer.prototype = { this._actionIsOn(parsedEntry.actions) || this._allIsOn(parsedEntry.actions) ) - return entry.callbacks; + return parsedEntry.callbacks; return []; },