1313 * See the License for the specific language governing permissions and
1414 * limitations under the License.
1515 */
16- var audienceEvaluator = require ( './' ) ;
16+ var AudienceEvaluator = require ( './' ) ;
1717var chai = require ( 'chai' ) ;
18- var sprintf = require ( '@optimizely/js-sdk-utils' ) . sprintf ;
1918var conditionTreeEvaluator = require ( '../condition_tree_evaluator' ) ;
2019var customAttributeConditionEvaluator = require ( '../custom_attribute_condition_evaluator' ) ;
2120var sinon = require ( 'sinon' ) ;
@@ -53,10 +52,14 @@ var audiencesById = {
5352} ;
5453
5554describe ( '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+
5661 describe ( 'APIs' , function ( ) {
5762 describe ( 'evaluate' , function ( ) {
58- var mockLogger = logger . createLogger ( { logLevel : LOG_LEVEL . INFO } ) ;
59-
6063 beforeEach ( function ( ) {
6164 sinon . stub ( mockLogger , 'log' ) ;
6265 } ) ;
@@ -66,11 +69,11 @@ describe('lib/core/audience_evaluator', function() {
6669 } ) ;
6770
6871 it ( 'should return true if there are no audiences' , function ( ) {
69- assert . isTrue ( audienceEvaluator . evaluate ( [ ] , audiencesById , { } , mockLogger ) ) ;
72+ assert . isTrue ( audienceEvaluator . evaluate ( [ ] , audiencesById , { } ) ) ;
7073 } ) ;
7174
7275 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 , { } ) ) ;
7477 } ) ;
7578
7679 it ( 'should return true if any of the audience conditions are met' , function ( ) {
@@ -87,9 +90,9 @@ describe('lib/core/audience_evaluator', function() {
8790 'device_model' : 'iphone' ,
8891 } ;
8992
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 ) ) ;
9396 } ) ;
9497
9598 it ( 'should return false if none of the audience conditions are met' , function ( ) {
@@ -106,13 +109,13 @@ describe('lib/core/audience_evaluator', function() {
106109 'device_model' : 'nexus5' ,
107110 } ;
108111
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 ) ) ;
112115 } ) ;
113116
114117 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 ) ) ;
116119 } ) ;
117120
118121 describe ( 'complex audience conditions' , function ( ) {
@@ -199,9 +202,9 @@ describe('lib/core/audience_evaluator', function() {
199202 } ) ;
200203 customAttributeConditionEvaluator . evaluate . returns ( false ) ;
201204 var userAttributes = { device_model : 'android' } ;
202- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
205+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
203206 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 ) ;
205208 assert . isFalse ( result ) ;
206209 } ) ;
207210 } ) ;
@@ -224,9 +227,9 @@ describe('lib/core/audience_evaluator', function() {
224227 } ) ;
225228 customAttributeConditionEvaluator . evaluate . returns ( null ) ;
226229 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 ) ;
228231 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 ) ;
230233 assert . isFalse ( result ) ;
231234 assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
232235 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() {
239242 } ) ;
240243 customAttributeConditionEvaluator . evaluate . returns ( true ) ;
241244 var userAttributes = { device_model : 'iphone' } ;
242- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
245+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
243246 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 ) ;
245248 assert . isTrue ( result ) ;
246249 assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
247250 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() {
254257 } ) ;
255258 customAttributeConditionEvaluator . evaluate . returns ( false ) ;
256259 var userAttributes = { device_model : 'android' } ;
257- var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes , mockLogger ) ;
260+ var result = audienceEvaluator . evaluate ( [ 'or' , '1' ] , audiencesById , userAttributes ) ;
258261 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 ) ;
260263 assert . isFalse ( result ) ;
261264 assert . strictEqual ( 2 , mockLogger . log . callCount ) ;
262265 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