Mike Gerwitz

Activist for User Freedom

aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Gerwitz <mike.gerwitz@rtspecialty.com>2018-02-07 15:04:26 -0500
committerMike Gerwitz <mike.gerwitz@rtspecialty.com>2018-02-07 15:04:26 -0500
commit70ba408c373a3044a0ae3961b3915de89bccb77b (patch)
treedeac17385a68dbe5d719e817043a901271211320
parent0282be8903abe7d6533701eecc3c6a1fe03b47c3 (diff)
parent943231ee8128c6678d89e256f571fe51b18c0fd0 (diff)
downloadliza-70ba408c373a3044a0ae3961b3915de89bccb77b.tar.gz
liza-70ba408c373a3044a0ae3961b3915de89bccb77b.tar.bz2
liza-70ba408c373a3044a0ae3961b3915de89bccb77b.zip
Use highest available source index for set eventv3.4.4
-rw-r--r--src/client/Client.js15
-rw-r--r--src/client/ClientDependencyFactory.js2
-rw-r--r--src/client/event/ValueSetEventHandler.js86
-rw-r--r--src/ui/ElementStyler.js6
-rw-r--r--test/event/ValueSetEventHandlerTest.js99
5 files changed, 193 insertions, 15 deletions
diff --git a/src/client/Client.js b/src/client/Client.js
index 57ae2cf..a047945 100644
--- a/src/client/Client.js
+++ b/src/client/Client.js
@@ -1,7 +1,7 @@
/**
* Liza client
*
- * Copyright (C) 2017 R-T Specialty, LLC.
+ * Copyright (C) 2017, 2018 R-T Specialty, LLC.
*
* This file is part of the Liza Data Collection Framework
*
@@ -2616,19 +2616,6 @@ module.exports = Class( 'Client' )
// perform event (XXX: replace me; see above)
switch ( event_name )
{
- case 'set':
- var setdata = {};
- setdata[ data.elementName ] = [];
-
- for ( var i in data.indexes )
- {
- var index = data.indexes[ i ];
- setdata[ data.elementName ][ index ] = data.value[ index ];
- }
-
- this._quote.setData( setdata );
- break;
-
case 'reset':
var reset = {};
reset[ data.elementName ] = data.indexes;
diff --git a/src/client/ClientDependencyFactory.js b/src/client/ClientDependencyFactory.js
index 759f312..03b2682 100644
--- a/src/client/ClientDependencyFactory.js
+++ b/src/client/ClientDependencyFactory.js
@@ -369,6 +369,8 @@ module.exports = Class( 'ClientDependencyFactory',
'show': field_vis_handler,
'hide': field_vis_handler,
+ 'set': requireh( 'ValueSetEventHandler' )( client ),
+
'action$cvv2Dialog': requireh( 'Cvv2DialogEventHandler' )( jquery )
} );
}
diff --git a/src/client/event/ValueSetEventHandler.js b/src/client/event/ValueSetEventHandler.js
new file mode 100644
index 0000000..77ad029
--- /dev/null
+++ b/src/client/event/ValueSetEventHandler.js
@@ -0,0 +1,86 @@
+/**
+ * Value set event handler
+ *
+ * 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 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 Class = require( 'easejs' ).Class;
+const EventHandler = require( './EventHandler' );
+
+
+/**
+ * Set field values
+ */
+module.exports = Class( 'ValueSetEventHandler' )
+ .implement( EventHandler )
+ .extend(
+{
+ /**
+ * Client
+ * @type {Client}
+ */
+ 'private _client': null,
+
+
+ /**
+ * Initialize with client
+ *
+ * Ideally we don't want the client (Law of Demeter), but at the point
+ * that this class is instantiated, a quote may not yet be
+ * initialized. Refactoring is needed.
+ *
+ * @param {Client} client
+ */
+ constructor( client )
+ {
+ this._client = client;
+ },
+
+
+ /**
+ * Set value of specified fields
+ *
+ * If the destination index exceeds the number of indexes of the source
+ * field, the last available source index will be used. This matches
+ * the behavior of assertions.
+ *
+ * @param {string} event_id event id
+ * @param {function(*,Object)} callback continuation to invoke on completion
+ * @param {Object} data event data
+ *
+ * @return {EventHandler} self
+ */
+ 'public handle'(
+ event_id, callback, { elementName: field_name, indexes, value }
+ )
+ {
+ const quote = this._client.getQuote();
+ const maxi = value.length - 1;
+
+ const set_data = indexes.reduce( ( result, desti ) =>
+ {
+ result[ desti ] = value[ Math.min( desti, maxi ) ];
+ return result;
+ }, [] );
+
+ quote.setData( { [field_name]: set_data } );
+ callback();
+ },
+} );
diff --git a/src/ui/ElementStyler.js b/src/ui/ElementStyler.js
index 85c00af..82fa9c8 100644
--- a/src/ui/ElementStyler.js
+++ b/src/ui/ElementStyler.js
@@ -493,7 +493,11 @@ module.exports = Class( 'ElementStyler',
while ( i-- )
{
const question = elements[ i ][ 0 ];
- question.checked = ( question.value === ''+value );
+
+ if ( question )
+ {
+ question.checked = ( question.value === ''+value );
+ }
}
break;
diff --git a/test/event/ValueSetEventHandlerTest.js b/test/event/ValueSetEventHandlerTest.js
new file mode 100644
index 0000000..50523b7
--- /dev/null
+++ b/test/event/ValueSetEventHandlerTest.js
@@ -0,0 +1,99 @@
+/**
+ * Test case for ValueSetEventHandler
+ *
+ * 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 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 event = require( '../../' ).client.event;
+const expect = require( 'chai' ).expect;
+const Class = require( 'easejs' ).Class;
+
+const { ValueSetEventHandler: Sut } = event;
+
+
+describe( 'ValueSetEventHandler', () =>
+{
+ it( "sets relative indexes up until last source index", done =>
+ {
+ const expected = {
+ foo: [ "zero", "one", "one" ],
+ };
+
+ let qcalled = false;
+ const quote = {
+ setData( data )
+ {
+ expect( data ).to.deep.equal( expected );
+ qcalled = true;
+ }
+ };
+
+ const callback = () =>
+ {
+ expect( qcalled ).to.be.true;
+ done();
+ };
+
+ Sut( { getQuote: () => quote } )
+ .handle(
+ '',
+ callback,
+ {
+ elementName: 'foo',
+ indexes: [ 0, 1, 2 ],
+ value: [ "zero", "one" ],
+ }
+ );
+ } );
+
+
+ it( "sets only given indexes", done =>
+ {
+ const expected = {
+ bar: [ , "set1", "set2" ],
+ };
+
+ let qcalled = false;
+ const quote = {
+ setData( data )
+ {
+ expect( data ).to.deep.equal( expected );
+ qcalled = true;
+ }
+ };
+
+ const callback = () =>
+ {
+ expect( qcalled ).to.be.true;
+ done();
+ };
+
+ Sut( { getQuote: () => quote } )
+ .handle(
+ '',
+ callback,
+ {
+ elementName: 'bar',
+ indexes: [ 1, 2 ],
+ value: [ "ignore", "set1", "set2", "extra" ],
+ }
+ );
+ } );
+} );