@@ -20,12 +20,12 @@ import eventProcessor from '../core/event_processor';
20
20
import * as logging from '@optimizely/js-sdk-logging' ;
21
21
22
22
import Optimizely from './' ;
23
+ import OptimizelyUserContext from '../optimizely_user_context' ;
23
24
import AudienceEvaluator from '../core/audience_evaluator' ;
24
25
import bluebird from 'bluebird' ;
25
26
import bucketer from '../core/bucketer' ;
26
27
import * as projectConfigManager from '../core/project_config/project_config_manager' ;
27
28
import * as enums from '../utils/enums' ;
28
- import * as eventBuilder from '../core/event_builder' ;
29
29
import eventDispatcher from '../plugins/event_dispatcher/index.node' ;
30
30
import errorHandler from '../plugins/error_handler' ;
31
31
import fns from '../utils/fns' ;
@@ -210,7 +210,6 @@ describe('lib/optimizely', function() {
210
210
it ( 'should not log an error when sdkKey is provided and datafile is not provided' , function ( ) {
211
211
new Optimizely ( {
212
212
clientEngine : 'node-sdk' ,
213
- eventBuilder : eventBuilder ,
214
213
errorHandler : stubErrorHandler ,
215
214
eventDispatcher : eventDispatcher ,
216
215
isValidInstance : true ,
@@ -2626,7 +2625,6 @@ describe('lib/optimizely', function() {
2626
2625
optlyInstance = new Optimizely ( {
2627
2626
clientEngine : 'node-sdk' ,
2628
2627
datafile : testData . getTestProjectConfig ( ) ,
2629
- eventBuilder : eventBuilder ,
2630
2628
errorHandler : errorHandler ,
2631
2629
eventDispatcher : eventDispatcher ,
2632
2630
jsonSchemaValidator : jsonSchemaValidator ,
@@ -2676,7 +2674,6 @@ describe('lib/optimizely', function() {
2676
2674
optlyInstance = new Optimizely ( {
2677
2675
clientEngine : 'node-sdk' ,
2678
2676
datafile : testData . getTestProjectConfig ( ) ,
2679
- eventBuilder : eventBuilder ,
2680
2677
errorHandler : errorHandler ,
2681
2678
eventDispatcher : eventDispatcher ,
2682
2679
jsonSchemaValidator : jsonSchemaValidator ,
@@ -2723,7 +2720,6 @@ describe('lib/optimizely', function() {
2723
2720
var optly = new Optimizely ( {
2724
2721
clientEngine : 'node-sdk' ,
2725
2722
datafile : testData . getTestProjectConfigWithFeatures ( ) ,
2726
- eventBuilder : eventBuilder ,
2727
2723
errorHandler : errorHandler ,
2728
2724
eventDispatcher : eventDispatcher ,
2729
2725
jsonSchemaValidator : jsonSchemaValidator ,
@@ -4313,6 +4309,95 @@ describe('lib/optimizely', function() {
4313
4309
} ) ;
4314
4310
} ) ;
4315
4311
4312
+ describe ( 'decide APIs' , function ( ) {
4313
+ var optlyInstance ;
4314
+ var bucketStub ;
4315
+ var createdLogger = logger . createLogger ( {
4316
+ logLevel : LOG_LEVEL . INFO ,
4317
+ logToConsole : false ,
4318
+ } ) ;
4319
+ beforeEach ( function ( ) {
4320
+ optlyInstance = new Optimizely ( {
4321
+ clientEngine : 'node-sdk' ,
4322
+ datafile : testData . getTestDecideProjectConfig ( ) ,
4323
+ errorHandler : errorHandler ,
4324
+ eventDispatcher : eventDispatcher ,
4325
+ jsonSchemaValidator : jsonSchemaValidator ,
4326
+ logger : createdLogger ,
4327
+ isValidInstance : true ,
4328
+ eventBatchSize : 1 ,
4329
+ } ) ;
4330
+
4331
+ bucketStub = sinon . stub ( bucketer , 'bucket' ) ;
4332
+ sinon . stub ( errorHandler , 'handleError' ) ;
4333
+ sinon . stub ( createdLogger , 'log' ) ;
4334
+ sinon . stub ( fns , 'uuid' ) . returns ( 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c' ) ;
4335
+ } ) ;
4336
+
4337
+ afterEach ( function ( ) {
4338
+ bucketer . bucket . restore ( ) ;
4339
+ errorHandler . handleError . restore ( ) ;
4340
+ createdLogger . log . restore ( ) ;
4341
+ fns . uuid . restore ( ) ;
4342
+ } ) ;
4343
+ describe ( '#createUserContext' , function ( ) {
4344
+ it ( 'should create OptimizelyUserContext with provided attributes and userId' , function ( ) {
4345
+ var userId = 'testUser1' ;
4346
+ var attributes = { test_attribute : 'test_value' } ;
4347
+ var user = optlyInstance . createUserContext ( userId , attributes ) ;
4348
+ assert . instanceOf ( user , OptimizelyUserContext ) ;
4349
+ assert . deepEqual ( optlyInstance , user . getOptimizely ( ) ) ;
4350
+ assert . deepEqual ( attributes , user . getAttributes ( ) ) ;
4351
+ assert . deepEqual ( userId , user . getUserId ( ) ) ;
4352
+ } ) ;
4353
+
4354
+ it ( 'should create OptimizelyUserContext when no attributes provided' , function ( ) {
4355
+ var userId = 'testUser2' ;
4356
+ var user = optlyInstance . createUserContext ( userId ) ;
4357
+ assert . instanceOf ( user , OptimizelyUserContext ) ;
4358
+ assert . deepEqual ( optlyInstance , user . getOptimizely ( ) ) ;
4359
+ assert . deepEqual ( { } , user . getAttributes ( ) ) ;
4360
+ assert . deepEqual ( userId , user . getUserId ( ) ) ;
4361
+ } ) ;
4362
+
4363
+ it ( 'should create multiple instances of OptimizelyUserContext' , function ( ) {
4364
+ var userId1 = 'testUser1'
4365
+ var userId2 = 'testUser2' ;
4366
+ var attributes1 = { test_attribute : 'test_value' } ;
4367
+ var user1 = optlyInstance . createUserContext ( userId1 , attributes1 ) ;
4368
+ var user2 = optlyInstance . createUserContext ( userId2 ) ;
4369
+ assert . instanceOf ( user1 , OptimizelyUserContext ) ;
4370
+ assert . deepEqual ( user1 . getOptimizely ( ) , optlyInstance ) ;
4371
+ assert . deepEqual ( user1 . getAttributes ( ) , attributes1 ) ;
4372
+ assert . deepEqual ( user1 . getUserId ( ) , userId1 ) ;
4373
+ assert . instanceOf ( user2 , OptimizelyUserContext ) ;
4374
+ assert . deepEqual ( user2 . getOptimizely ( ) , optlyInstance ) ;
4375
+ assert . deepEqual ( user2 . getAttributes ( ) , { } ) ;
4376
+ assert . deepEqual ( user2 . getUserId ( ) , userId2 ) ;
4377
+ } ) ;
4378
+
4379
+ it ( 'should call the error handler for invalid user ID and return null' , function ( ) {
4380
+ assert . isNull ( optlyInstance . createUserContext ( null ) ) ;
4381
+ sinon . assert . calledOnce ( errorHandler . handleError ) ;
4382
+ var errorMessage = errorHandler . handleError . lastCall . args [ 0 ] . message ;
4383
+ assert . strictEqual ( errorMessage , sprintf ( ERROR_MESSAGES . INVALID_INPUT_FORMAT , 'OPTIMIZELY' , 'user_id' ) ) ;
4384
+ sinon . assert . calledOnce ( createdLogger . log ) ;
4385
+ var logMessage = createdLogger . log . args [ 0 ] [ 1 ] ;
4386
+ assert . strictEqual ( logMessage , sprintf ( ERROR_MESSAGES . INVALID_INPUT_FORMAT , 'OPTIMIZELY' , 'user_id' ) ) ;
4387
+ } ) ;
4388
+
4389
+ it ( 'should call the error handler for invalid attributes and return null' , function ( ) {
4390
+ assert . isNull ( optlyInstance . createUserContext ( 'user1' , 'invalid_attributes' ) ) ;
4391
+ sinon . assert . calledOnce ( errorHandler . handleError ) ;
4392
+ var errorMessage = errorHandler . handleError . lastCall . args [ 0 ] . message ;
4393
+ assert . strictEqual ( errorMessage , sprintf ( ERROR_MESSAGES . INVALID_ATTRIBUTES , 'ATTRIBUTES_VALIDATOR' ) ) ;
4394
+ sinon . assert . calledOnce ( createdLogger . log ) ;
4395
+ var logMessage = createdLogger . log . args [ 0 ] [ 1 ] ;
4396
+ assert . strictEqual ( logMessage , sprintf ( ERROR_MESSAGES . INVALID_ATTRIBUTES , 'ATTRIBUTES_VALIDATOR' ) ) ;
4397
+ } ) ;
4398
+ } ) ;
4399
+ } ) ;
4400
+
4316
4401
//tests separated out from APIs because of mock bucketing
4317
4402
describe ( 'getVariationBucketingIdAttribute' , function ( ) {
4318
4403
var optlyInstance ;
@@ -4324,7 +4409,6 @@ describe('lib/optimizely', function() {
4324
4409
optlyInstance = new Optimizely ( {
4325
4410
clientEngine : 'node-sdk' ,
4326
4411
datafile : testData . getTestProjectConfig ( ) ,
4327
- eventBuilder : eventBuilder ,
4328
4412
errorHandler : errorHandler ,
4329
4413
eventDispatcher : eventDispatcher ,
4330
4414
jsonSchemaValidator : jsonSchemaValidator ,
@@ -4379,7 +4463,6 @@ describe('lib/optimizely', function() {
4379
4463
optlyInstance = new Optimizely ( {
4380
4464
clientEngine : 'node-sdk' ,
4381
4465
datafile : testData . getTestProjectConfigWithFeatures ( ) ,
4382
- eventBuilder : eventBuilder ,
4383
4466
errorHandler : errorHandler ,
4384
4467
eventDispatcher : eventDispatcher ,
4385
4468
jsonSchemaValidator : jsonSchemaValidator ,
@@ -4412,7 +4495,6 @@ describe('lib/optimizely', function() {
4412
4495
lasers : 300 ,
4413
4496
message : 'this is not a valid datafile' ,
4414
4497
} ,
4415
- eventBuilder : eventBuilder ,
4416
4498
errorHandler : errorHandler ,
4417
4499
eventDispatcher : eventDispatcher ,
4418
4500
jsonSchemaValidator : jsonSchemaValidator ,
@@ -4936,7 +5018,6 @@ describe('lib/optimizely', function() {
4936
5018
lasers : 300 ,
4937
5019
message : 'this is not a valid datafile' ,
4938
5020
} ,
4939
- eventBuilder : eventBuilder ,
4940
5021
errorHandler : errorHandler ,
4941
5022
eventDispatcher : eventDispatcher ,
4942
5023
jsonSchemaValidator : jsonSchemaValidator ,
@@ -4976,7 +5057,6 @@ describe('lib/optimizely', function() {
4976
5057
optlyInstance = new Optimizely ( {
4977
5058
clientEngine : 'node-sdk' ,
4978
5059
datafile : testData . getTestProjectConfigWithFeatures ( ) ,
4979
- eventBuilder : eventBuilder ,
4980
5060
errorHandler : errorHandler ,
4981
5061
eventDispatcher : eventDispatcher ,
4982
5062
jsonSchemaValidator : jsonSchemaValidator ,
@@ -7147,7 +7227,6 @@ describe('lib/optimizely', function() {
7147
7227
optlyInstance = new Optimizely ( {
7148
7228
clientEngine : 'node-sdk' ,
7149
7229
datafile : testData . getTypedAudiencesConfig ( ) ,
7150
- eventBuilder : eventBuilder ,
7151
7230
errorHandler : errorHandler ,
7152
7231
eventDispatcher : eventDispatcher ,
7153
7232
jsonSchemaValidator : jsonSchemaValidator ,
@@ -7279,7 +7358,6 @@ describe('lib/optimizely', function() {
7279
7358
optlyInstance = new Optimizely ( {
7280
7359
clientEngine : 'node-sdk' ,
7281
7360
datafile : testData . getTypedAudiencesConfig ( ) ,
7282
- eventBuilder : eventBuilder ,
7283
7361
errorHandler : errorHandler ,
7284
7362
eventDispatcher : eventDispatcher ,
7285
7363
jsonSchemaValidator : jsonSchemaValidator ,
@@ -7470,7 +7548,6 @@ describe('lib/optimizely', function() {
7470
7548
optlyInstance = new Optimizely ( {
7471
7549
clientEngine : 'node-sdk' ,
7472
7550
datafile : testData . getTestProjectConfig ( ) ,
7473
- eventBuilder : eventBuilder ,
7474
7551
errorHandler : errorHandler ,
7475
7552
eventDispatcher : eventDispatcher ,
7476
7553
jsonSchemaValidator : jsonSchemaValidator ,
@@ -7758,7 +7835,6 @@ describe('lib/optimizely', function() {
7758
7835
optlyInstance = new Optimizely ( {
7759
7836
clientEngine : 'node-sdk' ,
7760
7837
datafile : testData . getTestProjectConfig ( ) ,
7761
- eventBuilder : eventBuilder ,
7762
7838
errorHandler : errorHandler ,
7763
7839
eventDispatcher : eventDispatcher ,
7764
7840
jsonSchemaValidator : jsonSchemaValidator ,
@@ -7789,7 +7865,6 @@ describe('lib/optimizely', function() {
7789
7865
optlyInstance = new Optimizely ( {
7790
7866
clientEngine : 'node-sdk' ,
7791
7867
datafile : testData . getTestProjectConfig ( ) ,
7792
- eventBuilder : eventBuilder ,
7793
7868
errorHandler : errorHandler ,
7794
7869
eventDispatcher : eventDispatcher ,
7795
7870
jsonSchemaValidator : jsonSchemaValidator ,
@@ -8169,7 +8244,6 @@ describe('lib/optimizely', function() {
8169
8244
optlyInstance = new Optimizely ( {
8170
8245
clientEngine : 'node-sdk' ,
8171
8246
datafile : testData . getTestProjectConfig ( ) ,
8172
- eventBuilder : eventBuilder ,
8173
8247
errorHandler : {
8174
8248
handleError : function ( ) { } ,
8175
8249
} ,
0 commit comments