@@ -21,6 +21,8 @@ import { sprintf } from '../../utils/fns';
21
21
import AudienceEvaluator , { createAudienceEvaluator } from './index' ;
22
22
import * as conditionTreeEvaluator from '../condition_tree_evaluator' ;
23
23
import * as customAttributeConditionEvaluator from '../custom_attribute_condition_evaluator' ;
24
+ import { AUDIENCE_EVALUATION_RESULT , EVALUATING_AUDIENCE } from '../../log_messages' ;
25
+ // import { getEvaluator } from '../custom_attribute_condition_evaluator';
24
26
25
27
var buildLogMessageFromArgs = args => sprintf ( args [ 1 ] , ...args . splice ( 2 ) ) ;
26
28
var mockLogger = {
@@ -181,7 +183,6 @@ describe('lib/core/audience_evaluator', function() {
181
183
182
184
beforeEach ( function ( ) {
183
185
sandbox . stub ( conditionTreeEvaluator , 'evaluate' ) ;
184
- sandbox . stub ( customAttributeConditionEvaluator , 'evaluate' ) ;
185
186
} ) ;
186
187
187
188
afterEach ( function ( ) {
@@ -210,26 +211,40 @@ describe('lib/core/audience_evaluator', function() {
210
211
conditionTreeEvaluator . evaluate . callsFake ( function ( conditions , leafEvaluator ) {
211
212
return leafEvaluator ( conditions [ 1 ] ) ;
212
213
} ) ;
213
- customAttributeConditionEvaluator . evaluate . returns ( false ) ;
214
+
215
+ const mockCustomAttributeConditionEvaluator = sinon . stub ( ) . returns ( false ) ;
216
+
217
+ sinon . stub ( customAttributeConditionEvaluator , 'getEvaluator' ) . returns ( {
218
+ evaluate : mockCustomAttributeConditionEvaluator ,
219
+ } ) ;
220
+
221
+ const audienceEvaluator = createAudienceEvaluator ( ) ;
222
+
214
223
var userAttributes = { device_model : 'android' } ;
215
224
var user = getMockUserContext ( userAttributes ) ;
216
225
var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , user ) ;
217
- sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
226
+ sinon . assert . calledOnce ( mockCustomAttributeConditionEvaluator ) ;
218
227
sinon . assert . calledWithExactly (
219
- customAttributeConditionEvaluator . evaluate ,
228
+ mockCustomAttributeConditionEvaluator ,
220
229
iphoneUserAudience . conditions [ 1 ] ,
221
230
user ,
222
231
) ;
223
232
assert . isFalse ( result ) ;
233
+
234
+ customAttributeConditionEvaluator . getEvaluator . restore ( ) ;
224
235
} ) ;
225
236
} ) ;
226
237
227
238
describe ( 'Audience evaluation logging' , function ( ) {
228
239
var sandbox = sinon . sandbox . create ( ) ;
240
+ var mockCustomAttributeConditionEvaluator ;
229
241
230
242
beforeEach ( function ( ) {
243
+ mockCustomAttributeConditionEvaluator = sinon . stub ( ) ;
231
244
sandbox . stub ( conditionTreeEvaluator , 'evaluate' ) ;
232
- sandbox . stub ( customAttributeConditionEvaluator , 'evaluate' ) ;
245
+ sandbox . stub ( customAttributeConditionEvaluator , 'getEvaluator' ) . returns ( {
246
+ evaluate : mockCustomAttributeConditionEvaluator ,
247
+ } ) ;
233
248
} ) ;
234
249
235
250
afterEach ( function ( ) {
@@ -240,69 +255,110 @@ describe('lib/core/audience_evaluator', function() {
240
255
conditionTreeEvaluator . evaluate . callsFake ( function ( conditions , leafEvaluator ) {
241
256
return leafEvaluator ( conditions [ 1 ] ) ;
242
257
} ) ;
243
- customAttributeConditionEvaluator . evaluate . returns ( null ) ;
258
+
259
+ mockCustomAttributeConditionEvaluator . returns ( null ) ;
244
260
var userAttributes = { device_model : 5.5 } ;
245
261
var user = getMockUserContext ( userAttributes ) ;
262
+
263
+ const audienceEvaluator = createAudienceEvaluator ( { } , mockLogger ) ;
264
+
246
265
var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , user ) ;
247
- sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
266
+
267
+ sinon . assert . calledOnce ( mockCustomAttributeConditionEvaluator ) ;
248
268
sinon . assert . calledWithExactly (
249
- customAttributeConditionEvaluator . evaluate ,
269
+ mockCustomAttributeConditionEvaluator ,
250
270
iphoneUserAudience . conditions [ 1 ] ,
251
271
user
252
272
) ;
253
273
assert . isFalse ( result ) ;
254
- assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
255
- assert . strictEqual (
256
- buildLogMessageFromArgs ( mockLogger . log . args [ 0 ] ) ,
257
- 'AUDIENCE_EVALUATOR: Starting to evaluate audience "1" with conditions: ["and",{"name":"device_model","value":"iphone","type":"custom_attribute"}].'
258
- ) ;
259
- assert . strictEqual ( buildLogMessageFromArgs ( mockLogger . log . args [ 1 ] ) , 'AUDIENCE_EVALUATOR: Audience "1" evaluated to UNKNOWN.' ) ;
274
+ assert . strictEqual ( 2 , mockLogger . debug . callCount ) ;
275
+
276
+ sinon . assert . calledWithExactly (
277
+ mockLogger . debug ,
278
+ EVALUATING_AUDIENCE ,
279
+ '1' ,
280
+ JSON . stringify ( [ 'and' , iphoneUserAudience . conditions [ 1 ] ] )
281
+ )
282
+
283
+ sinon . assert . calledWithExactly (
284
+ mockLogger . debug ,
285
+ AUDIENCE_EVALUATION_RESULT ,
286
+ '1' ,
287
+ 'UNKNOWN'
288
+ )
260
289
} ) ;
261
290
262
291
it ( 'logs correctly when conditionTreeEvaluator.evaluate returns true' , function ( ) {
263
292
conditionTreeEvaluator . evaluate . callsFake ( function ( conditions , leafEvaluator ) {
264
293
return leafEvaluator ( conditions [ 1 ] ) ;
265
294
} ) ;
266
- customAttributeConditionEvaluator . evaluate . returns ( true ) ;
295
+
296
+ mockCustomAttributeConditionEvaluator . returns ( true ) ;
297
+
267
298
var userAttributes = { device_model : 'iphone' } ;
268
299
var user = getMockUserContext ( userAttributes ) ;
300
+
301
+ const audienceEvaluator = createAudienceEvaluator ( { } , mockLogger ) ;
302
+
269
303
var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , user ) ;
270
- sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
304
+ sinon . assert . calledOnce ( mockCustomAttributeConditionEvaluator ) ;
271
305
sinon . assert . calledWithExactly (
272
- customAttributeConditionEvaluator . evaluate ,
306
+ mockCustomAttributeConditionEvaluator ,
273
307
iphoneUserAudience . conditions [ 1 ] ,
274
308
user ,
275
309
) ;
276
310
assert . isTrue ( result ) ;
277
- assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
278
- assert . strictEqual (
279
- buildLogMessageFromArgs ( mockLogger . log . args [ 0 ] ) ,
280
- 'AUDIENCE_EVALUATOR: Starting to evaluate audience "1" with conditions: ["and",{"name":"device_model","value":"iphone","type":"custom_attribute"}].'
281
- ) ;
282
- assert . strictEqual ( buildLogMessageFromArgs ( mockLogger . log . args [ 1 ] ) , 'AUDIENCE_EVALUATOR: Audience "1" evaluated to TRUE.' ) ;
311
+ assert . strictEqual ( 2 , mockLogger . debug . callCount ) ;
312
+ sinon . assert . calledWithExactly (
313
+ mockLogger . debug ,
314
+ EVALUATING_AUDIENCE ,
315
+ '1' ,
316
+ JSON . stringify ( [ 'and' , iphoneUserAudience . conditions [ 1 ] ] )
317
+ )
318
+
319
+ sinon . assert . calledWithExactly (
320
+ mockLogger . debug ,
321
+ AUDIENCE_EVALUATION_RESULT ,
322
+ '1' ,
323
+ 'TRUE'
324
+ )
283
325
} ) ;
284
326
285
327
it ( 'logs correctly when conditionTreeEvaluator.evaluate returns false' , function ( ) {
286
328
conditionTreeEvaluator . evaluate . callsFake ( function ( conditions , leafEvaluator ) {
287
329
return leafEvaluator ( conditions [ 1 ] ) ;
288
330
} ) ;
289
- customAttributeConditionEvaluator . evaluate . returns ( false ) ;
331
+
332
+ mockCustomAttributeConditionEvaluator . returns ( false ) ;
333
+
290
334
var userAttributes = { device_model : 'android' } ;
291
335
var user = getMockUserContext ( userAttributes ) ;
336
+
337
+ const audienceEvaluator = createAudienceEvaluator ( { } , mockLogger ) ;
338
+
292
339
var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , user ) ;
293
- sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
340
+ sinon . assert . calledOnce ( mockCustomAttributeConditionEvaluator ) ;
294
341
sinon . assert . calledWithExactly (
295
- customAttributeConditionEvaluator . evaluate ,
342
+ mockCustomAttributeConditionEvaluator ,
296
343
iphoneUserAudience . conditions [ 1 ] ,
297
344
user ,
298
345
) ;
299
346
assert . isFalse ( result ) ;
300
- assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
301
- assert . strictEqual (
302
- buildLogMessageFromArgs ( mockLogger . log . args [ 0 ] ) ,
303
- 'AUDIENCE_EVALUATOR: Starting to evaluate audience "1" with conditions: ["and",{"name":"device_model","value":"iphone","type":"custom_attribute"}].'
304
- ) ;
305
- assert . strictEqual ( buildLogMessageFromArgs ( mockLogger . log . args [ 1 ] ) , 'AUDIENCE_EVALUATOR: Audience "1" evaluated to FALSE.' ) ;
347
+ assert . strictEqual ( 2 , mockLogger . debug . callCount ) ;
348
+
349
+ sinon . assert . calledWithExactly (
350
+ mockLogger . debug ,
351
+ EVALUATING_AUDIENCE ,
352
+ '1' ,
353
+ JSON . stringify ( [ 'and' , iphoneUserAudience . conditions [ 1 ] ] )
354
+ )
355
+
356
+ sinon . assert . calledWithExactly (
357
+ mockLogger . debug ,
358
+ AUDIENCE_EVALUATION_RESULT ,
359
+ '1' ,
360
+ 'FALSE'
361
+ )
306
362
} ) ;
307
363
} ) ;
308
364
} ) ;
0 commit comments