1
0
Fork 0

RatingServiceSubmitNotify: Add trait

* src/server/service/RatingServiceSubmitNotify.js: New trait.
* test/server/service/RatingServiceSubmitNotifyTest.js: Respective test.
master
Mike Gerwitz 2018-04-25 15:35:16 -04:00
parent 7d0dc97162
commit d8338b50e0
2 changed files with 196 additions and 0 deletions

View File

@ -0,0 +1,81 @@
/**
* Notification on all submit
*
* Copyright (C) 2018 R-T Specialty, LLC.
*
* This file is part of liza.
*
* liza is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
'use strict';
const { Trait } = require( 'easejs' );
const DslRaterContext = require( '../rater/DslRaterContext' )
const RatingService = require( './RatingService' );
/**
* Triggers DataApi when no results are available
*
* This information is currently stored in `__prem_avail_count`. In the
* future, it may be worth accepting a parameter to configure this at
* runtime.
*/
module.exports = Trait( 'RatingServiceSubmitNotify' )
.extend( RatingService,
{
/**
* DataApi to trigger
* @type {DataApi}
*/
'private _dapi': null,
/**
* Initialize mixin with DataApi to trigger
*
* @param {DataApi} dapi DataApi to trigger
*/
__mixin( dapi )
{
this._dapi = dapi;
},
/**
* Trigger previously provided DataApi when no results are available
*
* 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
*
* @return {undefined}
*/
'override protected postProcessRaterData'( data, actions, program, quote )
{
const quote_id = quote.getId();
const avail = ( data.__prem_avail_count || [ 0 ] )[ 0 ];
if ( avail === 0 )
{
this._dapi.request( { quote_id: quote_id }, () => {} );
}
this.__super( data, actions, program, quote );
},
} );

View File

@ -0,0 +1,115 @@
/**
* Tests RatingServiceSubmitNotify
*
* Copyright (C) 2018 R-T Specialty, LLC.
*
* This file is part of the Liza Data Collection Framework.
*
* liza is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
'use strict'
const { Class } = require( 'easejs' );
const { expect } = require( 'chai' );
const {
dapi: {
DataApi,
},
server: {
service: {
RatingServiceSubmitNotify: Sut,
RatingService,
},
},
test: {
server: {
service: {
RatingServiceStub,
},
},
},
} = require( '../../../' );
describe( 'RatingServiceSubmitNotify', () =>
{
[
{
prem_avail_count: [ 0 ],
expected_request: true,
},
{
prem_avail_count: [ 2 ],
expected_request: false,
},
{
// this shouldn't happen; ignore all but first index
prem_avail_count: [ 2, 2 ],
expected_request: false,
},
].forEach( ( { prem_avail_count, expected_request }, i ) =>
it( `sends request on post process if no premiums (#${i})`, done =>
{
const {
stub_rate_data,
logger,
server,
raters,
dao,
request,
response,
quote,
} = 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 )
{
expect( data ).to.deep.equal( { quote_id: quote_id } );
requested = true;
},
} )();
const sut = RatingService.use( Sut( dapi ) )(
logger, dao, server, raters
);
quote.getId = () => quote_id;
// one of the methods that is called by the supertype
let save_called = false;
dao.setWorksheets = () => save_called = true;
stub_rate_data.__prem_avail_count = prem_avail_count;
sut.request( request, response, quote, 'something', () =>
{
expect( requested ).to.equal( expected_request );
expect( save_called ).to.be.true;
done();
} );
} )
);
} );