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' ) ;
22
21
var assert = chai . assert ;
23
- var logger = require ( '../../plugins/logger' ) ;
22
+ var logging = require ( '@optimizely/js-sdk-logging' ) ;
23
+ var mockLogger = logging . getLogger ( ) ;
24
24
var enums = require ( '../../utils/enums' ) ;
25
25
var LOG_LEVEL = enums . LOG_LEVEL ;
26
26
@@ -53,11 +53,14 @@ var audiencesById = {
53
53
} ;
54
54
55
55
describe ( 'lib/core/audience_evaluator' , function ( ) {
56
+ var audienceEvaluator ;
57
+ beforeEach ( function ( ) {
58
+ audienceEvaluator = new AudienceEvaluator ( ) ;
59
+ } ) ;
60
+
56
61
describe ( 'APIs' , function ( ) {
57
62
describe ( 'evaluate' , function ( ) {
58
- var mockLogger = logger . createLogger ( { logLevel : LOG_LEVEL . INFO } ) ;
59
-
60
- beforeEach ( function ( ) {
63
+ beforeEach ( function ( ) {
61
64
sinon . stub ( mockLogger , 'log' ) ;
62
65
} ) ;
63
66
@@ -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,22 +109,21 @@ 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 ( ) {
119
122
it ( 'should return true if any of the audiences in an "OR" condition pass' , function ( ) {
120
123
var result = audienceEvaluator . evaluate (
121
124
[ 'or' , '0' , '1' ] ,
122
125
audiencesById ,
123
- { browser_type : 'chrome' } ,
124
- mockLogger
126
+ { browser_type : 'chrome' }
125
127
) ;
126
128
assert . isTrue ( result ) ;
127
129
} ) ;
@@ -130,8 +132,7 @@ describe('lib/core/audience_evaluator', function() {
130
132
var result = audienceEvaluator . evaluate (
131
133
[ 'and' , '0' , '1' ] ,
132
134
audiencesById ,
133
- { browser_type : 'chrome' , device_model : 'iphone' } ,
134
- mockLogger
135
+ { browser_type : 'chrome' , device_model : 'iphone' }
135
136
) ;
136
137
assert . isTrue ( result ) ;
137
138
} ) ;
@@ -140,8 +141,7 @@ describe('lib/core/audience_evaluator', function() {
140
141
var result = audienceEvaluator . evaluate (
141
142
[ 'not' , '1' ] ,
142
143
audiencesById ,
143
- { device_model : 'android' } ,
144
- mockLogger
144
+ { device_model : 'android' }
145
145
) ;
146
146
assert . isTrue ( result ) ;
147
147
} ) ;
@@ -165,8 +165,7 @@ describe('lib/core/audience_evaluator', function() {
165
165
var result = audienceEvaluator . evaluate (
166
166
[ 'or' , '0' , '1' ] ,
167
167
audiencesById ,
168
- { browser_type : 'chrome' } ,
169
- mockLogger
168
+ { browser_type : 'chrome' }
170
169
) ;
171
170
assert . isTrue ( result ) ;
172
171
} ) ;
@@ -176,8 +175,7 @@ describe('lib/core/audience_evaluator', function() {
176
175
var result = audienceEvaluator . evaluate (
177
176
[ 'or' , '0' , '1' ] ,
178
177
audiencesById ,
179
- { browser_type : 'safari' } ,
180
- mockLogger
178
+ { browser_type : 'safari' }
181
179
) ;
182
180
assert . isFalse ( result ) ;
183
181
} ) ;
@@ -187,8 +185,7 @@ describe('lib/core/audience_evaluator', function() {
187
185
var result = audienceEvaluator . evaluate (
188
186
[ 'or' , '0' , '1' ] ,
189
187
audiencesById ,
190
- { state : 'California' } ,
191
- mockLogger
188
+ { state : 'California' }
192
189
) ;
193
190
assert . isFalse ( result ) ;
194
191
} ) ;
@@ -199,8 +196,9 @@ describe('lib/core/audience_evaluator', function() {
199
196
} ) ;
200
197
customAttributeConditionEvaluator . evaluate . returns ( false ) ;
201
198
var userAttributes = { device_model : 'android' } ;
202
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
199
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
203
200
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
201
+ console . log ( 'args: ' , customAttributeConditionEvaluator . evaluate . firstCall . args )
204
202
sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
205
203
assert . isFalse ( result ) ;
206
204
} ) ;
@@ -224,7 +222,7 @@ describe('lib/core/audience_evaluator', function() {
224
222
} ) ;
225
223
customAttributeConditionEvaluator . evaluate . returns ( null ) ;
226
224
var userAttributes = { device_model : 5.5 } ;
227
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
225
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
228
226
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
229
227
sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
230
228
assert . isFalse ( result ) ;
@@ -239,7 +237,7 @@ describe('lib/core/audience_evaluator', function() {
239
237
} ) ;
240
238
customAttributeConditionEvaluator . evaluate . returns ( true ) ;
241
239
var userAttributes = { device_model : 'iphone' } ;
242
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
240
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
243
241
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
244
242
sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
245
243
assert . isTrue ( result ) ;
@@ -254,8 +252,9 @@ describe('lib/core/audience_evaluator', function() {
254
252
} ) ;
255
253
customAttributeConditionEvaluator . evaluate . returns ( false ) ;
256
254
var userAttributes = { device_model : 'android' } ;
257
- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
255
+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
258
256
sinon . assert . calledOnce ( customAttributeConditionEvaluator . evaluate ) ;
257
+ console . log ( 'args: ' , customAttributeConditionEvaluator . evaluate . firstCall . args )
259
258
sinon . assert . calledWithExactly ( customAttributeConditionEvaluator . evaluate , iphoneUserAudience . conditions [ 1 ] , userAttributes , mockLogger ) ;
260
259
assert . isFalse ( result ) ;
261
260
assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
0 commit comments