13
13
* See the License for the specific language governing permissions and
14
14
* limitations under the License.
15
15
*/
16
- var audienceEvaluator = require ( './' ) ;
16
+ var AudienceEvaluator = require ( './' ) ;
17
17
var chai = require ( 'chai' ) ;
18
- var sprintf = require ( '@optimizely/js-sdk-utils' ) . sprintf ;
19
18
var conditionTreeEvaluator = require ( '../condition_tree_evaluator' ) ;
20
19
var customAttributeConditionEvaluator = require ( '../custom_attribute_condition_evaluator' ) ;
21
20
var sinon = require ( 'sinon' ) ;
@@ -53,10 +52,14 @@ var audiencesById = {
53
52
} ;
54
53
55
54
describe ( 'lib/core/audience_evaluator' , function ( ) {
55
+ var audienceEvaluator ;
56
+ var mockLogger = logger . createLogger ( { logLevel : LOG_LEVEL . INFO } ) ;
57
+ beforeEach ( function ( ) {
58
+ audienceEvaluator = new AudienceEvaluator ( mockLogger ) ;
59
+ } ) ;
60
+
56
61
describe ( 'APIs' , function ( ) {
57
62
describe ( 'evaluate' , function ( ) {
58
- var mockLogger = logger . createLogger ( { logLevel : LOG_LEVEL . INFO } ) ;
59
-
60
63
beforeEach ( function ( ) {
61
64
sinon . stub ( mockLogger , 'log' ) ;
62
65
} ) ;
@@ -66,11 +69,11 @@ describe('lib/core/audience_evaluator', function() {
66
69
} ) ;
67
70
68
71
it ( 'should return true if there are no audiences' , function ( ) {
69
- assert . isTrue ( audienceEvaluator . evaluate ( [ ] , audiencesById , { } , mockLogger ) ) ;
72
+ assert . isTrue ( audienceEvaluator . evaluate ( [ ] , audiencesById , { } ) ) ;
70
73
} ) ;
71
74
72
75
it ( 'should return false if there are audiences but no attributes' , function ( ) {
73
- assert . isFalse ( audienceEvaluator . evaluate ( [ '0' ] , audiencesById , { } , mockLogger ) ) ;
76
+ assert . isFalse ( audienceEvaluator . evaluate ( [ '0' ] , audiencesById , { } ) ) ;
74
77
} ) ;
75
78
76
79
it ( 'should return true if any of the audience conditions are met' , function ( ) {
@@ -87,9 +90,9 @@ describe('lib/core/audience_evaluator', function() {
87
90
'device_model' : 'iphone' ,
88
91
} ;
89
92
90
- assert . isTrue ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , iphoneUsers , mockLogger ) ) ;
91
- assert . isTrue ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , chromeUsers , mockLogger ) ) ;
92
- assert . isTrue ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , iphoneChromeUsers , mockLogger ) ) ;
93
+ assert . isTrue ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , iphoneUsers ) ) ;
94
+ assert . isTrue ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , chromeUsers ) ) ;
95
+ assert . isTrue ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , iphoneChromeUsers ) ) ;
93
96
} ) ;
94
97
95
98
it ( 'should return false if none of the audience conditions are met' , function ( ) {
@@ -106,13 +109,13 @@ describe('lib/core/audience_evaluator', function() {
106
109
'device_model' : 'nexus5' ,
107
110
} ;
108
111
109
- assert . isFalse ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , nexusUsers , mockLogger ) ) ;
110
- assert . isFalse ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , safariUsers , mockLogger ) ) ;
111
- assert . isFalse ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , nexusSafariUsers , mockLogger ) ) ;
112
+ assert . isFalse ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , nexusUsers ) ) ;
113
+ assert . isFalse ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , safariUsers ) ) ;
114
+ assert . isFalse ( audienceEvaluator . evaluate ( [ '0' , '1' ] , audiencesById , nexusSafariUsers ) ) ;
112
115
} ) ;
113
116
114
117
it ( 'should return true if no attributes are passed and the audience conditions evaluate to true in the absence of attributes' , function ( ) {
115
- assert . isTrue ( audienceEvaluator . evaluate ( [ '2' ] , audiencesById , null , mockLogger ) ) ;
118
+ assert . isTrue ( audienceEvaluator . evaluate ( [ '2' ] , audiencesById , null ) ) ;
116
119
} ) ;
117
120
118
121
describe ( 'complex audience conditions' , function ( ) {
@@ -199,9 +202,9 @@ describe('lib/core/audience_evaluator', function() {
199
202
} ) ;
200
203
customAttributeConditionEvaluator . evaluate . returns ( false ) ;
201
204
var userAttributes = { device_model : 'android' } ;
202
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
205
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
203
206
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
204
- sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
207
+ sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes ) ;
205
208
assert . isFalse ( result ) ;
206
209
} ) ;
207
210
} ) ;
@@ -224,9 +227,9 @@ describe('lib/core/audience_evaluator', function() {
224
227
} ) ;
225
228
customAttributeConditionEvaluator . evaluate . returns ( null ) ;
226
229
var userAttributes = { device_model : 5.5 } ;
227
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
230
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
228
231
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
229
- sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
232
+ sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes ) ;
230
233
assert . isFalse ( result ) ;
231
234
assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
232
235
assert . strictEqual ( mockLogger . log . args [ 0 ] [ 1 ] , 'AUDIENCE_EVALUATOR: Starting to evaluate audience "1" with conditions: ["and",{"name":"device_model","value":"iphone","type":"custom_attribute"}].' ) ;
@@ -239,9 +242,9 @@ describe('lib/core/audience_evaluator', function() {
239
242
} ) ;
240
243
customAttributeConditionEvaluator . evaluate . returns ( true ) ;
241
244
var userAttributes = { device_model : 'iphone' } ;
242
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
245
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
243
246
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
244
- sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
247
+ sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes ) ;
245
248
assert . isTrue ( result ) ;
246
249
assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
247
250
assert . strictEqual ( mockLogger . log . args [ 0 ] [ 1 ] , 'AUDIENCE_EVALUATOR: Starting to evaluate audience "1" with conditions: ["and",{"name":"device_model","value":"iphone","type":"custom_attribute"}].' ) ;
@@ -254,9 +257,9 @@ describe('lib/core/audience_evaluator', function() {
254
257
} ) ;
255
258
customAttributeConditionEvaluator . evaluate . returns ( false ) ;
256
259
var userAttributes = { device_model : 'android' } ;
257
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
260
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
258
261
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
259
- sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
262
+ sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes ) ;
260
263
assert . isFalse ( result ) ;
261
264
assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
262
265
assert . strictEqual ( mockLogger . log . args [ 0 ] [ 1 ] , 'AUDIENCE_EVALUATOR: Starting to evaluate audience "1" with conditions: ["and",{"name":"device_model","value":"iphone","type":"custom_attribute"}].' ) ;
0 commit comments