@@ -28,7 +28,7 @@ import { getMockLogger } from '../../tests/mock/mock_logger';
2828import { getTestProjectConfig , getTestProjectConfigWithFeatures } from '../../tests/test_data' ;
2929import { CONTROL_ATTRIBUTES , DECISION_SOURCES } from '../../utils/enums' ;
3030import { Value } from '../../utils/promise/operation_value' ;
31- import { bucket } from '../bucketer' ;
31+ import { bucket } from '../bucketer/index ' ;
3232import {
3333 AUDIENCE_EVALUATION_RESULT_COMBINED ,
3434 EVALUATING_AUDIENCES_COMBINED ,
@@ -98,11 +98,7 @@ const getDecisionService = (opt: DecisionServiceInstanceOpt = {}): DecisionServi
9898 } ;
9999} ;
100100
101- const mockBucket : MockInstance < typeof bucket > = vi . hoisted ( ( ) => vi . fn ( ) ) ;
102-
103- vi . mock ( '../bucketer' , ( ) => ( {
104- bucket : mockBucket ,
105- } ) ) ;
101+ vi . mock ( '../bucketer/index' , { spy : true } ) ;
106102
107103const cloneDeep = ( d : any ) => JSON . parse ( JSON . stringify ( d ) ) ;
108104
@@ -165,6 +161,7 @@ const getHoldoutTestDatafile = () => {
165161} ;
166162
167163const verifyBucketCall = (
164+ mockBucket : MockInstance < typeof bucket > ,
168165 call : number ,
169166 projectConfig : ProjectConfig ,
170167 experiment : Experiment ,
@@ -202,6 +199,8 @@ const verifyBucketCall = (
202199} ;
203200
204201describe ( 'DecisionService' , ( ) => {
202+ const mockBucket : MockInstance < typeof bucket > = bucket as any ;
203+
205204 describe ( 'getVariation' , function ( ) {
206205 beforeEach ( ( ) => {
207206 mockBucket . mockClear ( ) ;
@@ -231,7 +230,7 @@ describe('DecisionService', () => {
231230 expect ( variation . result ) . toBe ( 'control' ) ;
232231
233232 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
234- verifyBucketCall ( 0 , config , experiment , user ) ;
233+ verifyBucketCall ( mockBucket , 0 , config , experiment , user ) ;
235234 } ) ;
236235
237236 it ( 'should use $opt_bucketing_id attribute as bucketing id if provided' , ( ) => {
@@ -261,7 +260,7 @@ describe('DecisionService', () => {
261260 expect ( variation . result ) . toBe ( 'control' ) ;
262261
263262 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
264- verifyBucketCall ( 0 , config , experiment , user , true ) ;
263+ verifyBucketCall ( mockBucket , 0 , config , experiment , user , true ) ;
265264 } ) ;
266265
267266 it ( 'should return the whitelisted variation if the user is whitelisted' , function ( ) {
@@ -482,7 +481,7 @@ describe('DecisionService', () => {
482481 expect ( userProfileService ?. lookup ) . toHaveBeenCalledWith ( 'decision_service_user' ) ;
483482
484483 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
485- verifyBucketCall ( 0 , config , experiment , user ) ;
484+ verifyBucketCall ( mockBucket , 0 , config , experiment , user ) ;
486485
487486 expect ( userProfileService ?. save ) . toHaveBeenCalledTimes ( 1 ) ;
488487 expect ( userProfileService ?. save ) . toHaveBeenCalledWith ( {
@@ -520,7 +519,7 @@ describe('DecisionService', () => {
520519 expect ( userProfileService ?. lookup ) . toHaveBeenCalledWith ( 'decision_service_user' ) ;
521520
522521 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
523- verifyBucketCall ( 0 , config , experiment , user ) ;
522+ verifyBucketCall ( mockBucket , 0 , config , experiment , user ) ;
524523
525524 expect ( userProfileService ?. save ) . toHaveBeenCalledTimes ( 1 ) ;
526525 expect ( userProfileService ?. save ) . toHaveBeenCalledWith ( {
@@ -565,7 +564,7 @@ describe('DecisionService', () => {
565564 expect ( userProfileService ?. lookup ) . toHaveBeenCalledWith ( 'decision_service_user' ) ;
566565
567566 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
568- verifyBucketCall ( 0 , config , experiment , user ) ;
567+ verifyBucketCall ( mockBucket , 0 , config , experiment , user ) ;
569568
570569 expect ( logger ?. debug ) . toHaveBeenCalledWith ( USER_HAS_NO_FORCED_VARIATION , 'decision_service_user' ) ;
571570 expect ( logger ?. info ) . toHaveBeenCalledWith ( SAVED_VARIATION_NOT_FOUND , 'decision_service_user' , 'not valid variation' , 'testExperiment' ) ;
@@ -609,7 +608,7 @@ describe('DecisionService', () => {
609608 expect ( userProfileService ?. lookup ) . toHaveBeenCalledWith ( 'decision_service_user' ) ;
610609
611610 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
612- verifyBucketCall ( 0 , config , experiment , user ) ;
611+ verifyBucketCall ( mockBucket , 0 , config , experiment , user ) ;
613612
614613 expect ( userProfileService ?. save ) . toHaveBeenCalledTimes ( 1 ) ;
615614 expect ( userProfileService ?. save ) . toHaveBeenCalledWith ( {
@@ -650,7 +649,7 @@ describe('DecisionService', () => {
650649 expect ( userProfileService ?. lookup ) . toHaveBeenCalledWith ( 'decision_service_user' ) ;
651650
652651 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
653- verifyBucketCall ( 0 , config , experiment , user ) ;
652+ verifyBucketCall ( mockBucket , 0 , config , experiment , user ) ;
654653
655654 expect ( logger ?. debug ) . toHaveBeenCalledWith ( USER_HAS_NO_FORCED_VARIATION , 'decision_service_user' ) ;
656655 expect ( logger ?. error ) . toHaveBeenCalledWith ( USER_PROFILE_LOOKUP_ERROR , 'decision_service_user' , 'I am an error' ) ;
@@ -694,7 +693,7 @@ describe('DecisionService', () => {
694693 expect ( userProfileService ?. lookup ) . toHaveBeenCalledWith ( 'decision_service_user' ) ;
695694
696695 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
697- verifyBucketCall ( 0 , config , experiment , user ) ;
696+ verifyBucketCall ( mockBucket , 0 , config , experiment , user ) ;
698697
699698 expect ( userProfileService ?. save ) . toHaveBeenCalledTimes ( 1 ) ;
700699 expect ( userProfileService ?. save ) . toHaveBeenCalledWith ( {
@@ -1080,7 +1079,7 @@ describe('DecisionService', () => {
10801079 'sync' , config , config . experimentKeyMap [ 'exp_3' ] , user , expect . anything ( ) , expect . anything ( ) ) ;
10811080
10821081 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
1083- verifyBucketCall ( 0 , config , config . experimentIdMap [ '3002' ] , user ) ;
1082+ verifyBucketCall ( mockBucket , 0 , config , config . experimentIdMap [ '3002' ] , user ) ;
10841083 } ) ;
10851084
10861085 it ( 'should return variation from the target delivery and use $opt_bucketing_id attribute as bucketing id' , ( ) => {
@@ -1135,7 +1134,7 @@ describe('DecisionService', () => {
11351134 'sync' , config , config . experimentKeyMap [ 'exp_3' ] , user , expect . anything ( ) , expect . anything ( ) ) ;
11361135
11371136 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
1138- verifyBucketCall ( 0 , config , config . experimentIdMap [ '3002' ] , user , true ) ;
1137+ verifyBucketCall ( mockBucket , 0 , config , config . experimentIdMap [ '3002' ] , user , true ) ;
11391138 } ) ;
11401139
11411140 it ( 'should skip to everyone else targeting rule if the user is not bucketed \
@@ -1190,8 +1189,8 @@ describe('DecisionService', () => {
11901189 'sync' , config , config . experimentKeyMap [ 'exp_3' ] , user , expect . anything ( ) , expect . anything ( ) ) ;
11911190
11921191 expect ( mockBucket ) . toHaveBeenCalledTimes ( 2 ) ;
1193- verifyBucketCall ( 0 , config , config . experimentIdMap [ '3002' ] , user ) ;
1194- verifyBucketCall ( 1 , config , config . experimentIdMap [ 'default-rollout-id' ] , user ) ;
1192+ verifyBucketCall ( mockBucket , 0 , config , config . experimentIdMap [ '3002' ] , user ) ;
1193+ verifyBucketCall ( mockBucket , 1 , config , config . experimentIdMap [ 'default-rollout-id' ] , user ) ;
11951194 } ) ;
11961195 } ) ;
11971196
@@ -1289,7 +1288,7 @@ describe('DecisionService', () => {
12891288 'sync' , config , config . experimentKeyMap [ 'exp_3' ] , user , expect . anything ( ) , expect . anything ( ) ) ;
12901289
12911290 expect ( mockBucket ) . toHaveBeenCalledTimes ( 1 ) ;
1292- verifyBucketCall ( 0 , config , config . experimentIdMap [ 'default-rollout-id' ] , user ) ;
1291+ verifyBucketCall ( mockBucket , 0 , config , config . experimentIdMap [ 'default-rollout-id' ] , user ) ;
12931292 } ) ;
12941293
12951294 it ( 'should return null if no variation is found for any experiment, targeted delivery, or everyone else targeting rule' , ( ) => {
@@ -1413,7 +1412,7 @@ describe('DecisionService', () => {
14131412 decisionSource : DECISION_SOURCES . ROLLOUT ,
14141413 } ) ;
14151414
1416- verifyBucketCall ( 0 , config , config . experimentKeyMap [ 'exp_3' ] , user ) ;
1415+ verifyBucketCall ( mockBucket , 0 , config , config . experimentKeyMap [ 'exp_3' ] , user ) ;
14171416 expect ( cmabService . getDecision ) . not . toHaveBeenCalled ( ) ;
14181417 } ) ;
14191418
@@ -1459,7 +1458,7 @@ describe('DecisionService', () => {
14591458 decisionSource : DECISION_SOURCES . FEATURE_TEST ,
14601459 } ) ;
14611460
1462- verifyBucketCall ( 0 , config , config . experimentKeyMap [ 'exp_3' ] , user ) ;
1461+ verifyBucketCall ( mockBucket , 0 , config , config . experimentKeyMap [ 'exp_3' ] , user ) ;
14631462
14641463 expect ( cmabService . getDecision ) . toHaveBeenCalledTimes ( 1 ) ;
14651464 expect ( cmabService . getDecision ) . toHaveBeenCalledWith (
@@ -1937,11 +1936,6 @@ describe('DecisionService', () => {
19371936
19381937
19391938 describe ( 'holdout' , ( ) => {
1940- beforeEach ( async ( ) => {
1941- const actualBucketModule = ( await vi . importActual ( '../bucketer' ) ) as { bucket : typeof bucket } ;
1942- mockBucket . mockImplementation ( actualBucketModule . bucket ) ;
1943- } ) ;
1944-
19451939 it ( 'should return holdout variation when user is bucketed into running holdout' , async ( ) => {
19461940 const { decisionService } = getDecisionService ( ) ;
19471941 const config = createProjectConfig ( getHoldoutTestDatafile ( ) ) ;
@@ -2332,9 +2326,9 @@ describe('DecisionService', () => {
23322326 } ) ;
23332327
23342328 expect ( mockBucket ) . toHaveBeenCalledTimes ( 3 ) ;
2335- verifyBucketCall ( 0 , config , config . experimentKeyMap [ 'exp_1' ] , user ) ;
2336- verifyBucketCall ( 1 , config , config . experimentKeyMap [ 'exp_2' ] , user ) ;
2337- verifyBucketCall ( 2 , config , config . experimentKeyMap [ 'delivery_1' ] , user ) ;
2329+ verifyBucketCall ( mockBucket , 0 , config , config . experimentKeyMap [ 'exp_1' ] , user ) ;
2330+ verifyBucketCall ( mockBucket , 1 , config , config . experimentKeyMap [ 'exp_2' ] , user ) ;
2331+ verifyBucketCall ( mockBucket , 2 , config , config . experimentKeyMap [ 'delivery_1' ] , user ) ;
23382332
23392333 expect ( cmabService . getDecision ) . not . toHaveBeenCalled ( ) ;
23402334 } ) ;
0 commit comments