@@ -99,6 +99,47 @@ describe('trackEvent', () => {
9999 } ) ;
100100} ) ;
101101
102+ describe ( 'trackExposureEvent' , ( ) => {
103+ test ( 'skips the exposure when no identity resolves' , async ( ) => {
104+ const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( ) ) ;
105+ await flagsmith . init ( initConfig ) ; // anonymous
106+
107+ flagsmith . trackExposureEvent ( 'font_size' , { value : 'control' } ) ;
108+ await flagsmith . flushEvents ( ) ;
109+
110+ expect ( eventCalls ( mockFetch ) ) . toHaveLength ( 0 ) ;
111+ } ) ;
112+
113+ test ( 'explicit identifier records the exposure without a context identity' , async ( ) => {
114+ const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( ) ) ;
115+ await flagsmith . init ( initConfig ) ; // anonymous
116+
117+ flagsmith . trackExposureEvent ( 'font_size' , { identifier : 'anon-device-1' , value : 'control' } ) ;
118+ await flagsmith . flushEvents ( ) ;
119+
120+ const events = JSON . parse ( eventCalls ( mockFetch ) [ 0 ] [ 1 ] . body ) . events ;
121+ expect ( events ) . toHaveLength ( 1 ) ;
122+ expect ( events [ 0 ] ) . toEqual ( expect . objectContaining ( {
123+ event : FLAG_EXPOSURE_EVENT ,
124+ feature_name : 'font_size' ,
125+ identifier : 'anon-device-1' ,
126+ value : 'control' ,
127+ } ) ) ;
128+ } ) ;
129+
130+ test ( 'trackEvent still sends anonymous events with identifier null' , async ( ) => {
131+ const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( ) ) ;
132+ await flagsmith . init ( initConfig ) ; // anonymous
133+
134+ flagsmith . trackEvent ( 'purchase' ) ;
135+ await flagsmith . flushEvents ( ) ;
136+
137+ const events = JSON . parse ( eventCalls ( mockFetch ) [ 0 ] [ 1 ] . body ) . events ;
138+ expect ( events ) . toHaveLength ( 1 ) ;
139+ expect ( events [ 0 ] ) . toEqual ( expect . objectContaining ( { event : 'purchase' , identifier : null } ) ) ;
140+ } ) ;
141+ } ) ;
142+
102143describe ( 'getExperimentFlag' , ( ) => {
103144 test ( 'returns the flag and fires one $flag_exposure when identified and source is SERVER' , async ( ) => {
104145 const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : experimentIdentity } ) ) ;
0 commit comments