Skip to content

Commit eb70509

Browse files
author
Jordan Garcia
authored
Allow react-sdk to be passed in as clientEngine (#279)
1 parent 47bd9c3 commit eb70509

File tree

6 files changed

+50
-4
lines changed

6 files changed

+50
-4
lines changed

packages/optimizely-sdk/lib/index.browser.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,10 @@ module.exports = {
9393
hasRetriedEvents = true;
9494
}
9595

96-
config = fns.assignIn({}, config, {
97-
eventDispatcher: wrappedEventDispatcher,
96+
config = fns.assignIn({
9897
clientEngine: enums.JAVASCRIPT_CLIENT_ENGINE,
98+
}, config, {
99+
eventDispatcher: wrappedEventDispatcher,
99100
// always get the OptimizelyLogger facade from logging
100101
logger: logger,
101102
errorHandler: logging.getErrorHandler(),

packages/optimizely-sdk/lib/index.browser.tests.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,32 @@ describe('javascript-sdk', function() {
135135
assert.equal(packageJSON.version, optlyInstance.clientVersion);
136136
});
137137

138+
it('should allow passing of "react-sdk" as the clientEngine', function() {
139+
var optlyInstance = optimizelyFactory.createInstance({
140+
clientEngine: 'react-sdk',
141+
datafile: {},
142+
errorHandler: fakeErrorHandler,
143+
eventDispatcher: fakeEventDispatcher,
144+
logger: silentLogger,
145+
});
146+
// Invalid datafile causes onReady Promise rejection - catch this error
147+
optlyInstance.onReady().catch(function() {});
148+
assert.equal('react-sdk', optlyInstance.clientEngine);
149+
});
150+
151+
it('should allow passing of "react-sdk" as the clientEngine', function() {
152+
var optlyInstance = optimizelyFactory.createInstance({
153+
clientEngine: 'react-sdk',
154+
datafile: {},
155+
errorHandler: fakeErrorHandler,
156+
eventDispatcher: fakeEventDispatcher,
157+
logger: silentLogger,
158+
});
159+
// Invalid datafile causes onReady Promise rejection - catch this error
160+
optlyInstance.onReady().catch(function() {});
161+
assert.equal('react-sdk', optlyInstance.clientEngine);
162+
});
163+
138164
it('should activate with provided event dispatcher', function() {
139165
var optlyInstance = optimizelyFactory.createInstance({
140166
datafile: testData.getTestProjectConfig(),

packages/optimizely-sdk/lib/index.node.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ module.exports = {
8686

8787
config = fns.assign(
8888
{
89+
clientEngine: enums.NODE_CLIENT_ENGINE,
8990
eventDispatcher: defaultEventDispatcher,
9091
jsonSchemaValidator: jsonSchemaValidator,
9192
skipJSONValidation: false,
9293
},
9394
config,
9495
{
95-
clientEngine: enums.NODE_CLIENT_ENGINE,
9696
// always get the OptimizelyLogger facade from logging
9797
logger: logger,
9898
errorHandler: logging.getErrorHandler(),

packages/optimizely-sdk/lib/optimizely/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ var DEFAULT_ONREADY_TIMEOUT = 30000;
5858
*/
5959
function Optimizely(config) {
6060
var clientEngine = config.clientEngine;
61-
if (clientEngine !== enums.NODE_CLIENT_ENGINE && clientEngine !== enums.JAVASCRIPT_CLIENT_ENGINE) {
61+
if (enums.VALID_CLIENT_ENGINES.indexOf(clientEngine) === -1) {
6262
config.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.INVALID_CLIENT_ENGINE, MODULE_NAME, clientEngine));
6363
clientEngine = enums.NODE_CLIENT_ENGINE;
6464
}

packages/optimizely-sdk/lib/optimizely/index.tests.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ describe('lib/optimizely', function() {
128128
assert.strictEqual(logMessage, sprintf(LOG_MESSAGES.INVALID_CLIENT_ENGINE, 'OPTIMIZELY', 'undefined'));
129129
});
130130

131+
it('should allow passing `react-sdk` as the clientEngine', function() {
132+
var instance = new Optimizely({
133+
clientEngine: 'react-sdk',
134+
datafile: testData.getTestProjectConfig(),
135+
errorHandler: stubErrorHandler,
136+
eventDispatcher: stubEventDispatcher,
137+
logger: createdLogger,
138+
});
139+
140+
assert.strictEqual(instance.clientEngine, 'react-sdk');
141+
});
142+
131143
describe('when a user profile service is provided', function() {
132144
beforeEach(function() {
133145
sinon.stub(decisionService, 'createDecisionService');

packages/optimizely-sdk/lib/utils/enums/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,15 @@ exports.CONTROL_ATTRIBUTES = {
154154

155155
exports.JAVASCRIPT_CLIENT_ENGINE = 'javascript-sdk';
156156
exports.NODE_CLIENT_ENGINE = 'node-sdk';
157+
exports.REACT_CLIENT_ENGINE = 'react-sdk';
157158
exports.NODE_CLIENT_VERSION = '3.2.0-beta';
158159

160+
exports.VALID_CLIENT_ENGINES = [
161+
exports.NODE_CLIENT_ENGINE,
162+
exports.REACT_CLIENT_ENGINE,
163+
exports.JAVASCRIPT_CLIENT_ENGINE,
164+
];
165+
159166
/*
160167
* Notification types for use with NotificationCenter
161168
* Format is EVENT: <list of parameters to callback>

0 commit comments

Comments
 (0)