11import { FlagsmithClientProvider } from './flagsmith-client-provider' ;
22import {
3+ cacheConfig ,
34 defaultConfig ,
45 defaultState ,
6+ defaultStateWithoutEnvironment ,
57 exampleBooleanFlag ,
68 exampleBooleanFlagName ,
79 exampleFloatFlagName ,
@@ -21,19 +23,22 @@ const logger = {
2123 warn : jest . fn ( ) ,
2224} ;
2325
26+ const CACHE_KEY = 'FLAGSMITH_CACHE_DB' ;
27+
2428describe ( 'FlagsmithProvider' , ( ) => {
2529 beforeEach ( async ( ) => {
2630 // Clear all instances and calls to constructor and all methods of mock logger
2731 jest . clearAllMocks ( ) ;
28- await Promise . all ( [ OpenFeature . clearProviders ( ) , OpenFeature . clearContexts ( ) ] ) ;
32+ await OpenFeature . clearContexts ( ) ;
33+ await OpenFeature . clearProviders ( ) ;
2934 } ) ;
3035
3136 describe ( 'constructor' , ( ) => {
3237 it ( 'should initialize the environment ID' , async ( ) => {
3338 const config = defaultConfig ( ) ;
3439 const provider = new FlagsmithClientProvider ( config ) ;
3540 await OpenFeature . setProviderAndWait ( provider ) ;
36- expect ( provider . flagsmithClient . getState ( ) . environmentID ) . toEqual ( config . environmentID ) ;
41+ expect ( provider . flagsmithClient . getContext ( ) . environment ?. apiKey ) . toEqual ( config . environmentID ) ;
3742 } ) ;
3843
3944 it ( 'calls onChange' , async ( ) => {
@@ -44,7 +49,7 @@ describe('FlagsmithProvider', () => {
4449 expect ( onChange ) . toHaveBeenCalledTimes ( 1 ) ;
4550 await OpenFeature . setContext ( { targetingKey : 'test' } ) ;
4651 expect ( onChange ) . toHaveBeenCalledTimes ( 2 ) ;
47- expect ( provider . flagsmithClient . getState ( ) . environmentID ) . toEqual ( config . environmentID ) ;
52+ expect ( provider . flagsmithClient . getContext ( ) . environment ?. apiKey ) . toEqual ( config . environmentID ) ;
4853 } ) ;
4954
5055 it ( 'should allow a custom instance of Flagsmith to be used' , async ( ) => {
@@ -56,12 +61,23 @@ describe('FlagsmithProvider', () => {
5661 it ( 'should initialize with SSR state and evaluate synchronously if provided' , async ( ) => {
5762 const config = defaultConfig ( ) ;
5863 const state = {
59- ...defaultState ,
64+ ...defaultStateWithoutEnvironment ,
6065 identity : 'test' ,
61- traits : { example : 1 } ,
66+ traits : undefined ,
6267 evaluationEvent : null ,
63- ts : null ,
68+ ts : undefined ,
69+ evaluationContext : {
70+ identity : {
71+ identifier : 'test' ,
72+ traits : {
73+ test : {
74+ value : '1' ,
75+ } ,
76+ } ,
77+ } ,
78+ } ,
6479 } ;
80+
6581 const provider = new FlagsmithClientProvider ( {
6682 logger,
6783 ...config ,
@@ -80,12 +96,13 @@ describe('FlagsmithProvider', () => {
8096 const config = defaultConfig ( ) ;
8197 const provider = new FlagsmithClientProvider ( {
8298 ...config ,
99+ ...cacheConfig ,
100+ defaultFlags : defaultState . flags ,
83101 logger,
84- cacheFlags : true ,
85102 preventFetch : true ,
86103 } ) ;
87104 await config . AsyncStorage . setItem (
88- 'BULLET_TRAIN_DB' ,
105+ CACHE_KEY ,
89106 JSON . stringify ( {
90107 ...defaultState ,
91108 } ) ,
@@ -100,11 +117,11 @@ describe('FlagsmithProvider', () => {
100117 const config = defaultConfig ( ) ;
101118 const provider = new FlagsmithClientProvider ( {
102119 ...config ,
120+ ...cacheConfig ,
103121 logger,
104- cacheFlags : true ,
105122 } ) ;
106123 await config . AsyncStorage . setItem (
107- 'BULLET_TRAIN_DB' ,
124+ CACHE_KEY ,
108125 JSON . stringify ( {
109126 ...defaultState ,
110127 } ) ,
@@ -122,11 +139,11 @@ describe('FlagsmithProvider', () => {
122139 const config = defaultConfig ( ) ;
123140 const provider = new FlagsmithClientProvider ( {
124141 ...config ,
142+ ...cacheConfig ,
125143 logger,
126- cacheFlags : true ,
127144 } ) ;
128145 await config . AsyncStorage . setItem (
129- 'BULLET_TRAIN_DB' ,
146+ CACHE_KEY ,
130147 JSON . stringify ( {
131148 ...defaultState ,
132149 flags : {
@@ -169,11 +186,12 @@ describe('FlagsmithProvider', () => {
169186 const config = defaultConfig ( ) ;
170187 const provider = new FlagsmithClientProvider ( {
171188 ...config ,
189+ ...cacheConfig ,
172190 logger,
173191 defaultFlags : defaultState . flags ,
174192 } ) ;
175193 await config . AsyncStorage . setItem (
176- 'BULLET_TRAIN_DB' ,
194+ CACHE_KEY ,
177195 JSON . stringify ( {
178196 ...defaultState ,
179197 } ) ,
@@ -192,10 +210,10 @@ describe('FlagsmithProvider', () => {
192210 const provider = new FlagsmithClientProvider ( {
193211 ...config ,
194212 logger,
195- cacheFlags : true ,
213+ ... cacheConfig ,
196214 } ) ;
197215 await config . AsyncStorage . setItem (
198- 'BULLET_TRAIN_DB' ,
216+ CACHE_KEY ,
199217 JSON . stringify ( {
200218 ...defaultState ,
201219 flags : {
@@ -303,7 +321,7 @@ describe('FlagsmithProvider', () => {
303321 } ) ;
304322 expect ( errorHandler ) . toHaveBeenCalledTimes ( 1 ) ;
305323 expect ( errorHandler ) . toHaveBeenCalledWith (
306- expect . objectContaining ( { message : 'Please specify a environment id ' } ) ,
324+ expect . objectContaining ( { message : 'Please provide `evaluationContext. environment` with non-empty `apiKey` ' } ) ,
307325 ) ;
308326 } ) ;
309327 it ( 'should call the stale handler when context changed' , async ( ) => {
@@ -325,11 +343,11 @@ describe('FlagsmithProvider', () => {
325343 ...config ,
326344 } ) ;
327345 await OpenFeature . setProviderAndWait ( provider ) ;
328- expect ( provider . flagsmithClient . getState ( ) . identity ) . toEqual ( undefined ) ;
346+ expect ( provider . flagsmithClient . getContext ( ) . identity ?. identifier ) . toEqual ( undefined ) ;
329347 await OpenFeature . setContext ( { targetingKey } ) ;
330- expect ( provider . flagsmithClient . getState ( ) . identity ) . toEqual ( targetingKey ) ;
348+ expect ( provider . flagsmithClient . getContext ( ) . identity ?. identifier ) . toEqual ( targetingKey ) ;
331349 await OpenFeature . setContext ( { } ) ;
332- expect ( provider . flagsmithClient . getState ( ) . identity ) . toEqual ( null ) ;
350+ expect ( provider . flagsmithClient . getContext ( ) . identity ) . toEqual ( null ) ;
333351 expect ( config . fetch ) . toHaveBeenNthCalledWith (
334352 1 ,
335353 `${ provider . flagsmithClient . getState ( ) . api } flags/` ,
@@ -339,9 +357,9 @@ describe('FlagsmithProvider', () => {
339357 ) ;
340358 expect ( config . fetch ) . toHaveBeenNthCalledWith (
341359 2 ,
342- `${ provider . flagsmithClient . getState ( ) . api } identities/` ,
360+ `${ provider . flagsmithClient . getState ( ) . api } identities/?identifier=test ` ,
343361 expect . objectContaining ( {
344- body : '{"identifier":"test","traits":[]}' ,
362+ body : undefined ,
345363 } ) ,
346364 ) ;
347365 expect ( config . fetch ) . toHaveBeenNthCalledWith (
@@ -360,7 +378,7 @@ describe('FlagsmithProvider', () => {
360378 const provider = new FlagsmithClientProvider ( config ) ;
361379 await OpenFeature . setContext ( { targetingKey, traits } ) ;
362380 await OpenFeature . setProviderAndWait ( provider ) ;
363- expect ( provider . flagsmithClient . getState ( ) . identity ) . toEqual ( targetingKey ) ;
381+ expect ( provider . flagsmithClient . getContext ( ) . identity ?. identifier ) . toEqual ( targetingKey ) ;
364382 expect ( config . fetch ) . toHaveBeenCalledTimes ( 1 ) ;
365383 expect ( config . fetch ) . toHaveBeenCalledWith (
366384 `${ provider . flagsmithClient . getState ( ) . api } identities/` ,
@@ -390,7 +408,7 @@ describe('FlagsmithProvider', () => {
390408 const provider = new FlagsmithClientProvider ( config ) ;
391409 await OpenFeature . setContext ( { targetingKey, traits } ) ;
392410 await OpenFeature . setProviderAndWait ( provider ) ;
393- expect ( provider . flagsmithClient . getState ( ) . identity ) . toEqual ( targetingKey ) ;
411+ expect ( provider . flagsmithClient . getContext ( ) . identity ?. identifier ) . toEqual ( targetingKey ) ;
394412 expect ( config . fetch ) . toHaveBeenCalledTimes ( 1 ) ;
395413 expect ( config . fetch ) . toHaveBeenCalledWith (
396414 `${ provider . flagsmithClient . getState ( ) . api } identities/` ,
@@ -430,7 +448,9 @@ describe('FlagsmithProvider', () => {
430448 fetch : getFetchErrorMock ( ) ,
431449 environmentID : '' ,
432450 } ) ;
433- await expect ( OpenFeature . setProviderAndWait ( provider ) ) . rejects . toThrow ( 'Please specify a environment id' ) ;
451+ await expect ( OpenFeature . setProviderAndWait ( provider ) ) . rejects . toThrow (
452+ 'Please provide `evaluationContext.environment` with non-empty `apiKey`' ,
453+ ) ;
434454 } ) ;
435455 } ) ;
436456} ) ;
0 commit comments