diff --git a/package-lock.json b/package-lock.json
index 56c760b..681cf36 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "featuretoggle-react",
- "version": "0.4.2",
+ "version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/package.json b/package.json
index 652e6ab..013ce49 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,13 @@
{
"name": "featuretoggle-react",
- "version": "0.4.2",
+ "version": "1.0.0",
"description": "Library to use Feature Toggles of your choice in a React application",
"main": "lib/",
"scripts": {
"build": "rm -rf lib && ./node_modules/.bin/babel src/ -d lib/",
- "postinstall": "cd test_setup && yarn",
+ "prepare-test": "cd test_setup && yarn",
"lint": "./node_modules/.bin/eslint src --ext .js",
- "test": "yarn lint && jest"
+ "test": "yarn prepare-test && yarn lint && jest"
},
"files": [
"lib",
@@ -67,6 +67,7 @@
"moduleDirectories": [
"node_modules",
"test_setup/node_modules"
- ]
+ ],
+ "testEnvironment": "jsdom"
}
}
diff --git a/src/Clients/optimizely.test.js b/src/Clients/optimizely.test.js
index 02fc358..f553605 100644
--- a/src/Clients/optimizely.test.js
+++ b/src/Clients/optimizely.test.js
@@ -1,5 +1,30 @@
+import optimizelySDK from '@optimizely/optimizely-sdk';
import { optimizelyClient } from './optimizely';
+const config = {
+ sdkKey: 'abscdef',
+ audience: 'some_audience',
+};
+const flags = [
+ 'feature1',
+ 'feature2',
+];
+
+jest.spyOn(optimizelySDK, 'createInstance').mockImplementation(() => ({
+ onReady: () => ({
+ then: (callBack) => callBack(),
+ }),
+ getEnabledFeatures: () => flags,
+}));
+
describe('Optimizely client', () => {
- it('init passes flags to handler', () => {});
+ it('init passes flags to handler', () => {
+ const handler = jest.fn();
+ const client = optimizelyClient(config);
+ client.init(handler);
+
+ expect(handler)
+ .toHaveBeenCalledWith({ feature1: true, feature2: true }
+ );
+ });
});
diff --git a/src/FeatureToggle.test.js b/src/FeatureToggle.test.js
new file mode 100644
index 0000000..9ac9767
--- /dev/null
+++ b/src/FeatureToggle.test.js
@@ -0,0 +1,77 @@
+import React from 'react';
+import { mount } from 'enzyme';
+import {
+ FeatureToggleWrapper,
+ FeatureToggle,
+} from './FeatureToggle';
+import { On } from './On';
+
+const flags = {
+ feature1: true,
+ feature2: false,
+};
+
+const handler = jest.fn();
+
+const provider = {
+ init: () => handler(flags),
+};
+
+describe('FeatureToggle', () => {
+ it('calls provider.init on mount', () => {
+ mount(
+
+
+
+ );
+
+ expect(handler)
+ .toHaveBeenCalledWith({ feature1: true, feature2: false });
+ });
+
+ it('returns children when a feature is defined', () => {
+ const wrapper = mount(
+
+
+
+
+
+ );
+
+ expect(wrapper
+ .find(On).length)
+ .toEqual(1);
+ });
+
+ it('returns empty when no feature defined', () => {
+ const wrapper = mount(
+
+
+
+
+
+ );
+
+ expect(wrapper
+ .find(On).length)
+ .toEqual(0);
+ });
+
+ it('passes featureToggleEnabled to child', () => {
+ const nonMockedProvider = {
+ init: (nonMockedhandler) => nonMockedhandler(flags),
+ };
+ const wrapper = mount(
+
+
+
+
+
+ );
+
+ expect(wrapper
+ .find(On)
+ .props())
+ .toEqual({ featureToggleEnabled: true });
+ });
+});
diff --git a/test_setup/package.json b/test_setup/package.json
index ea8375d..dc49f5a 100644
--- a/test_setup/package.json
+++ b/test_setup/package.json
@@ -3,7 +3,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react": "^16.8.0",
+ "react-dom": "^16.8.0"
}
}
diff --git a/test_setup/yarn.lock b/test_setup/yarn.lock
index 347c5c2..b273ec9 100644
--- a/test_setup/yarn.lock
+++ b/test_setup/yarn.lock
@@ -7,7 +7,7 @@
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-loose-envify@^1.1.0:
+loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -19,27 +19,43 @@ object-assign@^4.1.1:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-react-dom@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
- integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+prop-types@^15.6.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+react-dom@^16.8.0:
+ version "16.14.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
+ integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
- scheduler "^0.20.2"
+ prop-types "^15.6.2"
+ scheduler "^0.19.1"
+
+react-is@^16.8.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react@^17.0.2:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
- integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+react@^16.8.0:
+ version "16.14.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
+ integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
+ prop-types "^15.6.2"
-scheduler@^0.20.2:
- version "0.20.2"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
- integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+scheduler@^0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+ integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"