1
+ import { afterAll , beforeAll , describe , expect , it } from 'vitest' ;
2
+ import { OpenFeature } from '@openfeature/server-sdk' ;
3
+ import { ConfidenceServerProviderLocal } from './ConfidenceServerProviderLocal' ;
4
+ import { readFileSync } from 'node:fs' ;
5
+ import { WasmResolver } from './WasmResolver' ;
6
+
7
+ const {
8
+ CONFIDENCE_API_CLIENT_ID ,
9
+ CONFIDENCE_API_CLIENT_SECRET ,
10
+ } = requireEnv ( 'CONFIDENCE_API_CLIENT_ID' , 'CONFIDENCE_API_CLIENT_SECRET' ) ;
11
+
12
+ const moduleBytes = readFileSync ( __dirname + '/../../../wasm/confidence_resolver.wasm' ) ;
13
+ const module = new WebAssembly . Module ( moduleBytes ) ;
14
+ const resolver = await WasmResolver . load ( module ) ;
15
+ const confidenceProvider = new ConfidenceServerProviderLocal ( resolver , {
16
+ clientKey : 'RxDVTrXvc6op1XxiQ4OaR31dKbJ39aYV' ,
17
+ clientId : CONFIDENCE_API_CLIENT_ID ,
18
+ clientSecret : CONFIDENCE_API_CLIENT_SECRET
19
+ } ) ;
20
+
21
+ describe ( 'ConfidenceServerProvider E2E tests' , ( ) => {
22
+ beforeAll ( async ( ) => {
23
+
24
+ await OpenFeature . setProviderAndWait ( confidenceProvider ) ;
25
+ OpenFeature . setContext ( {
26
+ targetingKey : 'test-a' , // control
27
+ } ) ;
28
+ } ) ;
29
+
30
+ afterAll ( ( ) => OpenFeature . close ( ) )
31
+
32
+ it ( 'should resolve a boolean e2e' , async ( ) => {
33
+ const client = OpenFeature . getClient ( ) ;
34
+
35
+ expect ( await client . getBooleanValue ( 'web-sdk-e2e-flag.bool' , true ) ) . toBeFalsy ( ) ;
36
+ } ) ;
37
+
38
+ it ( 'should resolve an int' , async ( ) => {
39
+ const client = OpenFeature . getClient ( ) ;
40
+
41
+ expect ( await client . getNumberValue ( 'web-sdk-e2e-flag.int' , 10 ) ) . toEqual ( 3 ) ;
42
+ } ) ;
43
+
44
+ it ( 'should resolve a double' , async ( ) => {
45
+ const client = OpenFeature . getClient ( ) ;
46
+
47
+ expect ( await client . getNumberValue ( 'web-sdk-e2e-flag.double' , 10 ) ) . toEqual ( 3.5 ) ;
48
+ } ) ;
49
+
50
+ it ( 'should resolve a string' , async ( ) => {
51
+ const client = OpenFeature . getClient ( ) ;
52
+
53
+ expect ( await client . getStringValue ( 'web-sdk-e2e-flag.str' , 'default' ) ) . toEqual ( 'control' ) ;
54
+ } ) ;
55
+
56
+ it ( 'should resolve a struct' , async ( ) => {
57
+ const client = OpenFeature . getClient ( ) ;
58
+ const expectedObject = {
59
+ int : 4 ,
60
+ str : 'obj control' ,
61
+ bool : false ,
62
+ double : 3.6 ,
63
+ [ 'obj-obj' ] : { } ,
64
+ } ;
65
+
66
+ expect ( await client . getObjectValue ( 'web-sdk-e2e-flag.obj' , { } ) ) . toEqual ( expectedObject ) ;
67
+ } ) ;
68
+
69
+ it ( 'should resolve a sub value from a struct' , async ( ) => {
70
+ const client = OpenFeature . getClient ( ) ;
71
+
72
+ expect ( await client . getBooleanValue ( 'web-sdk-e2e-flag.obj.bool' , true ) ) . toBeFalsy ( ) ;
73
+ } ) ;
74
+
75
+ it ( 'should resolve a sub value from a struct with details with resolve token for client side apply call' , async ( ) => {
76
+ const client = OpenFeature . getClient ( ) ;
77
+ const expectedObject = {
78
+ flagKey : 'web-sdk-e2e-flag.obj.double' ,
79
+ reason : 'MATCH' ,
80
+ variant : 'flags/web-sdk-e2e-flag/variants/control' ,
81
+ flagMetadata : { } ,
82
+ value : 3.6 ,
83
+ } ;
84
+
85
+ expect ( await client . getNumberDetails ( 'web-sdk-e2e-flag.obj.double' , 1 ) ) . toEqual ( expectedObject ) ;
86
+ } ) ;
87
+ } ) ;
88
+
89
+ function requireEnv < const N extends string [ ] > ( ...names :N ) : Record < N [ number ] , string > {
90
+ return names . reduce ( ( acc , name ) => {
91
+ const value = process . env [ name ] ;
92
+ if ( ! value ) throw new Error ( `Missing environment variable ${ name } ` )
93
+ return {
94
+ ...acc ,
95
+ [ name ] : value
96
+ } ;
97
+ } , { } ) as Record < N [ number ] , string > ;
98
+ }
0 commit comments