From 864fdccb6be9d60de5ea2cb79344ed0fbc7246ae Mon Sep 17 00:00:00 2001 From: Muhammad Shaharyar Date: Sat, 5 Feb 2022 01:33:49 +0500 Subject: [PATCH] refactor: Return `ReactSDKClient` interface from `createInstance` instead 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 --- CHANGELOG.md | 3 +++ src/client.spec.ts | 10 +++++++--- src/client.ts | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41b265a1..8e95b5c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/src/client.spec.ts b/src/client.spec.ts index 421da6d5..0d6473dd 100644 --- a/src/client.spec.ts +++ b/src/client.spec.ts @@ -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 = { @@ -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', () => { @@ -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', () => { @@ -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', () => { diff --git a/src/client.ts b/src/client.ts index af262eac..5faf1791 100644 --- a/src/client.ts +++ b/src/client.ts @@ -168,6 +168,8 @@ export interface ReactSDKClient extends Omit