Skip to content

Commit

Permalink
refactor: Return ReactSDKClient interface from createInstance ins…
Browse files Browse the repository at this point in the history
…tead of implementation class (#148)

### Summary
Return type of createInstance was OptimizelyReactSDKClient which is the implementation class. Changed it to the ReactSDKClient interface instead.

### Test Plan

- Manually tested thoroughly.
- All existing unit tests pass.

### Issues
#49
  • Loading branch information
shaharyar123 authored Feb 4, 2022
1 parent 5e5e459 commit 864fdcc
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

## [Unreleased]

### Enhancements
- fixed issue [#49](https://github.com/optimizely/react-sdk/issues/49): Return type of `createInstance` was `OptimizelyReactSDKClient` which is the implementation class. Changed it to the `ReactSDKClient` interface instead ([#148](https://github.com/optimizely/react-sdk/pull/148)).

## [2.8.0] - January 26, 2022

### New Features
Expand Down
10 changes: 7 additions & 3 deletions src/client.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ jest.mock('@optimizely/optimizely-sdk');
import * as optimizely from '@optimizely/optimizely-sdk';

import { createInstance, OnReadyResult, ReactSDKClient } from './client';
interface MockedReactSDKClient extends ReactSDKClient {
client: optimizely.Client;
initialConfig: optimizely.Config;
}

describe('ReactSDKClient', () => {
const config: optimizely.Config = {
Expand Down Expand Up @@ -79,7 +83,7 @@ describe('ReactSDKClient', () => {

it('provides the initial config object via the initialConfig property', () => {
const instance = createInstance(config);
expect(instance.initialConfig).toEqual(config);
expect((instance as MockedReactSDKClient).initialConfig).toEqual(config);
});

it('provides a default user object', () => {
Expand All @@ -94,7 +98,7 @@ describe('ReactSDKClient', () => {
const instance = createInstance(config);
expect(createInstanceSpy).toBeCalledTimes(1);
expect(createInstanceSpy.mock.results[0].type).toBe('return');
expect(createInstanceSpy.mock.results[0].value).toBe(instance.client);
expect(createInstanceSpy.mock.results[0].value).toBe((instance as MockedReactSDKClient).client);
});

it('adds react-sdk clientEngine and clientVersion to the config, and passed the config to createInstance', () => {
Expand All @@ -109,7 +113,7 @@ describe('ReactSDKClient', () => {

it('provides access to the underlying client notificationCenter', () => {
const instance = createInstance(config);
expect(instance.notificationCenter).toBe(instance.client.notificationCenter);
expect(instance.notificationCenter).toBe((instance as MockedReactSDKClient).client.notificationCenter);
});

describe('onReady', () => {
Expand Down
4 changes: 3 additions & 1 deletion src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ export interface ReactSDKClient extends Omit<optimizely.Client, 'createUserConte
removeAllForcedDecisions(): boolean;

removeForcedDecision(decisionContext: optimizely.OptimizelyDecisionContext): boolean;

getForcedDecision(decisionContext: optimizely.OptimizelyDecisionContext): optimizely.OptimizelyForcedDecision | null;
}

export const DEFAULT_ON_READY_TIMEOUT = 5000;
Expand Down Expand Up @@ -921,6 +923,6 @@ class OptimizelyReactSDKClient implements ReactSDKClient {
}
}

export function createInstance(config: optimizely.Config): OptimizelyReactSDKClient {
export function createInstance(config: optimizely.Config): ReactSDKClient {
return new OptimizelyReactSDKClient(config);
}

0 comments on commit 864fdcc

Please sign in to comment.