@@ -11,6 +11,7 @@ import {
1111 useStringFlagValue ,
1212} from '../src' ;
1313import { TestingProvider } from './test.utils' ;
14+ import { useOpenFeatureProvider } from '../src/provider/use-open-feature-provider' ;
1415
1516describe ( 'OpenFeatureProvider' , ( ) => {
1617 /**
@@ -99,6 +100,43 @@ describe('OpenFeatureProvider', () => {
99100 } ) ;
100101 } ) ;
101102
103+ describe ( 'useOpenFeatureProvider' , ( ) => {
104+ const DOMAIN = 'useOpenFeatureProvider' ;
105+
106+ it ( 'should return provider from the global singleton when no SDK is specified' , ( ) => {
107+ const provider = new InMemoryProvider ( ) ;
108+ OpenFeature . setProvider ( DOMAIN , provider ) ;
109+
110+ const wrapper = ( { children } : Parameters < typeof OpenFeatureProvider > [ 0 ] ) => (
111+ < OpenFeatureProvider domain = { DOMAIN } > { children } </ OpenFeatureProvider >
112+ ) ;
113+
114+ const { result } = renderHook ( ( ) => useOpenFeatureProvider ( ) , { wrapper } ) ;
115+
116+ expect ( result . current ) . toEqual ( provider ) ;
117+ } ) ;
118+
119+ it ( 'should return provider from the specified SDK when one is provided' , ( ) => {
120+ const provider = new InMemoryProvider ( ) ;
121+ OpenFeature . setProvider ( DOMAIN , provider ) ;
122+
123+ const isolatedInstance = OpenFeature . getIsolated ( ) ;
124+ const isolatedProvider = new InMemoryProvider ( ) ;
125+ isolatedInstance . setProvider ( DOMAIN , isolatedProvider ) ;
126+
127+ const wrapper = ( { children } : Parameters < typeof OpenFeatureProvider > [ 0 ] ) => (
128+ < OpenFeatureProvider sdk = { isolatedInstance } domain = { DOMAIN } >
129+ { children }
130+ </ OpenFeatureProvider >
131+ ) ;
132+
133+ const { result } = renderHook ( ( ) => useOpenFeatureProvider ( ) , { wrapper } ) ;
134+
135+ expect ( result . current ) . toEqual ( isolatedProvider ) ;
136+ expect ( result . current ) . not . toEqual ( provider ) ;
137+ } ) ;
138+ } ) ;
139+
102140 describe ( 'useWhenProviderReady' , ( ) => {
103141 describe ( 'suspendUntilReady=true (default)' , ( ) => {
104142 it ( 'should suspend until ready and then return provider status' , async ( ) => {
@@ -165,6 +203,7 @@ describe('OpenFeatureProvider', () => {
165203 } ) ;
166204 } ) ;
167205 } ) ;
206+
168207 describe ( 'useMutateContext' , ( ) => {
169208 const MutateButton = ( { setter } : { setter ?: ( prevContext : EvaluationContext ) => EvaluationContext } ) => {
170209 const { setContext } = useContextMutator ( ) ;
0 commit comments