@@ -41,6 +41,12 @@ describe('Iterable', () => {
4141 nativeEmitter . removeAllListeners ( IterableEventName . handleAuthCalled ) ;
4242 nativeEmitter . removeAllListeners ( IterableEventName . handleAuthSuccessCalled ) ;
4343 nativeEmitter . removeAllListeners ( IterableEventName . handleAuthFailureCalled ) ;
44+ nativeEmitter . removeAllListeners (
45+ IterableEventName . handleEmbeddedMessageUpdateCalled
46+ ) ;
47+ nativeEmitter . removeAllListeners (
48+ IterableEventName . handleEmbeddedMessagingDisabledCalled
49+ ) ;
4450
4551 // Clear any pending timers
4652 jest . clearAllTimers ( ) ;
@@ -1229,4 +1235,224 @@ describe('Iterable', () => {
12291235 expect ( Iterable . embeddedManager . isEnabled ) . toBe ( true ) ;
12301236 } ) ;
12311237 } ) ;
1238+
1239+ describe ( 'embedded messaging callbacks' , ( ) => {
1240+ describe ( 'onEmbeddedMessageUpdate' , ( ) => {
1241+ it ( 'should call onEmbeddedMessageUpdate when handleEmbeddedMessageUpdateCalled event is emitted' , ( ) => {
1242+ // sets up event emitter
1243+ const nativeEmitter = new NativeEventEmitter ( ) ;
1244+ nativeEmitter . removeAllListeners (
1245+ IterableEventName . handleEmbeddedMessageUpdateCalled
1246+ ) ;
1247+ // sets up config file and onEmbeddedMessageUpdate callback
1248+ const config = new IterableConfig ( ) ;
1249+ config . logReactNativeSdkCalls = false ;
1250+ config . onEmbeddedMessageUpdate = jest . fn ( ) ;
1251+ // initialize Iterable object
1252+ Iterable . initialize ( 'apiKey' , config ) ;
1253+ // WHEN handleEmbeddedMessageUpdateCalled event is emitted
1254+ nativeEmitter . emit (
1255+ IterableEventName . handleEmbeddedMessageUpdateCalled
1256+ ) ;
1257+ // THEN onEmbeddedMessageUpdate callback is called
1258+ expect ( config . onEmbeddedMessageUpdate ) . toHaveBeenCalled ( ) ;
1259+ expect ( config . onEmbeddedMessageUpdate ) . toHaveBeenCalledTimes ( 1 ) ;
1260+ } ) ;
1261+
1262+ it ( 'should not set up listener if onEmbeddedMessageUpdate is not provided' , ( ) => {
1263+ // sets up event emitter
1264+ const nativeEmitter = new NativeEventEmitter ( ) ;
1265+ nativeEmitter . removeAllListeners (
1266+ IterableEventName . handleEmbeddedMessageUpdateCalled
1267+ ) ;
1268+ // sets up config without onEmbeddedMessageUpdate callback
1269+ const config = new IterableConfig ( ) ;
1270+ config . logReactNativeSdkCalls = false ;
1271+ // initialize Iterable object
1272+ Iterable . initialize ( 'apiKey' , config ) ;
1273+ // WHEN handleEmbeddedMessageUpdateCalled event is emitted
1274+ // THEN no error should occur (no listener was set up)
1275+ expect ( ( ) => {
1276+ nativeEmitter . emit (
1277+ IterableEventName . handleEmbeddedMessageUpdateCalled
1278+ ) ;
1279+ } ) . not . toThrow ( ) ;
1280+ } ) ;
1281+
1282+ it ( 'should call onEmbeddedMessageUpdate multiple times when event is emitted multiple times' , ( ) => {
1283+ // sets up event emitter
1284+ const nativeEmitter = new NativeEventEmitter ( ) ;
1285+ nativeEmitter . removeAllListeners (
1286+ IterableEventName . handleEmbeddedMessageUpdateCalled
1287+ ) ;
1288+ // sets up config with callback
1289+ const config = new IterableConfig ( ) ;
1290+ config . logReactNativeSdkCalls = false ;
1291+ config . onEmbeddedMessageUpdate = jest . fn ( ) ;
1292+ // initialize Iterable object
1293+ Iterable . initialize ( 'apiKey' , config ) ;
1294+ // WHEN handleEmbeddedMessageUpdateCalled event is emitted multiple times
1295+ nativeEmitter . emit (
1296+ IterableEventName . handleEmbeddedMessageUpdateCalled
1297+ ) ;
1298+ nativeEmitter . emit (
1299+ IterableEventName . handleEmbeddedMessageUpdateCalled
1300+ ) ;
1301+ nativeEmitter . emit (
1302+ IterableEventName . handleEmbeddedMessageUpdateCalled
1303+ ) ;
1304+ // THEN onEmbeddedMessageUpdate callback is called three times
1305+ expect ( config . onEmbeddedMessageUpdate ) . toHaveBeenCalledTimes ( 3 ) ;
1306+ } ) ;
1307+
1308+ it ( 'should include onEmbeddedMessageUpdatePresent flag in config dict when callback is provided' , ( ) => {
1309+ // GIVEN a config with onEmbeddedMessageUpdate callback
1310+ const config = new IterableConfig ( ) ;
1311+ config . onEmbeddedMessageUpdate = jest . fn ( ) ;
1312+ // WHEN toDict is called
1313+ const configDict = config . toDict ( ) ;
1314+ // THEN onEmbeddedMessageUpdatePresent is true
1315+ expect ( configDict . onEmbeddedMessageUpdatePresent ) . toBe ( true ) ;
1316+ } ) ;
1317+
1318+ it ( 'should set onEmbeddedMessageUpdatePresent flag to false when callback is not provided' , ( ) => {
1319+ // GIVEN a config without onEmbeddedMessageUpdate callback
1320+ const config = new IterableConfig ( ) ;
1321+ // WHEN toDict is called
1322+ const configDict = config . toDict ( ) ;
1323+ // THEN onEmbeddedMessageUpdatePresent is false
1324+ expect ( configDict . onEmbeddedMessageUpdatePresent ) . toBe ( false ) ;
1325+ } ) ;
1326+ } ) ;
1327+
1328+ describe ( 'onEmbeddedMessagingDisabled' , ( ) => {
1329+ it ( 'should call onEmbeddedMessagingDisabled when handleEmbeddedMessagingDisabledCalled event is emitted' , ( ) => {
1330+ // sets up event emitter
1331+ const nativeEmitter = new NativeEventEmitter ( ) ;
1332+ nativeEmitter . removeAllListeners (
1333+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1334+ ) ;
1335+ // sets up config file and onEmbeddedMessagingDisabled callback
1336+ const config = new IterableConfig ( ) ;
1337+ config . logReactNativeSdkCalls = false ;
1338+ config . onEmbeddedMessagingDisabled = jest . fn ( ) ;
1339+ // initialize Iterable object
1340+ Iterable . initialize ( 'apiKey' , config ) ;
1341+ // WHEN handleEmbeddedMessagingDisabledCalled event is emitted
1342+ nativeEmitter . emit (
1343+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1344+ ) ;
1345+ // THEN onEmbeddedMessagingDisabled callback is called
1346+ expect ( config . onEmbeddedMessagingDisabled ) . toHaveBeenCalled ( ) ;
1347+ expect ( config . onEmbeddedMessagingDisabled ) . toHaveBeenCalledTimes ( 1 ) ;
1348+ } ) ;
1349+
1350+ it ( 'should not set up listener if onEmbeddedMessagingDisabled is not provided' , ( ) => {
1351+ // sets up event emitter
1352+ const nativeEmitter = new NativeEventEmitter ( ) ;
1353+ nativeEmitter . removeAllListeners (
1354+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1355+ ) ;
1356+ // sets up config without onEmbeddedMessagingDisabled callback
1357+ const config = new IterableConfig ( ) ;
1358+ config . logReactNativeSdkCalls = false ;
1359+ // initialize Iterable object
1360+ Iterable . initialize ( 'apiKey' , config ) ;
1361+ // WHEN handleEmbeddedMessagingDisabledCalled event is emitted
1362+ // THEN no error should occur (no listener was set up)
1363+ expect ( ( ) => {
1364+ nativeEmitter . emit (
1365+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1366+ ) ;
1367+ } ) . not . toThrow ( ) ;
1368+ } ) ;
1369+
1370+ it ( 'should call onEmbeddedMessagingDisabled when embedded messaging becomes unavailable' , ( ) => {
1371+ // sets up event emitter
1372+ const nativeEmitter = new NativeEventEmitter ( ) ;
1373+ nativeEmitter . removeAllListeners (
1374+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1375+ ) ;
1376+ // sets up config with callback
1377+ const config = new IterableConfig ( ) ;
1378+ config . logReactNativeSdkCalls = false ;
1379+ config . onEmbeddedMessagingDisabled = jest . fn ( ) ;
1380+ // initialize Iterable object
1381+ Iterable . initialize ( 'apiKey' , config ) ;
1382+ // WHEN handleEmbeddedMessagingDisabledCalled event is emitted
1383+ nativeEmitter . emit (
1384+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1385+ ) ;
1386+ // THEN onEmbeddedMessagingDisabled callback is called
1387+ expect ( config . onEmbeddedMessagingDisabled ) . toHaveBeenCalled ( ) ;
1388+ } ) ;
1389+
1390+ it ( 'should include onEmbeddedMessagingDisabledPresent flag in config dict when callback is provided' , ( ) => {
1391+ // GIVEN a config with onEmbeddedMessagingDisabled callback
1392+ const config = new IterableConfig ( ) ;
1393+ config . onEmbeddedMessagingDisabled = jest . fn ( ) ;
1394+ // WHEN toDict is called
1395+ const configDict = config . toDict ( ) ;
1396+ // THEN onEmbeddedMessagingDisabledPresent is true
1397+ expect ( configDict . onEmbeddedMessagingDisabledPresent ) . toBe ( true ) ;
1398+ } ) ;
1399+
1400+ it ( 'should set onEmbeddedMessagingDisabledPresent flag to false when callback is not provided' , ( ) => {
1401+ // GIVEN a config without onEmbeddedMessagingDisabled callback
1402+ const config = new IterableConfig ( ) ;
1403+ // WHEN toDict is called
1404+ const configDict = config . toDict ( ) ;
1405+ // THEN onEmbeddedMessagingDisabledPresent is false
1406+ expect ( configDict . onEmbeddedMessagingDisabledPresent ) . toBe ( false ) ;
1407+ } ) ;
1408+ } ) ;
1409+
1410+ describe ( 'both embedded callbacks' , ( ) => {
1411+ it ( 'should call both callbacks independently when both are provided' , ( ) => {
1412+ // sets up event emitter
1413+ const nativeEmitter = new NativeEventEmitter ( ) ;
1414+ nativeEmitter . removeAllListeners (
1415+ IterableEventName . handleEmbeddedMessageUpdateCalled
1416+ ) ;
1417+ nativeEmitter . removeAllListeners (
1418+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1419+ ) ;
1420+ // sets up config with both callbacks
1421+ const config = new IterableConfig ( ) ;
1422+ config . logReactNativeSdkCalls = false ;
1423+ config . onEmbeddedMessageUpdate = jest . fn ( ) ;
1424+ config . onEmbeddedMessagingDisabled = jest . fn ( ) ;
1425+ // initialize Iterable object
1426+ Iterable . initialize ( 'apiKey' , config ) ;
1427+ // WHEN handleEmbeddedMessageUpdateCalled event is emitted
1428+ nativeEmitter . emit (
1429+ IterableEventName . handleEmbeddedMessageUpdateCalled
1430+ ) ;
1431+ // THEN only onEmbeddedMessageUpdate is called
1432+ expect ( config . onEmbeddedMessageUpdate ) . toHaveBeenCalled ( ) ;
1433+ expect ( config . onEmbeddedMessagingDisabled ) . not . toHaveBeenCalled ( ) ;
1434+ // Reset mocks
1435+ jest . clearAllMocks ( ) ;
1436+ // WHEN handleEmbeddedMessagingDisabledCalled event is emitted
1437+ nativeEmitter . emit (
1438+ IterableEventName . handleEmbeddedMessagingDisabledCalled
1439+ ) ;
1440+ // THEN only onEmbeddedMessagingDisabled is called
1441+ expect ( config . onEmbeddedMessagingDisabled ) . toHaveBeenCalled ( ) ;
1442+ expect ( config . onEmbeddedMessageUpdate ) . not . toHaveBeenCalled ( ) ;
1443+ } ) ;
1444+
1445+ it ( 'should set both presence flags in config dict when both callbacks are provided' , ( ) => {
1446+ // GIVEN a config with both callbacks
1447+ const config = new IterableConfig ( ) ;
1448+ config . onEmbeddedMessageUpdate = jest . fn ( ) ;
1449+ config . onEmbeddedMessagingDisabled = jest . fn ( ) ;
1450+ // WHEN toDict is called
1451+ const configDict = config . toDict ( ) ;
1452+ // THEN both presence flags are true
1453+ expect ( configDict . onEmbeddedMessageUpdatePresent ) . toBe ( true ) ;
1454+ expect ( configDict . onEmbeddedMessagingDisabledPresent ) . toBe ( true ) ;
1455+ } ) ;
1456+ } ) ;
1457+ } ) ;
12321458} ) ;
0 commit comments