1313 * See the License for the specific language governing permissions and
1414 * limitations under the License.
1515 */
16- import { describe , it , expect , beforeEach , vi , afterEach } from 'vitest' ;
16+ import { describe , it , expect , beforeEach , vi , afterEach , MockInstance } from 'vitest' ;
1717import { sprintf } from '../../utils/fns' ;
1818import projectConfig , { ProjectConfig } from '../../project_config/project_config' ;
1919import { getTestProjectConfig } from '../../tests/test_data' ;
2020import { INVALID_BUCKETING_ID , INVALID_GROUP_ID } from 'error_message' ;
2121import * as bucketer from './' ;
2222import * as bucketValueGenerator from './bucket_value_generator' ;
2323
24+ vi . mock ( './bucket_value_generator' , { spy : true } ) ;
25+
2426import {
2527 USER_BUCKETED_INTO_EXPERIMENT_IN_GROUP ,
2628 USER_NOT_BUCKETED_INTO_EXPERIMENT_IN_GROUP ,
@@ -65,8 +67,12 @@ describe('excluding groups', () => {
6567 let configObj ;
6668 const mockLogger = getMockLogger ( ) ;
6769 let bucketerParams : BucketerParams ;
70+ const mockGenerateBucketValue = bucketValueGenerator . generateBucketValue as unknown as
71+ MockInstance < typeof bucketValueGenerator . generateBucketValue > ;
6872
6973 beforeEach ( ( ) => {
74+ vi . clearAllMocks ( ) ;
75+
7076 setLogSpy ( mockLogger ) ;
7177 configObj = projectConfig . createProjectConfig ( cloneDeep ( testData ) ) ;
7278
@@ -83,8 +89,7 @@ describe('excluding groups', () => {
8389 validateEntity : true ,
8490 } ;
8591
86- vi . spyOn ( bucketValueGenerator , 'generateBucketValue' )
87- . mockReturnValueOnce ( 50 )
92+ mockGenerateBucketValue . mockReturnValueOnce ( 50 )
8893 . mockReturnValueOnce ( 50000 ) ;
8994 } ) ;
9095
@@ -113,8 +118,12 @@ describe('including groups: random', () => {
113118 let configObj : ProjectConfig ;
114119 const mockLogger = getMockLogger ( ) ;
115120 let bucketerParams : BucketerParams ;
121+ const mockGenerateBucketValue = bucketValueGenerator . generateBucketValue as unknown as
122+ MockInstance < typeof bucketValueGenerator . generateBucketValue > ;
116123
117124 beforeEach ( ( ) => {
125+ vi . clearAllMocks ( ) ;
126+
118127 setLogSpy ( mockLogger ) ;
119128 configObj = projectConfig . createProjectConfig ( cloneDeep ( testData ) ) ;
120129 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -137,7 +146,7 @@ describe('including groups: random', () => {
137146 } ) ;
138147
139148 it ( 'should return decision response with the proper variation for a user in a grouped experiment' , ( ) => {
140- vi . spyOn ( bucketValueGenerator , 'generateBucketValue' )
149+ mockGenerateBucketValue
141150 . mockReturnValueOnce ( 50 )
142151 . mockReturnValueOnce ( 50 ) ;
143152
@@ -156,7 +165,7 @@ describe('including groups: random', () => {
156165 } ) ;
157166
158167 it ( 'should return decision response with variation null when a user is bucketed into a different grouped experiment than the one speicfied' , ( ) => {
159- vi . spyOn ( bucketValueGenerator , 'generateBucketValue' ) . mockReturnValue ( 5000 ) ;
168+ mockGenerateBucketValue . mockReturnValue ( 5000 ) ;
160169
161170 const decisionResponse = bucketer . bucket ( bucketerParams ) ;
162171
@@ -173,7 +182,7 @@ describe('including groups: random', () => {
173182 } ) ;
174183
175184 it ( 'should return decision response with variation null when a user is not bucketed into any experiments in the random group' , ( ) => {
176- vi . spyOn ( bucketValueGenerator , 'generateBucketValue' ) . mockReturnValue ( 50000 ) ;
185+ mockGenerateBucketValue . mockReturnValue ( 50000 ) ;
177186
178187 const decisionResponse = bucketer . bucket ( bucketerParams ) ;
179188
@@ -185,7 +194,7 @@ describe('including groups: random', () => {
185194 } ) ;
186195
187196 it ( 'should return decision response with variation null when a user is bucketed into traffic space of deleted experiment within a random group' , ( ) => {
188- vi . spyOn ( bucketValueGenerator , 'generateBucketValue' ) . mockReturnValueOnce ( 9000 ) ;
197+ mockGenerateBucketValue . mockReturnValueOnce ( 9000 ) ;
189198
190199 const decisionResponse = bucketer . bucket ( bucketerParams ) ;
191200
@@ -215,8 +224,12 @@ describe('including groups: overlapping', () => {
215224 let configObj : ProjectConfig ;
216225 const mockLogger = getMockLogger ( ) ;
217226 let bucketerParams : BucketerParams ;
227+ const mockGenerateBucketValue = bucketValueGenerator . generateBucketValue as unknown as
228+ MockInstance < typeof bucketValueGenerator . generateBucketValue > ;
218229
219230 beforeEach ( ( ) => {
231+ vi . clearAllMocks ( ) ;
232+
220233 setLogSpy ( mockLogger ) ;
221234 configObj = projectConfig . createProjectConfig ( cloneDeep ( testData ) ) ;
222235 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -239,7 +252,7 @@ describe('including groups: overlapping', () => {
239252 } ) ;
240253
241254 it ( 'should return decision response with variation when a user falls into an experiment within an overlapping group' , ( ) => {
242- vi . spyOn ( bucketValueGenerator , 'generateBucketValue' ) . mockReturnValueOnce ( 0 ) ;
255+ mockGenerateBucketValue . mockReturnValueOnce ( 0 ) ;
243256
244257 const decisionResponse = bucketer . bucket ( bucketerParams ) ;
245258
@@ -249,7 +262,7 @@ describe('including groups: overlapping', () => {
249262 } ) ;
250263
251264 it ( 'should return decision response with variation null when a user does not fall into an experiment within an overlapping group' , ( ) => {
252- vi . spyOn ( bucketValueGenerator , 'generateBucketValue' ) . mockReturnValueOnce ( 3000 ) ;
265+ mockGenerateBucketValue . mockReturnValueOnce ( 3000 ) ;
253266 const decisionResponse = bucketer . bucket ( bucketerParams ) ;
254267
255268 expect ( decisionResponse . result ) . toBeNull ( ) ;
0 commit comments