From ae0d9b3862514d8628f7e8899a25613284038c1c Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Fri, 27 Apr 2018 16:06:33 -0400 Subject: [PATCH] RatingServiceSubmitNotify: Create dapi dynamically with session Session information needs to be available for request session spoofing. --- src/server/service/RatingService.js | 15 ++++---- .../service/RatingServiceSubmitNotify.js | 33 ++++++++++-------- src/test/server/service/RatingServiceStub.js | 1 + .../service/RatingServiceSubmitNotifyTest.js | 34 ++++++++++--------- test/server/service/RatingServiceTest.js | 14 ++++++-- 5 files changed, 59 insertions(+), 38 deletions(-) diff --git a/src/server/service/RatingService.js b/src/server/service/RatingService.js index 65a6215..15fcbb0 100644 --- a/src/server/service/RatingService.js +++ b/src/server/service/RatingService.js @@ -155,7 +155,7 @@ module.exports = Class( 'RatingService', actions = actions || []; _self.postProcessRaterData( - rate_data, actions, program, quote + request, rate_data, actions, program, quote ); const class_dest = {}; @@ -244,14 +244,17 @@ module.exports = Class( 'RatingService', /** * Process rater data returned from a rater * - * @param {Object} data rating data returned - * @param {Array} actions actions to send to client - * @param {Program} program program used to perform rating - * @param {Quote} quote quote used for rating + * @param {UserRequest} request user request to satisfy + * @param {Object} data rating data returned + * @param {Array} actions actions to send to client + * @param {Program} program program used to perform rating + * @param {Quote} quote quote used for rating * * @return {undefined} */ - 'virtual protected postProcessRaterData': function( data, actions, program, quote ) + 'virtual protected postProcessRaterData': function( + request, data, actions, program, quote + ) { var meta = data._cmpdata || {}; diff --git a/src/server/service/RatingServiceSubmitNotify.js b/src/server/service/RatingServiceSubmitNotify.js index cfcf210..c333561 100644 --- a/src/server/service/RatingServiceSubmitNotify.js +++ b/src/server/service/RatingServiceSubmitNotify.js @@ -41,10 +41,10 @@ module.exports = Trait( 'RatingServiceSubmitNotify' ) .extend( RatingService, { /** - * DataApi to trigger - * @type {DataApi} + * Function returning DataApi to trigger + * @type {Function(UserSession):DataApi} */ - 'private _dapi': null, + 'private _dapif': null, /** * Data store for notification flag @@ -56,12 +56,12 @@ module.exports = Trait( 'RatingServiceSubmitNotify' ) /** * Initialize mixin with DataApi to trigger * - * @param {DataApi} dapi DataApi to trigger - * @param {ServerDao} dao data store for notification flag + * @param {Function(UserSession):DataApi} dapif Function producing DataApi + * @param {ServerDao} dao store for notification flag */ - __mixin( dapi, dao ) + __mixin( dapif, dao ) { - this._dapi = dapi; + this._dapif = dapif; this._notifyDao = dao; }, @@ -71,14 +71,17 @@ module.exports = Trait( 'RatingServiceSubmitNotify' ) * * Result count is determined by DATA.__prem_avail_count. * - * @param {Object} data rating data returned - * @param {Array} actions actions to send to client - * @param {Program} program program used to perform rating - * @param {Quote} quote quote used for rating + * @param {UserRequest} request user request + * @param {Object} data rating data returned + * @param {Array} actions actions to send to client + * @param {Program} program program used to perform rating + * @param {Quote} quote quote used for rating * * @return {undefined} */ - 'override protected postProcessRaterData'( data, actions, program, quote ) + 'override protected postProcessRaterData'( + request, data, actions, program, quote + ) { const quote_id = quote.getId(); const avail = ( data.__prem_avail_count || [ 0 ] )[ 0 ]; @@ -92,12 +95,14 @@ module.exports = Trait( 'RatingServiceSubmitNotify' ) return; } - this._dapi.request( { quote_id: quote_id }, () => {} ); + this._dapif( request ) + .request( { quote_id: quote_id }, () => {} ); + this._setNotified( quote_id ); } ); } - this.__super( data, actions, program, quote ); + this.__super( request, data, actions, program, quote ); }, diff --git a/src/test/server/service/RatingServiceStub.js b/src/test/server/service/RatingServiceStub.js index 4b0b58c..c58d1cf 100644 --- a/src/test/server/service/RatingServiceStub.js +++ b/src/test/server/service/RatingServiceStub.js @@ -61,6 +61,7 @@ exports.getStubs = function() const request = { getSession: () => session, + getSessionIdName: () => {}, }; const response = {}; diff --git a/test/server/service/RatingServiceSubmitNotifyTest.js b/test/server/service/RatingServiceSubmitNotifyTest.js index 2a23107..b4f5922 100644 --- a/test/server/service/RatingServiceSubmitNotifyTest.js +++ b/test/server/service/RatingServiceSubmitNotifyTest.js @@ -86,33 +86,35 @@ describe( 'RatingServiceSubmitNotify', () => it( `sends request on post process if no premiums (#${i})`, done => { const { - stub_rate_data, - logger, - server, - raters, dao, + logger, + quote, + raters, request, response, - quote, + server, + stub_rate_data, } = RatingServiceStub.getStubs(); const quote_id = 1234; let requested = false; - const dapi = Class.implement( DataApi ).extend( - { - // warning: if an expectation fails, because of how - // RatingService handles errors, it will cause the test to - // _hang_ rather than throw the assertion error - request( data, callback ) + const dapif = given_request => + Class.implement( DataApi ).extend( { - expect( data ).to.deep.equal( { quote_id: quote_id } ); + // warning: if an expectation fails, because of how + // RatingService handles errors, it will cause the test to + // _hang_ rather than throw the assertion error + request( data, callback ) + { + expect( given_request ).to.equal( request ); + expect( data ).to.deep.equal( { quote_id: quote_id } ); - requested = true; - }, - } )(); + requested = true; + }, + } )(); - const sut = RatingService.use( Sut( dapi, dao ) )( + const sut = RatingService.use( Sut( dapif, dao ) )( logger, dao, server, raters ); diff --git a/test/server/service/RatingServiceTest.js b/test/server/service/RatingServiceTest.js index ba2c13e..948af9a 100644 --- a/test/server/service/RatingServiceTest.js +++ b/test/server/service/RatingServiceTest.js @@ -33,7 +33,15 @@ describe( 'RatingService', () => { let processed = false; - const { logger, server, raters, dao, request, response, quote } = RatingServiceStub.getStubs(); + const { + logger, + server, + raters, + dao, + request, + response, + quote, + } = RatingServiceStub.getStubs(); dao.mergeBucket = () => { @@ -43,7 +51,9 @@ describe( 'RatingService', () => const sut = Sut.extend( { - 'override postProcessRaterData'( data, actions, program, quote ) + 'override postProcessRaterData'( + request, data, actions, program, quote + ) { processed = true; }