Skip to content

Commit 6a836f5

Browse files
[FSSDK-10777] ssr support update
1 parent 6165ef7 commit 6a836f5

4 files changed

Lines changed: 22 additions & 4 deletions

File tree

src/Experiment.spec.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ describe('<OptimizelyExperiment>', () => {
6363
getIsUsingSdkKey: () => true,
6464
onForcedVariationsUpdate: jest.fn().mockReturnValue(() => {}),
6565
setUser: jest.fn(),
66+
getOptimizelyConfig: jest.fn().mockImplementation(() => (isReady ? {} : null)),
67+
getUserContext: jest.fn().mockImplementation(() => (isReady ? {} : null)),
6668
} as unknown as ReactSDKClient;
6769
});
6870

@@ -512,6 +514,11 @@ describe('<OptimizelyExperiment>', () => {
512514
});
513515

514516
describe('when the isServerSide prop is true', () => {
517+
beforeEach(() => {
518+
(optimizelyMock.getOptimizelyConfig as jest.Mock).mockReturnValue({});
519+
(optimizelyMock.getUserContext as jest.Mock).mockReturnValue({});
520+
});
521+
515522
it('should immediately render the result of the experiment without waiting', async () => {
516523
render(
517524
<OptimizelyProvider optimizely={optimizelyMock} timeout={100} isServerSide={true}>

src/Feature.spec.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ describe('<OptimizelyFeature>', () => {
6060
isReady: jest.fn().mockImplementation(() => isReady),
6161
getIsReadyPromiseFulfilled: () => true,
6262
getIsUsingSdkKey: () => true,
63+
getOptimizelyConfig: jest.fn().mockImplementation(() => (isReady ? {} : null)),
64+
getUserContext: jest.fn().mockImplementation(() => (isReady ? {} : null)),
6365
} as unknown as ReactSDKClient;
6466
});
6567

@@ -310,6 +312,11 @@ describe('<OptimizelyFeature>', () => {
310312
});
311313

312314
describe('when the isServerSide prop is true', () => {
315+
beforeEach(() => {
316+
(optimizelyMock.getOptimizelyConfig as jest.Mock).mockReturnValue({});
317+
(optimizelyMock.getUserContext as jest.Mock).mockReturnValue({});
318+
});
319+
313320
it('should immediately render the result of isFeatureEnabled and getFeatureVariables', async () => {
314321
const { container } = render(
315322
<OptimizelyProvider optimizely={optimizelyMock} isServerSide={true}>

src/hooks.spec.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ describe('hooks', () => {
172172
setForcedDecision: setForcedDecisionMock,
173173
track: jest.fn(),
174174
setUser: jest.fn(),
175+
getOptimizelyConfig: jest.fn().mockImplementation(() => (readySuccess ? {} : null)),
176+
getUserContext: jest.fn().mockImplementation(() => (readySuccess ? {} : null)),
175177
} as unknown as ReactSDKClient;
176178

177179
mockLog = jest.fn();

src/hooks.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,9 +270,9 @@ export const useExperiment: UseExperiment = (experimentKey, options = {}, overri
270270

271271
const isClientReady = isServerSide || !!optimizely?.isReady();
272272
const isReadyPromiseFulfilled = !!optimizely?.getIsReadyPromiseFulfilled();
273-
273+
const canMakeDecision = optimizely?.getOptimizelyConfig() && optimizely.getUserContext();
274274
const [state, setState] = useState<ExperimentDecisionValues & InitializationState>(() => {
275-
const decisionState = isClientReady ? getCurrentDecision() : { variation: null };
275+
const decisionState = canMakeDecision ? getCurrentDecision() : { variation: null };
276276
return {
277277
...decisionState,
278278
clientReady: isClientReady,
@@ -368,9 +368,10 @@ export const useFeature: UseFeature = (featureKey, options = {}, overrides = {})
368368

369369
const isClientReady = isServerSide || !!optimizely?.isReady();
370370
const isReadyPromiseFulfilled = !!optimizely?.getIsReadyPromiseFulfilled();
371+
const canMakeDecision = optimizely?.getOptimizelyConfig() && optimizely.getUserContext();
371372

372373
const [state, setState] = useState<FeatureDecisionValues & InitializationState>(() => {
373-
const decisionState = isClientReady ? getCurrentDecision() : { isEnabled: false, variables: {} };
374+
const decisionState = canMakeDecision ? getCurrentDecision() : { isEnabled: false, variables: {} };
374375
return {
375376
...decisionState,
376377
clientReady: isClientReady,
@@ -467,9 +468,10 @@ export const useDecision: UseDecision = (flagKey, options = {}, overrides = {})
467468

468469
const isClientReady = isServerSide || !!optimizely?.isReady();
469470
const isReadyPromiseFulfilled = !!optimizely?.getIsReadyPromiseFulfilled();
471+
const canMakeDecision = optimizely?.getOptimizelyConfig() && optimizely.getUserContext();
470472

471473
const [state, setState] = useState<{ decision: OptimizelyDecision } & InitializationState>(() => {
472-
const decisionState = isClientReady
474+
const decisionState = canMakeDecision
473475
? getCurrentDecision()
474476
: {
475477
decision: defaultDecision,

0 commit comments

Comments
 (0)