@@ -6,9 +6,19 @@ import {
66 OpenFeature ,
77 ProviderEvents ,
88 ResolutionDetails ,
9- StandardResolutionReasons ,
9+ StandardResolutionReasons
1010} from '@openfeature/web-sdk' ;
1111import { defineFeature , loadFeature } from 'jest-cucumber' ;
12+ import {
13+ ContainerRuntimeClient ,
14+ GenericContainer ,
15+ getContainerRuntimeClient ,
16+ StartedTestContainer ,
17+ TestContainer
18+ } from 'testcontainers' ;
19+ import { FlagdWebProvider } from '../../lib/flagd-web-provider' ;
20+ import assert from 'assert' ;
21+ import { FLAGD_WEB_NAME } from '../setup' ;
1222
1323// load the feature file.
1424const feature = loadFeature ( 'features/evaluation.feature' ) ;
@@ -17,19 +27,43 @@ const feature = loadFeature('features/evaluation.feature');
1727const client = OpenFeature . getClient ( ) ;
1828
1929const givenAnOpenfeatureClientIsRegistered = (
20- given : ( stepMatcher : string , stepDefinitionCallback : ( ) => void ) => void ,
30+ given : ( stepMatcher : string , stepDefinitionCallback : ( ) => void ) => void
2131) => {
2232 given ( 'a provider is registered' , ( ) => undefined ) ;
2333} ;
2434
2535defineFeature ( feature , ( test ) => {
36+ const container : TestContainer = new GenericContainer ( 'ghcr.io/open-feature/flagd-testbed:v0.5.4' ) ;
37+ let startedContainer : StartedTestContainer ;
2638 beforeAll ( ( done ) => {
2739 client . addHandler ( ProviderEvents . Ready , async ( ) => {
2840 done ( ) ;
2941 } ) ;
30- } ) ;
42+
43+ container
44+ . withExposedPorts ( 8013 )
45+ . start ( )
46+ . then ( c => {
47+ startedContainer = c
48+
49+ console . log ( 'Setting flagd web provider...' ) ;
50+ OpenFeature . setProvider (
51+ new FlagdWebProvider ( {
52+ host : startedContainer . getHost ( ) ,
53+ port : startedContainer . getMappedPort ( 8013 ) ,
54+ tls : false ,
55+ } ) ,
56+ ) ;
57+ assert (
58+ OpenFeature . providerMetadata . name === FLAGD_WEB_NAME ,
59+ new Error ( `Expected ${ FLAGD_WEB_NAME } provider to be configured, instead got: ${ OpenFeature . providerMetadata . name } ` ) ,
60+ ) ;
61+ console . log ( 'flagd web provider configured!' ) ;
62+ } ) ;
63+ } , 60000 ) ;
3164
3265 afterAll ( async ( ) => {
66+ await startedContainer . stop ( ) ;
3367 await OpenFeature . close ( ) ;
3468 } ) ;
3569
@@ -294,7 +328,7 @@ defineFeature(feature, (test) => {
294328 flagKey = key ;
295329 fallbackValue = defaultValue ;
296330 details = client . getStringDetails ( flagKey , defaultValue ) ;
297- } ,
331+ }
298332 ) ;
299333
300334 then ( / ^ t h e d e f a u l t s t r i n g v a l u e s h o u l d b e r e t u r n e d $ / , ( ) => {
@@ -306,7 +340,7 @@ defineFeature(feature, (test) => {
306340 ( errorCode : string ) => {
307341 expect ( details . reason ) . toEqual ( StandardResolutionReasons . ERROR ) ;
308342 expect ( details . errorCode ) . toEqual ( errorCode ) ;
309- } ,
343+ }
310344 ) ;
311345 } ) ;
312346
@@ -323,7 +357,7 @@ defineFeature(feature, (test) => {
323357 flagKey = key ;
324358 fallbackValue = Number . parseInt ( defaultValue ) ;
325359 details = client . getNumberDetails ( flagKey , Number . parseInt ( defaultValue ) ) ;
326- } ,
360+ }
327361 ) ;
328362
329363 then ( / ^ t h e d e f a u l t i n t e g e r v a l u e s h o u l d b e r e t u r n e d $ / , ( ) => {
@@ -335,7 +369,7 @@ defineFeature(feature, (test) => {
335369 ( errorCode : string ) => {
336370 expect ( details . reason ) . toEqual ( StandardResolutionReasons . ERROR ) ;
337371 expect ( details . errorCode ) . toEqual ( errorCode ) ;
338- } ,
372+ }
339373 ) ;
340374 } ) ;
341375} ) ;
0 commit comments