From a2d1ea706a2a654c08bc4745325b8d2e576ff74f Mon Sep 17 00:00:00 2001 From: Joseph Frazer Date: Mon, 4 Feb 2019 08:09:19 -0500 Subject: [PATCH] [DEV-4338] Change behavior of default data Default data was converted to an empty array if the data evaluated to false. We only want to convert it if it is undefined so values that are false remain false. --- src/server/request/DataProcessor.js | 14 ++++- test/server/request/DataProcessorTest.js | 65 +++++++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/src/server/request/DataProcessor.js b/src/server/request/DataProcessor.js index ead31d3..5ada1fa 100644 --- a/src/server/request/DataProcessor.js +++ b/src/server/request/DataProcessor.js @@ -297,7 +297,19 @@ module.exports = Class( 'DataProcessor', const bdata = ( diff_data[ bucketid ] || [] )[ index ] || ( bucket.getDataByName( bucketid ) || [] )[ index ]; - result[ srcid ] = bdata || []; + if ( typeof bdata === 'undefined' ) + { + // This might be better as an empty string, but we will + // need to look into it more before we change it. It has + // been an empty array for a long time and it might cause + // issues to change it now. + result[ srcid ] = []; + } + else + { + result[ srcid ] = bdata; + } + return result; }, {} diff --git a/test/server/request/DataProcessorTest.js b/test/server/request/DataProcessorTest.js index 89d2aa7..269ed24 100644 --- a/test/server/request/DataProcessorTest.js +++ b/test/server/request/DataProcessorTest.js @@ -107,7 +107,7 @@ describe( 'DataProcessor', () => expect( given_request ).to.equal( request ); done(); - } + }; Sut( filter, dapi_factory, null, createStubStagingBucket ) .processDiff( {}, request, program ); @@ -250,6 +250,69 @@ describe( 'DataProcessor', () => return Promise.all( dapis ); } ); + + + it( "check _mapDapiData default values", () => + { + const triggered = {}; + + // g prefix = "given" + const getFieldData = function( gfield, gindex, gdapim, gdapi, gdata) + { + triggered[ gdapi.name ] = triggered[ gdapi.name ] || []; + triggered[ gdapi.name ][ gindex ] = arguments; + + expect( gdata ).to.deep.equal( { ina: '', inb: [] } ); + + return Promise.resolve( true ); + }; + + const dapi_manager = {}; + + const { + request, + program, + filter, + meta_source, + } = createStubs( false, {}, getFieldData ); + + const sut = Sut( + filter, + () => dapi_manager, + meta_source, + createStubStagingBucket + ); + + program.meta.fields = { + foo: { + dapi: { + name: 'dapi_foo', + mapsrc: { ina: 'src', inb: 'src1' }, + }, + }, + }; + + program.mapis = { + src1: [ 'foo' ], // change + }; + + // data changed + const data = { + src: [ 'src0', '' ], + src1: [ undefined, '' ], + }; + + const bucket = createStubBucket( { + src: [ 'bsrc0', '' ], + src1: [ 'bsrc10', undefined], + } ); + + const { dapis } = sut.processDiff( + data, request, program, bucket + ); + + return Promise.all( dapis ); + } ); } );