diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.js b/packages/optimizely-sdk/lib/core/event_builder/index.js index 9e2fda7a6..cc977d3e7 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.js +++ b/packages/optimizely-sdk/lib/core/event_builder/index.js @@ -133,12 +133,12 @@ function getVisitorSnapshot(configObj, eventKey, eventTags, logger) { if (eventTags) { var revenue = eventTagUtils.getRevenueValue(eventTags, logger); - if (revenue) { + if (revenue !== null) { eventDict[enums.RESERVED_EVENT_KEYWORDS.REVENUE] = revenue; } var eventValue = eventTagUtils.getEventValue(eventTags, logger); - if (eventValue) { + if (eventValue !== null) { eventDict[enums.RESERVED_EVENT_KEYWORDS.VALUE] = eventValue; } diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.tests.js b/packages/optimizely-sdk/lib/core/event_builder/index.tests.js index d1e3558ec..e54336658 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.tests.js +++ b/packages/optimizely-sdk/lib/core/event_builder/index.tests.js @@ -1097,6 +1097,54 @@ describe('lib/core/event_builder', function() { assert.deepEqual(actualParams, expectedParams); }); + it('should include revenue value of 0 in the event object', function() { + var expectedParams = { + url: 'https://logx.optimizely.com/v1/events', + httpVerb: 'POST', + params: { + 'client_version': packageJSON.version, + 'project_id': '111001', + 'visitors': [{ + 'attributes': [], + 'visitor_id': 'testUser', + 'snapshots': [{ + 'events': [{ + 'uuid': 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c', + 'tags': { + 'revenue': 0 + }, + 'timestamp': Math.round(new Date().getTime()), + 'revenue': 0, + 'key': 'testEvent', + 'entity_id': '111095' + }] + }] + }], + 'account_id': '12001', + 'client_name': 'node-sdk', + 'revision': '42', + 'anonymize_ip': false, + 'enrich_decisions': true, + }, + }; + + var eventOptions = { + clientEngine: 'node-sdk', + clientVersion: packageJSON.version, + configObj: configObj, + eventKey: 'testEvent', + eventTags: { + 'revenue': 0, + }, + logger: mockLogger, + userId: 'testUser', + }; + + var actualParams = eventBuilder.getConversionEvent(eventOptions); + + assert.deepEqual(actualParams, expectedParams); + }); + describe('and the revenue value is invalid', function() { it('should not include the revenue value in the event object', function() { var expectedParams = { @@ -1200,6 +1248,54 @@ describe('lib/core/event_builder', function() { assert.deepEqual(actualParams, expectedParams); }); + it('should include the falsy event values in the event object', function() { + var expectedParams = { + url: 'https://logx.optimizely.com/v1/events', + httpVerb: 'POST', + params: { + 'client_version': packageJSON.version, + 'project_id': '111001', + 'visitors': [{ + 'attributes': [], + 'visitor_id': 'testUser', + 'snapshots': [{ + 'events': [{ + 'uuid': 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c', + 'tags': { + 'value': '0.0' + }, + 'timestamp': Math.round(new Date().getTime()), + 'value': 0.0, + 'key': 'testEvent', + 'entity_id': '111095' + }] + }] + }], + 'account_id': '12001', + 'client_name': 'node-sdk', + 'revision': '42', + 'anonymize_ip': false, + 'enrich_decisions': true, + }, + }; + + var eventOptions = { + clientEngine: 'node-sdk', + clientVersion: packageJSON.version, + configObj: configObj, + eventKey: 'testEvent', + eventTags: { + 'value': '0.0', + }, + logger: mockLogger, + userId: 'testUser', + }; + + var actualParams = eventBuilder.getConversionEvent(eventOptions); + + assert.deepEqual(actualParams, expectedParams); + }); + describe('and the event value is invalid', function() { it('should not include the event value in the event object', function() { var expectedParams = { diff --git a/packages/optimizely-sdk/lib/optimizely/index.js b/packages/optimizely-sdk/lib/optimizely/index.js index e3ee2528f..a2090225d 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.js +++ b/packages/optimizely-sdk/lib/optimizely/index.js @@ -231,7 +231,6 @@ Optimizely.prototype.track = function(eventKey, userId, attributes, eventTags) { // remove null values from eventTags eventTags = this.__filterEmptyValues(eventTags); - var conversionEventOptions = { attributes: attributes, clientEngine: this.clientEngine,