diff --git a/packages/optimizely-sdk/lib/index.browser.js b/packages/optimizely-sdk/lib/index.browser.js index e81b7ea5d..cde323a96 100644 --- a/packages/optimizely-sdk/lib/index.browser.js +++ b/packages/optimizely-sdk/lib/index.browser.js @@ -93,9 +93,10 @@ module.exports = { hasRetriedEvents = true; } - config = fns.assignIn({}, config, { - eventDispatcher: wrappedEventDispatcher, + config = fns.assignIn({ clientEngine: enums.JAVASCRIPT_CLIENT_ENGINE, + }, config, { + eventDispatcher: wrappedEventDispatcher, // always get the OptimizelyLogger facade from logging logger: logger, errorHandler: logging.getErrorHandler(), diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index c89089b4d..2cc1dc8e3 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -135,6 +135,32 @@ describe('javascript-sdk', function() { assert.equal(packageJSON.version, optlyInstance.clientVersion); }); + it('should allow passing of "react-sdk" as the clientEngine', function() { + var optlyInstance = optimizelyFactory.createInstance({ + clientEngine: 'react-sdk', + datafile: {}, + errorHandler: fakeErrorHandler, + eventDispatcher: fakeEventDispatcher, + logger: silentLogger, + }); + // Invalid datafile causes onReady Promise rejection - catch this error + optlyInstance.onReady().catch(function() {}); + assert.equal('react-sdk', optlyInstance.clientEngine); + }); + + it('should allow passing of "react-sdk" as the clientEngine', function() { + var optlyInstance = optimizelyFactory.createInstance({ + clientEngine: 'react-sdk', + datafile: {}, + errorHandler: fakeErrorHandler, + eventDispatcher: fakeEventDispatcher, + logger: silentLogger, + }); + // Invalid datafile causes onReady Promise rejection - catch this error + optlyInstance.onReady().catch(function() {}); + assert.equal('react-sdk', optlyInstance.clientEngine); + }); + it('should activate with provided event dispatcher', function() { var optlyInstance = optimizelyFactory.createInstance({ datafile: testData.getTestProjectConfig(), diff --git a/packages/optimizely-sdk/lib/index.node.js b/packages/optimizely-sdk/lib/index.node.js index bc75ad600..a443a6853 100644 --- a/packages/optimizely-sdk/lib/index.node.js +++ b/packages/optimizely-sdk/lib/index.node.js @@ -86,13 +86,13 @@ module.exports = { config = fns.assign( { + clientEngine: enums.NODE_CLIENT_ENGINE, eventDispatcher: defaultEventDispatcher, jsonSchemaValidator: jsonSchemaValidator, skipJSONValidation: false, }, config, { - clientEngine: enums.NODE_CLIENT_ENGINE, // always get the OptimizelyLogger facade from logging logger: logger, errorHandler: logging.getErrorHandler(), diff --git a/packages/optimizely-sdk/lib/optimizely/index.js b/packages/optimizely-sdk/lib/optimizely/index.js index 23f0577e7..09bb8121f 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.js +++ b/packages/optimizely-sdk/lib/optimizely/index.js @@ -58,7 +58,7 @@ var DEFAULT_ONREADY_TIMEOUT = 30000; */ function Optimizely(config) { var clientEngine = config.clientEngine; - if (clientEngine !== enums.NODE_CLIENT_ENGINE && clientEngine !== enums.JAVASCRIPT_CLIENT_ENGINE) { + if (enums.VALID_CLIENT_ENGINES.indexOf(clientEngine) === -1) { config.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.INVALID_CLIENT_ENGINE, MODULE_NAME, clientEngine)); clientEngine = enums.NODE_CLIENT_ENGINE; } diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 2be2a668d..f45f81261 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -128,6 +128,18 @@ describe('lib/optimizely', function() { assert.strictEqual(logMessage, sprintf(LOG_MESSAGES.INVALID_CLIENT_ENGINE, 'OPTIMIZELY', 'undefined')); }); + it('should allow passing `react-sdk` as the clientEngine', function() { + var instance = new Optimizely({ + clientEngine: 'react-sdk', + datafile: testData.getTestProjectConfig(), + errorHandler: stubErrorHandler, + eventDispatcher: stubEventDispatcher, + logger: createdLogger, + }); + + assert.strictEqual(instance.clientEngine, 'react-sdk'); + }); + describe('when a user profile service is provided', function() { beforeEach(function() { sinon.stub(decisionService, 'createDecisionService'); diff --git a/packages/optimizely-sdk/lib/utils/enums/index.js b/packages/optimizely-sdk/lib/utils/enums/index.js index 67808cac1..cf844a3ba 100644 --- a/packages/optimizely-sdk/lib/utils/enums/index.js +++ b/packages/optimizely-sdk/lib/utils/enums/index.js @@ -154,8 +154,15 @@ exports.CONTROL_ATTRIBUTES = { exports.JAVASCRIPT_CLIENT_ENGINE = 'javascript-sdk'; exports.NODE_CLIENT_ENGINE = 'node-sdk'; +exports.REACT_CLIENT_ENGINE = 'react-sdk'; exports.NODE_CLIENT_VERSION = '3.2.0-beta'; +exports.VALID_CLIENT_ENGINES = [ + exports.NODE_CLIENT_ENGINE, + exports.REACT_CLIENT_ENGINE, + exports.JAVASCRIPT_CLIENT_ENGINE, +]; + /* * Notification types for use with NotificationCenter * Format is EVENT: