11import { readFileSync } from 'fs' ;
22import { join } from 'path' ;
3- import { describe , it , expect } from 'vitest' ;
3+ import { describe , it , expect , vi , beforeEach , afterEach } from 'vitest' ;
44import { FeatureFlagConfigSchema } from '../../../src/featureFlag/FeatureFlagBuilder' ;
5+ import { FeatureFlagProvider } from '../../../src/featureFlag/FeatureFlagProvider' ;
6+ import { ScopedTelemetry } from '../../../src/telemetry/ScopedTelemetry' ;
57
68describe ( 'FeatureFlagProvider' , ( ) => {
79 it ( 'can parse feature flags' , ( ) => {
@@ -15,4 +17,42 @@ describe('FeatureFlagProvider', () => {
1517 expect ( FeatureFlagConfigSchema . parse ( JSON . parse ( file ) ) ) . toBeDefined ( ) ;
1618 } ) ;
1719 } ) ;
20+
21+ describe ( 'gauge registration' , ( ) => {
22+ let provider : FeatureFlagProvider ;
23+ let registerGaugeProviderSpy : ReturnType < typeof vi . spyOn > ;
24+
25+ beforeEach ( ( ) => {
26+ registerGaugeProviderSpy = vi . spyOn ( ScopedTelemetry . prototype , 'registerGaugeProvider' ) ;
27+ } ) ;
28+
29+ afterEach ( ( ) => {
30+ provider ?. close ( ) ;
31+ vi . restoreAllMocks ( ) ;
32+ } ) ;
33+
34+ it ( 'registers gauges for each feature flag' , ( ) => {
35+ provider = new FeatureFlagProvider (
36+ ( ) => Promise . resolve ( { features : { Constants : { enabled : true } } } ) ,
37+ join ( __dirname , '..' , '..' , '..' , 'assets' , 'featureFlag' , 'alpha.json' ) ,
38+ ) ;
39+
40+ expect ( registerGaugeProviderSpy ) . toHaveBeenCalledWith (
41+ 'featureFlag.Constants' ,
42+ expect . any ( Function ) ,
43+ expect . objectContaining ( { description : 'State of Constants feature flag' } ) ,
44+ ) ;
45+ } ) ;
46+
47+ it ( 'gauge provider reflects current flag state' , ( ) => {
48+ provider = new FeatureFlagProvider (
49+ ( ) => Promise . resolve ( { features : { Constants : { enabled : false } } } ) ,
50+ join ( __dirname , '..' , '..' , '..' , 'assets' , 'featureFlag' , 'alpha.json' ) ,
51+ ) ;
52+
53+ const gaugeProvider = registerGaugeProviderSpy . mock . calls [ 0 ] [ 1 ] as ( ) => number ;
54+ // Alpha config has Constants disabled
55+ expect ( gaugeProvider ( ) ) . toBe ( 0 ) ;
56+ } ) ;
57+ } ) ;
1858} ) ;
0 commit comments