Skip to content

Commit 97bfd8d

Browse files
[FSSDK-11119] function name adjustment
1 parent f11bb04 commit 97bfd8d

File tree

6 files changed

+66
-44
lines changed

6 files changed

+66
-44
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Copyright 2025, Optimizely
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
import { expect, describe, it } from 'vitest';
17+
import { sprintf } from '../../utils/fns';
18+
import { generateBucketValue } from './bucket_value_generator';
19+
import { OptimizelyError } from '../../error/optimizly_error';
20+
import { INVALID_BUCKETING_ID } from 'error_message';
21+
22+
describe('generateBucketValue', () => {
23+
it('should return a bucket value for different inputs', () => {
24+
const experimentId = 1886780721;
25+
const bucketingKey1 = sprintf('%s%s', 'ppid1', experimentId);
26+
const bucketingKey2 = sprintf('%s%s', 'ppid2', experimentId);
27+
const bucketingKey3 = sprintf('%s%s', 'ppid2', 1886780722);
28+
const bucketingKey4 = sprintf('%s%s', 'ppid3', experimentId);
29+
30+
expect(generateBucketValue(bucketingKey1)).toBe(5254);
31+
expect(generateBucketValue(bucketingKey2)).toBe(4299);
32+
expect(generateBucketValue(bucketingKey3)).toBe(2434);
33+
expect(generateBucketValue(bucketingKey4)).toBe(5439);
34+
});
35+
36+
it('should return an error if it cannot generate the hash value', () => {
37+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
38+
// @ts-ignore
39+
expect(() => generateBucketValue(null)).toThrowError(
40+
new OptimizelyError(INVALID_BUCKETING_ID)
41+
);
42+
});
43+
});

lib/core/bucketer/bucket_value_generator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const MAX_TRAFFIC_VALUE = 10000;
2727
* @return {number} The generated bucket value
2828
* @throws If bucketing value is not a valid string
2929
*/
30-
export const _generateBucketValue = function(bucketingKey: string): number {
30+
export const generateBucketValue = function(bucketingKey: string): number {
3131
try {
3232
// NOTE: the mmh library already does cast the hash value as an unsigned 32bit int
3333
// https://github.com/perezd/node-murmurhash/blob/master/murmurhash.js#L115

lib/core/bucketer/index.spec.ts

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ describe('excluding groups', () => {
8282
logger: mockLogger,
8383
};
8484

85-
vi.spyOn(bucketValueGenerator, '_generateBucketValue')
85+
vi.spyOn(bucketValueGenerator, 'generateBucketValue')
8686
.mockReturnValueOnce(50)
8787
.mockReturnValueOnce(50000);
8888
});
@@ -135,7 +135,7 @@ describe('including groups: random', () => {
135135
});
136136

137137
it('should return decision response with the proper variation for a user in a grouped experiment', () => {
138-
vi.spyOn(bucketValueGenerator, '_generateBucketValue')
138+
vi.spyOn(bucketValueGenerator, 'generateBucketValue')
139139
.mockReturnValueOnce(50)
140140
.mockReturnValueOnce(50);
141141

@@ -154,7 +154,7 @@ describe('including groups: random', () => {
154154
});
155155

156156
it('should return decision response with variation null when a user is bucketed into a different grouped experiment than the one speicfied', () => {
157-
vi.spyOn(bucketValueGenerator, '_generateBucketValue').mockReturnValue(5000);
157+
vi.spyOn(bucketValueGenerator, 'generateBucketValue').mockReturnValue(5000);
158158

159159
const decisionResponse = bucketer.bucket(bucketerParams);
160160

@@ -171,7 +171,7 @@ describe('including groups: random', () => {
171171
});
172172

173173
it('should return decision response with variation null when a user is not bucketed into any experiments in the random group', () => {
174-
vi.spyOn(bucketValueGenerator, '_generateBucketValue').mockReturnValue(50000);
174+
vi.spyOn(bucketValueGenerator, 'generateBucketValue').mockReturnValue(50000);
175175

176176
const decisionResponse = bucketer.bucket(bucketerParams);
177177

@@ -183,7 +183,7 @@ describe('including groups: random', () => {
183183
});
184184

185185
it('should return decision response with variation null when a user is bucketed into traffic space of deleted experiment within a random group', () => {
186-
vi.spyOn(bucketValueGenerator, '_generateBucketValue').mockReturnValueOnce(9000);
186+
vi.spyOn(bucketValueGenerator, 'generateBucketValue').mockReturnValueOnce(9000);
187187

188188
const decisionResponse = bucketer.bucket(bucketerParams);
189189

@@ -231,7 +231,7 @@ describe('including groups: overlapping', () => {
231231
});
232232

233233
it('should return decision response with variation when a user falls into an experiment within an overlapping group', () => {
234-
vi.spyOn(bucketValueGenerator, '_generateBucketValue').mockReturnValueOnce(0);
234+
vi.spyOn(bucketValueGenerator, 'generateBucketValue').mockReturnValueOnce(0);
235235

236236
const decisionResponse = bucketer.bucket(bucketerParams);
237237

@@ -241,7 +241,7 @@ describe('including groups: overlapping', () => {
241241
});
242242

243243
it('should return decision response with variation null when a user does not fall into an experiment within an overlapping group', () => {
244-
vi.spyOn(bucketValueGenerator, '_generateBucketValue').mockReturnValueOnce(3000);
244+
vi.spyOn(bucketValueGenerator, 'generateBucketValue').mockReturnValueOnce(3000);
245245
const decisionResponse = bucketer.bucket(bucketerParams);
246246

247247
expect(decisionResponse.result).toBeNull();
@@ -340,28 +340,7 @@ describe('traffic allocation has invalid variation ids', () => {
340340
});
341341
});
342342

343-
describe('_generateBucketValue', () => {
344-
it('should return a bucket value for different inputs', () => {
345-
const experimentId = 1886780721;
346-
const bucketingKey1 = sprintf('%s%s', 'ppid1', experimentId);
347-
const bucketingKey2 = sprintf('%s%s', 'ppid2', experimentId);
348-
const bucketingKey3 = sprintf('%s%s', 'ppid2', 1886780722);
349-
const bucketingKey4 = sprintf('%s%s', 'ppid3', experimentId);
350-
351-
expect(bucketValueGenerator._generateBucketValue(bucketingKey1)).toBe(5254);
352-
expect(bucketValueGenerator._generateBucketValue(bucketingKey2)).toBe(4299);
353-
expect(bucketValueGenerator._generateBucketValue(bucketingKey3)).toBe(2434);
354-
expect(bucketValueGenerator._generateBucketValue(bucketingKey4)).toBe(5439);
355-
});
356343

357-
it('should return an error if it cannot generate the hash value', () => {
358-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
359-
// @ts-ignore
360-
expect(() => bucketValueGenerator._generateBucketValue(null)).toThrowError(
361-
new OptimizelyError(INVALID_BUCKETING_ID)
362-
);
363-
});
364-
});
365344

366345
describe('testBucketWithBucketingId', () => {
367346
let bucketerParams: BucketerParams;

lib/core/bucketer/index.tests.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,15 @@ describe('lib/core/bucketer', function () {
7676
logger: createdLogger,
7777
};
7878
sinon
79-
.stub(bucketValueGenerator, '_generateBucketValue')
79+
.stub(bucketValueGenerator, 'generateBucketValue')
8080
.onFirstCall()
8181
.returns(50)
8282
.onSecondCall()
8383
.returns(50000);
8484
});
8585

8686
afterEach(function () {
87-
bucketValueGenerator._generateBucketValue.restore();
87+
bucketValueGenerator.generateBucketValue.restore();
8888
});
8989

9090
it('should return decision response with correct variation ID when provided bucket value', function () {
@@ -116,11 +116,11 @@ describe('lib/core/bucketer', function () {
116116
groupIdMap: configObj.groupIdMap,
117117
logger: createdLogger,
118118
};
119-
bucketerStub = sinon.stub(bucketValueGenerator, '_generateBucketValue');
119+
bucketerStub = sinon.stub(bucketValueGenerator, 'generateBucketValue');
120120
});
121121

122122
afterEach(function () {
123-
bucketValueGenerator._generateBucketValue.restore();
123+
bucketValueGenerator.generateBucketValue.restore();
124124
});
125125

126126
describe('random groups', function () {
@@ -328,23 +328,23 @@ describe('lib/core/bucketer', function () {
328328
});
329329
});
330330

331-
describe('_generateBucketValue', function () {
331+
describe('generateBucketValue', function () {
332332
it('should return a bucket value for different inputs', function () {
333333
var experimentId = 1886780721;
334334
var bucketingKey1 = sprintf('%s%s', 'ppid1', experimentId);
335335
var bucketingKey2 = sprintf('%s%s', 'ppid2', experimentId);
336336
var bucketingKey3 = sprintf('%s%s', 'ppid2', 1886780722);
337337
var bucketingKey4 = sprintf('%s%s', 'ppid3', experimentId);
338338

339-
expect(bucketValueGenerator._generateBucketValue(bucketingKey1)).to.equal(5254);
340-
expect(bucketValueGenerator._generateBucketValue(bucketingKey2)).to.equal(4299);
341-
expect(bucketValueGenerator._generateBucketValue(bucketingKey3)).to.equal(2434);
342-
expect(bucketValueGenerator._generateBucketValue(bucketingKey4)).to.equal(5439);
339+
expect(bucketValueGenerator.generateBucketValue(bucketingKey1)).to.equal(5254);
340+
expect(bucketValueGenerator.generateBucketValue(bucketingKey2)).to.equal(4299);
341+
expect(bucketValueGenerator.generateBucketValue(bucketingKey3)).to.equal(2434);
342+
expect(bucketValueGenerator.generateBucketValue(bucketingKey4)).to.equal(5439);
343343
});
344344

345345
it('should return an error if it cannot generate the hash value', function() {
346346
const response = assert.throws(function() {
347-
bucketValueGenerator._generateBucketValue(null);
347+
bucketValueGenerator.generateBucketValue(null);
348348
} );
349349
expect(response.baseMessage).to.equal(INVALID_BUCKETING_ID);
350350
});

lib/core/bucketer/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
} from '../../shared_types';
2727
import { INVALID_GROUP_ID } from 'error_message';
2828
import { OptimizelyError } from '../../error/optimizly_error';
29-
import { _generateBucketValue } from './bucket_value_generator';
29+
import { generateBucketValue } from './bucket_value_generator';
3030

3131
export const USER_NOT_IN_ANY_EXPERIMENT = 'User %s is not in any experiment of group %s.';
3232
export const USER_NOT_BUCKETED_INTO_EXPERIMENT_IN_GROUP = 'User %s is not in experiment %s of group %s.';
@@ -123,7 +123,7 @@ export const bucket = function(bucketerParams: BucketerParams): DecisionResponse
123123
}
124124
}
125125
const bucketingId = `${bucketerParams.bucketingId}${bucketerParams.experimentId}`;
126-
const bucketValue = _generateBucketValue(bucketingId);
126+
const bucketValue = generateBucketValue(bucketingId);
127127

128128
bucketerParams.logger?.debug(
129129
USER_ASSIGNED_TO_EXPERIMENT_BUCKET,
@@ -171,7 +171,7 @@ export const bucketUserIntoExperiment = function(
171171
logger?: LoggerFacade
172172
): string | null {
173173
const bucketingKey = `${bucketingId}${group.id}`;
174-
const bucketValue = _generateBucketValue(bucketingKey);
174+
const bucketValue = generateBucketValue(bucketingKey);
175175
logger?.debug(
176176
USER_ASSIGNED_TO_EXPERIMENT_BUCKET,
177177
bucketValue,

lib/core/decision_service/index.tests.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2228,7 +2228,7 @@ describe('lib/core/decision_service', function() {
22282228
var generateBucketValueStub;
22292229
beforeEach(function() {
22302230
feature = configObj.featureKeyMap.test_feature_in_exclusion_group;
2231-
generateBucketValueStub = sandbox.stub(bucketValueGenerator, '_generateBucketValue');
2231+
generateBucketValueStub = sandbox.stub(bucketValueGenerator, 'generateBucketValue');
22322232
});
22332233

22342234
it('returns a decision with a variation in mutex group bucket less than 2500', function() {
@@ -2408,7 +2408,7 @@ describe('lib/core/decision_service', function() {
24082408
var generateBucketValueStub;
24092409
beforeEach(function() {
24102410
feature = configObj.featureKeyMap.test_feature_in_multiple_experiments;
2411-
generateBucketValueStub = sandbox.stub(bucketValueGenerator, '_generateBucketValue');
2411+
generateBucketValueStub = sandbox.stub(bucketValueGenerator, 'generateBucketValue');
24122412
});
24132413

24142414
it('returns a decision with a variation in mutex group bucket less than 2500', function() {

0 commit comments

Comments
 (0)