@@ -1169,6 +1169,136 @@ describe('featureflags', () => {
11691169 } )
11701170 } )
11711171
1172+ describe ( 'device_id in flags requests' , ( ) => {
1173+ beforeEach ( ( ) => {
1174+ // Clear persistence before each test in this suite
1175+ instance . persistence . unregister ( '$device_id' )
1176+ instance . persistence . unregister ( '$stored_person_properties' )
1177+ instance . persistence . unregister ( '$stored_group_properties' )
1178+
1179+ instance . _send_request = jest . fn ( ) . mockImplementation ( ( { callback } ) =>
1180+ callback ( {
1181+ statusCode : 200 ,
1182+ json : {
1183+ featureFlags : {
1184+ first : 'variant-1' ,
1185+ second : true ,
1186+ } ,
1187+ } ,
1188+ } )
1189+ )
1190+ } )
1191+
1192+ afterEach ( ( ) => {
1193+ // Clean up after each test
1194+ instance . persistence . unregister ( '$device_id' )
1195+ instance . persistence . unregister ( '$stored_person_properties' )
1196+ instance . persistence . unregister ( '$stored_group_properties' )
1197+ } )
1198+
1199+ it ( 'should include device_id in flags request when available' , ( ) => {
1200+ instance . persistence . register ( {
1201+ $device_id : 'test-device-uuid-123' ,
1202+ } )
1203+
1204+ featureFlags . reloadFeatureFlags ( )
1205+ jest . runAllTimers ( )
1206+
1207+ expect ( instance . _send_request ) . toHaveBeenCalledTimes ( 1 )
1208+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . toEqual ( {
1209+ token : 'random fake token' ,
1210+ distinct_id : 'blah id' ,
1211+ $device_id : 'test-device-uuid-123' ,
1212+ person_properties : { } ,
1213+ } )
1214+ } )
1215+
1216+ it ( 'should omit device_id when it is null (cookieless mode)' , ( ) => {
1217+ instance . persistence . register ( {
1218+ $device_id : null ,
1219+ } )
1220+
1221+ featureFlags . reloadFeatureFlags ( )
1222+ jest . runAllTimers ( )
1223+
1224+ expect ( instance . _send_request ) . toHaveBeenCalledTimes ( 1 )
1225+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . toEqual ( {
1226+ token : 'random fake token' ,
1227+ distinct_id : 'blah id' ,
1228+ person_properties : { } ,
1229+ } )
1230+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . not . toHaveProperty ( '$device_id' )
1231+ } )
1232+
1233+ it ( 'should omit device_id when it is undefined' , ( ) => {
1234+ // Don't register device_id at all
1235+ featureFlags . reloadFeatureFlags ( )
1236+ jest . runAllTimers ( )
1237+
1238+ expect ( instance . _send_request ) . toHaveBeenCalledTimes ( 1 )
1239+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . toEqual ( {
1240+ token : 'random fake token' ,
1241+ distinct_id : 'blah id' ,
1242+ person_properties : { } ,
1243+ } )
1244+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . not . toHaveProperty ( '$device_id' )
1245+ } )
1246+
1247+ it ( 'should include device_id along with $anon_distinct_id on identify' , ( ) => {
1248+ instance . persistence . register ( {
1249+ $device_id : 'device-uuid-456' ,
1250+ } )
1251+
1252+ featureFlags . setAnonymousDistinctId ( 'anon_id_789' )
1253+ featureFlags . reloadFeatureFlags ( )
1254+ jest . runAllTimers ( )
1255+
1256+ expect ( instance . _send_request ) . toHaveBeenCalledTimes ( 1 )
1257+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . toEqual ( {
1258+ token : 'random fake token' ,
1259+ distinct_id : 'blah id' ,
1260+ $device_id : 'device-uuid-456' ,
1261+ $anon_distinct_id : 'anon_id_789' ,
1262+ person_properties : { } ,
1263+ } )
1264+ } )
1265+
1266+ it ( 'should include device_id with person_properties' , ( ) => {
1267+ instance . persistence . register ( {
1268+ $device_id : 'device-uuid-999' ,
1269+ } )
1270+
1271+ featureFlags . setPersonPropertiesForFlags ( { plan : 'pro' , beta_tester : true } )
1272+ jest . runAllTimers ( )
1273+
1274+ expect ( instance . _send_request ) . toHaveBeenCalledTimes ( 1 )
1275+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . toEqual ( {
1276+ token : 'random fake token' ,
1277+ distinct_id : 'blah id' ,
1278+ $device_id : 'device-uuid-999' ,
1279+ person_properties : { plan : 'pro' , beta_tester : true } ,
1280+ } )
1281+ } )
1282+
1283+ it ( 'should include device_id with group_properties' , ( ) => {
1284+ instance . persistence . register ( {
1285+ $device_id : 'device-uuid-888' ,
1286+ } )
1287+
1288+ featureFlags . setGroupPropertiesForFlags ( { company : { name : 'Acme' , seats : 50 } } )
1289+ jest . runAllTimers ( )
1290+
1291+ expect ( instance . _send_request ) . toHaveBeenCalledTimes ( 1 )
1292+ expect ( instance . _send_request . mock . calls [ 0 ] [ 0 ] . data ) . toEqual ( {
1293+ token : 'random fake token' ,
1294+ distinct_id : 'blah id' ,
1295+ $device_id : 'device-uuid-888' ,
1296+ person_properties : { } ,
1297+ group_properties : { company : { name : 'Acme' , seats : 50 } } ,
1298+ } )
1299+ } )
1300+ } )
1301+
11721302 describe ( 'reloadFeatureFlags' , ( ) => {
11731303 beforeEach ( ( ) => {
11741304 instance . _send_request = jest . fn ( ) . mockImplementation ( ( { callback } ) =>
0 commit comments