Skip to content

Commit a0b29dd

Browse files
[FSSDK-10766] test additions
1 parent ed62cf7 commit a0b29dd

File tree

2 files changed

+128
-1
lines changed

2 files changed

+128
-1
lines changed

lib/core/decision_service/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ export class DecisionService {
562562
if (!this.userProfileService || !userProfileTracker?.userProfile || !userProfileTracker.isProfileUpdated) {
563563
return;
564564
}
565-
565+
console.log('Hitting save user profile', userId)
566566
try {
567567
this.userProfileService.save({
568568
user_id: userId,
@@ -594,6 +594,7 @@ export class DecisionService {
594594
featureFlags: FeatureFlag[],
595595
user: OptimizelyUserContext,
596596
options: { [key: string]: boolean } = {}): DecisionResponse<DecisionObj>[] {
597+
console.log('get variation for feature list is called', featureFlags)
597598
const userId = user.getUserId();
598599
const attributes = user.getAttributes();
599600
const decisions: DecisionResponse<DecisionObj>[] = [];

lib/optimizely/index.tests.js

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5903,6 +5903,69 @@ describe('lib/optimizely', function() {
59035903
assert.deepEqual(decision, expectedDecision);
59045904
sinon.assert.calledTwice(eventDispatcher.dispatchEvent);
59055905
});
5906+
describe('UPS Batching', function() {
5907+
var userProfileServiceInstance = {
5908+
lookup: function() {},
5909+
save: function() {},
5910+
};
5911+
beforeEach(function() {
5912+
optlyInstance = new Optimizely({
5913+
clientEngine: 'node-sdk',
5914+
datafile: testData.getTestDecideProjectConfig(),
5915+
userProfileService: userProfileServiceInstance,
5916+
errorHandler: errorHandler,
5917+
eventDispatcher: eventDispatcher,
5918+
jsonSchemaValidator: jsonSchemaValidator,
5919+
logger: createdLogger,
5920+
isValidInstance: true,
5921+
eventBatchSize: 1,
5922+
defaultDecideOptions: [],
5923+
notificationCenter,
5924+
eventProcessor,
5925+
});
5926+
5927+
sinon.stub(optlyInstance.decisionService.userProfileService, 'lookup')
5928+
sinon.stub(optlyInstance.decisionService.userProfileService, 'save')
5929+
});
5930+
5931+
it('Should call UPS methods only once', function() {
5932+
var flagKeysArray = ['feature_1', 'feature_2'];
5933+
var user = optlyInstance.createUserContext(userId);
5934+
var expectedVariables1 = optlyInstance.getAllFeatureVariables(flagKeysArray[0], userId);
5935+
var expectedVariables2 = optlyInstance.getAllFeatureVariables(flagKeysArray[1], userId);
5936+
optlyInstance.decisionService.userProfileService.save.resetHistory();
5937+
optlyInstance.decisionService.userProfileService.lookup.resetHistory();
5938+
var decisionsMap = optlyInstance.decideForKeys(user, flagKeysArray);
5939+
var decision1 = decisionsMap[flagKeysArray[0]];
5940+
var decision2 = decisionsMap[flagKeysArray[1]];
5941+
var expectedDecision1 = {
5942+
variationKey: '18257766532',
5943+
enabled: true,
5944+
variables: expectedVariables1,
5945+
ruleKey: '18322080788',
5946+
flagKey: flagKeysArray[0],
5947+
userContext: user,
5948+
reasons: [],
5949+
};
5950+
var expectedDecision2 = {
5951+
variationKey: 'variation_with_traffic',
5952+
enabled: true,
5953+
variables: expectedVariables2,
5954+
ruleKey: 'exp_no_audience',
5955+
flagKey: flagKeysArray[1],
5956+
userContext: user,
5957+
reasons: [],
5958+
};
5959+
5960+
assert.deepEqual(Object.values(decisionsMap).length, 2);
5961+
assert.deepEqual(decision1, expectedDecision1);
5962+
assert.deepEqual(decision2, expectedDecision2);
5963+
// UPS batch assertion
5964+
sinon.assert.calledOnce(optlyInstance.decisionService.userProfileService.lookup);
5965+
sinon.assert.calledOnce(optlyInstance.decisionService.userProfileService.save);
5966+
});
5967+
})
5968+
59065969
});
59075970

59085971
describe('#decideAll', function() {
@@ -6096,6 +6159,69 @@ describe('lib/optimizely', function() {
60966159
sinon.assert.calledThrice(eventDispatcher.dispatchEvent);
60976160
});
60986161
});
6162+
6163+
describe('UPS batching', function() {
6164+
beforeEach(function() {
6165+
var userProfileServiceInstance = {
6166+
lookup: function() {},
6167+
save: function() {},
6168+
};
6169+
6170+
optlyInstance = new Optimizely({
6171+
clientEngine: 'node-sdk',
6172+
datafile: testData.getTestDecideProjectConfig(),
6173+
userProfileService: userProfileServiceInstance,
6174+
errorHandler: errorHandler,
6175+
eventDispatcher: eventDispatcher,
6176+
jsonSchemaValidator: jsonSchemaValidator,
6177+
logger: createdLogger,
6178+
isValidInstance: true,
6179+
eventBatchSize: 1,
6180+
defaultDecideOptions: [OptimizelyDecideOption.ENABLED_FLAGS_ONLY],
6181+
eventProcessor,
6182+
notificationCenter,
6183+
});
6184+
6185+
sinon.stub(optlyInstance.decisionService.userProfileService, 'lookup')
6186+
sinon.stub(optlyInstance.decisionService.userProfileService, 'save')
6187+
});
6188+
6189+
it('should call UPS methods only once', function() {
6190+
var flagKey1 = 'feature_1';
6191+
var flagKey2 = 'feature_2';
6192+
var user = optlyInstance.createUserContext(userId, { gender: 'female' });
6193+
var decisionsMap = optlyInstance.decideAll(user, [OptimizelyDecideOption.EXCLUDE_VARIABLES]);
6194+
var decision1 = decisionsMap[flagKey1];
6195+
var decision2 = decisionsMap[flagKey2];
6196+
var expectedDecision1 = {
6197+
variationKey: '18257766532',
6198+
enabled: true,
6199+
variables: {},
6200+
ruleKey: '18322080788',
6201+
flagKey: flagKey1,
6202+
userContext: user,
6203+
reasons: [],
6204+
};
6205+
var expectedDecision2 = {
6206+
variationKey: 'variation_with_traffic',
6207+
enabled: true,
6208+
variables: {},
6209+
ruleKey: 'exp_no_audience',
6210+
flagKey: flagKey2,
6211+
userContext: user,
6212+
reasons: [],
6213+
};
6214+
6215+
// Decision assertion
6216+
assert.deepEqual(Object.values(decisionsMap).length, 2);
6217+
assert.deepEqual(decision1, expectedDecision1);
6218+
assert.deepEqual(decision2, expectedDecision2);
6219+
6220+
// UPS batch assertion
6221+
sinon.assert.calledOnce(optlyInstance.decisionService.userProfileService.lookup);
6222+
sinon.assert.calledOnce(optlyInstance.decisionService.userProfileService.save);
6223+
})
6224+
});
60996225
});
61006226
});
61016227

0 commit comments

Comments
 (0)