11import React , { FC , useState } from 'react'
22import { render , screen , waitFor , fireEvent } from '@testing-library/react'
33import { FlagsmithProvider , useExperiment } from '../react'
4- import { getFlagsmith , testIdentity , getMockFetchWithValue } from './test-constants'
4+ import { getFlagsmith , testIdentity , experimentIdentity , getMockFetchWithValue } from './test-constants'
55
66const eventsUrl = 'https://events.test/'
77
@@ -30,7 +30,7 @@ const Probe: FC<{ feature: string }> = ({ feature }) => {
3030
3131describe ( 'useExperiment' , ( ) => {
3232 test ( 'fires one $flag_exposure when identified and source is SERVER' , async ( ) => {
33- const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : testIdentity } ) )
33+ const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : experimentIdentity } ) )
3434 render (
3535 < FlagsmithProvider flagsmith = { flagsmith } options = { initConfig } >
3636 < Probe feature = "font_size" />
@@ -48,13 +48,13 @@ describe('useExperiment', () => {
4848 expect ( fired ) . toHaveLength ( 1 )
4949 expect ( fired [ 0 ] ) . toEqual ( expect . objectContaining ( {
5050 feature_name : 'font_size' ,
51- identifier : testIdentity ,
52- value : '16 ' ,
51+ identifier : experimentIdentity ,
52+ value : 'control ' ,
5353 } ) )
5454 } )
5555
5656 test ( 'repeated parent re-renders produce only one exposure' , async ( ) => {
57- const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : testIdentity } ) )
57+ const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : experimentIdentity } ) )
5858
5959 const Storm : FC = ( ) => {
6060 const [ n , setN ] = useState ( 0 )
@@ -86,8 +86,8 @@ describe('useExperiment', () => {
8686 expect ( exposures ( mockFetch ) ) . toHaveLength ( 1 )
8787 } )
8888
89- test ( 'a variant value change fires a second exposure' , async ( ) => {
90- const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : testIdentity } ) )
89+ test ( 'a variant change fires a second exposure even when the value is unchanged ' , async ( ) => {
90+ const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : experimentIdentity } ) )
9191 render (
9292 < FlagsmithProvider flagsmith = { flagsmith } options = { initConfig } >
9393 < Probe feature = "font_size" />
@@ -98,26 +98,26 @@ describe('useExperiment', () => {
9898 expect ( JSON . parse ( screen . getByTestId ( 'exp' ) . innerHTML ) ?. value ) . toBe ( 16 )
9999 } )
100100
101- // Next fetch returns font_size = 20 for the identified user .
101+ // Next fetch buckets the user into a different variant with the same value .
102102 getMockFetchWithValue ( mockFetch , {
103103 flags : [
104- { enabled : true , feature_state_value : 20 , feature : { id : 6149 , name : 'font_size' } } ,
104+ { enabled : true , feature_state_value : 16 , variant : 'large' , feature : { id : 6149 , name : 'font_size' } } ,
105105 ] ,
106106 traits : [ ] ,
107107 } )
108108 await flagsmith . getFlags ( )
109109
110110 await waitFor ( ( ) => {
111- expect ( JSON . parse ( screen . getByTestId ( 'exp' ) . innerHTML ) ?. value ) . toBe ( 20 )
111+ expect ( JSON . parse ( screen . getByTestId ( 'exp' ) . innerHTML ) ?. variant ) . toBe ( 'large' )
112112 } )
113113
114114 await flagsmith . flushEvents ( )
115115 const values = exposures ( mockFetch ) . map ( ( e : any ) => e . value )
116- expect ( values ) . toEqual ( [ '16 ' , '20 ' ] )
116+ expect ( values ) . toEqual ( [ 'control ' , 'large ' ] )
117117 } )
118118
119119 test ( 'fires a fresh exposure when identity changes even if the value is unchanged' , async ( ) => {
120- const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : testIdentity } ) )
120+ const { flagsmith, initConfig, mockFetch } = getFlagsmith ( eventsConfig ( { identity : experimentIdentity } ) )
121121 render (
122122 < FlagsmithProvider flagsmith = { flagsmith } options = { initConfig } >
123123 < Probe feature = "font_size" />
@@ -128,10 +128,10 @@ describe('useExperiment', () => {
128128 expect ( JSON . parse ( screen . getByTestId ( 'exp' ) . innerHTML ) ?. value ) . toBe ( 16 )
129129 } )
130130
131- // A different identity that resolves the SAME font_size value (16) .
131+ // A different identity that resolves the SAME font_size variant and value .
132132 getMockFetchWithValue ( mockFetch , {
133133 flags : [
134- { enabled : true , feature_state_value : 16 , feature : { id : 6149 , name : 'font_size' } } ,
134+ { enabled : true , feature_state_value : 16 , variant : 'control' , feature : { id : 6149 , name : 'font_size' } } ,
135135 ] ,
136136 traits : [ ] ,
137137 } )
@@ -141,7 +141,7 @@ describe('useExperiment', () => {
141141 await flagsmith . flushEvents ( )
142142 expect ( exposures ( mockFetch ) ) . toHaveLength ( 2 )
143143 } )
144- expect ( exposures ( mockFetch ) . map ( ( e : any ) => e . identifier ) ) . toEqual ( [ testIdentity , 'other_identity' ] )
144+ expect ( exposures ( mockFetch ) . map ( ( e : any ) => e . identifier ) ) . toEqual ( [ experimentIdentity , 'other_identity' ] )
145145 } )
146146
147147 test ( 'renders the flag but fires no exposure when events are disabled' , async ( ) => {
0 commit comments