@braze/react-native-sdk
Version:
Braze SDK for React Native.
801 lines (688 loc) • 33.5 kB
JavaScript
const NativeEventEmitter = require('react-native').NativeEventEmitter;
const NativeBrazeReactModule = require('../src/specs/NativeBrazeReactModule').default;
import Braze from '../src/index';
import { Platform } from 'react-native';
console.log = jest.fn();
const testCallback = jest.fn();
const testInAppMessageJson = `{\"message\":\"body body\",\"type\":\"MODAL\",\"text_align_message\":\"CENTER\",\"click_action\":\"NONE\",\"message_close\":\"SWIPE\",\"extras\":{\"test\":\"123\",\"foo\":\"bar\"},\"header\":\"hello\",\"text_align_header\":\"CENTER\",\"image_url\":\"https:\\/\\/github.com\\/braze-inc\\/braze-react-native-sdk\\/blob\\/master\\/.github\\/assets\\/logo-dark.png?raw=true\",\"image_style\":\"TOP\",\"btns\":[{\"id\":0,\"text\":\"button 1\",\"click_action\":\"URI\",\"uri\":\"https:\\/\\/www.google.com\",\"use_webview\":true,\"bg_color\":4294967295,\"text_color\":4279990479,\"border_color\":4279990479},{\"id\":1,\"text\":\"button 2\",\"click_action\":\"NONE\",\"bg_color\":4279990479,\"text_color\":4294967295,\"border_color\":4279990479}],\"close_btn_color\":4291085508,\"bg_color\":4294243575,\"frame_color\":3207803699,\"text_color\":4280624421,\"header_text_color\":4280624421,\"trigger_id\":\"NWJhNTMxOThiZjVjZWE0NDZiMTUzYjZiXyRfbXY9NWJhNTMxOThiZjVjZWE0NDZiMTUzYjc1JnBpPWNtcA==\", \"is_test_send\":false}`;
const testPushPayloadJson = {
"use_webview": false,
"is_silent": false,
"ios": {
"aps": {
"alert": {
"title": "Test Message",
"body": "Hello World"
},
"interruption-level": "active"
},
"action_identifier": "com.apple.UNNotificationDefaultActionIdentifier"
},
"payload_type": "push_opened",
"title": "Test Message",
"braze_properties": {},
"is_braze_internal": false,
"body": "Hello World",
"timestamp": 1728060077,
"url": "www.braze.com"
};
afterEach(() => {
jest.clearAllMocks();
});
test('it calls BrazeReactBridge.registerAndroidPushToken on Android', () => {
const platform = Platform.OS;
Platform.OS = 'android';
const token = "some_token";
Braze.registerAndroidPushToken(token);
expect(NativeBrazeReactModule.registerPushToken).toBeCalledWith(token);
Platform.OS = platform;
});
test('it calls BrazeReactBridge.registerAndroidPushToken on iOS', () => {
const platform = Platform.OS;
Platform.OS = 'ios';
const token = "some_token";
Braze.registerAndroidPushToken(token);
expect(NativeBrazeReactModule.registerPushToken).not.toBeCalledWith(token);
Platform.OS = platform;
});
test('it calls BrazeReactBridge.registerPushToken', () => {
const token = "some_token";
Braze.registerPushToken(token);
expect(NativeBrazeReactModule.registerPushToken).toBeCalledWith(token);
});
test('it calls BrazeReactBridge.registerPushToken with null', () => {
const token = null;
Braze.registerPushToken(token);
expect(NativeBrazeReactModule.registerPushToken).toBeCalledWith(token);
});
test('it calls BrazeReactBridge.setGoogleAdvertisingId', () => {
const googleAdvertisingId = "some_ga_id";
const adTrackingEnabled = true;
Braze.setGoogleAdvertisingId(googleAdvertisingId, adTrackingEnabled);
expect(NativeBrazeReactModule.setAdTrackingEnabled).toBeCalledWith(adTrackingEnabled, googleAdvertisingId);
});
test('it calls BrazeReactBridge.setAdTrackingEnabled', () => {
const googleAdvertisingId = "some_ga_id";
const adTrackingEnabled = true;
Braze.setAdTrackingEnabled(adTrackingEnabled, googleAdvertisingId);
expect(NativeBrazeReactModule.setAdTrackingEnabled).toBeCalledWith(adTrackingEnabled, googleAdvertisingId);
});
test('it calls BrazeReactBridge.setIdentifierForVendor', () => {
const idfv = "some_idfv";
Braze.setIdentifierForVendor(idfv);
expect(NativeBrazeReactModule.setIdentifierForVendor).toBeCalledWith(idfv);
});
test('it calls BrazeReactBridge.setIdentifierForAdvertiser', () => {
const idfa = "some_idfa";
Braze.setIdentifierForAdvertiser(idfa);
expect(NativeBrazeReactModule.setIdentifierForAdvertiser).toBeCalledWith(idfa);
});
test('it calls BrazeReactBridge.setFirstName', () => {
const first_name = "some_name";
Braze.setFirstName(first_name);
expect(NativeBrazeReactModule.setFirstName).toBeCalledWith(first_name);
});
test('it calls BrazeReactBridge.setLastName', () => {
const last_name = "some_name";
Braze.setLastName(last_name);
expect(NativeBrazeReactModule.setLastName).toBeCalledWith(last_name);
});
test('it calls BrazeReactBridge.setLanguage', () => {
const language = "to";
Braze.setLanguage(language);
expect(NativeBrazeReactModule.setLanguage).toBeCalledWith(language);
});
test('it calls BrazeReactBridge.setEmail', () => {
const email = "some_email";
Braze.setEmail(email);
expect(NativeBrazeReactModule.setEmail).toBeCalledWith(email);
});
test('it calls BrazeReactBridge.setCountry', () => {
const country = "some_country";
Braze.setCountry(country);
expect(NativeBrazeReactModule.setCountry).toBeCalledWith(country);
});
test('it calls BrazeReactBridge.setHomeCity', () => {
const city = "some_city";
Braze.setHomeCity(city);
expect(NativeBrazeReactModule.setHomeCity).toBeCalledWith(city);
});
test('it calls BrazeReactBridge.setPhoneNumber', () => {
const number = "555-867-5309";
Braze.setPhoneNumber(number);
expect(NativeBrazeReactModule.setPhoneNumber).toBeCalledWith(number);
});
test('it calls BrazeReactBridge.requestFeedRefresh', () => {
Braze.requestFeedRefresh();
expect(NativeBrazeReactModule.requestFeedRefresh).toBeCalled();
});
test('it calls BrazeReactBridge.getBanner', () => {
Braze.getBanner("some_banner_id");
expect(NativeBrazeReactModule.getBanner).toBeCalledWith("some_banner_id");
});
test('it calls BrazeReactBridge.requestBannersRefresh', () => {
Braze.requestBannersRefresh(["sdk-test-1", "sdk-test-2"]);
expect(NativeBrazeReactModule.requestBannersRefresh).toBeCalledWith(["sdk-test-1", "sdk-test-2"]);
});
test('it calls BrazeReactBridge.launchNewsFeed', () => {
Braze.launchNewsFeed();
expect(NativeBrazeReactModule.launchNewsFeed).toBeCalled();
});
test('it calls BrazeReactBridge.getNewsFeedCards', () => {
Braze.getNewsFeedCards();
expect(NativeBrazeReactModule.getNewsFeedCards).toBeCalled();
});
test('it calls BrazeReactBridge.logNewsFeedCardClicked', () => {
const id = "1234";
Braze.logNewsFeedCardClicked(id);
expect(NativeBrazeReactModule.logNewsFeedCardClicked).toBeCalledWith(id);
});
test('it calls BrazeReactBridge.logNewsFeedCardImpression', () => {
const id = "1234";
Braze.logNewsFeedCardImpression(id);
expect(NativeBrazeReactModule.logNewsFeedCardImpression).toBeCalledWith(id);
});
test('it calls BrazeReactBridge.launchContentCards without parameters', () => {
Braze.launchContentCards();
expect(NativeBrazeReactModule.launchContentCards).toBeCalledWith(false);
});
test('it calls BrazeReactBridge.launchContentCards with parameters', () => {
Braze.launchContentCards(true);
expect(NativeBrazeReactModule.launchContentCards).toBeCalledWith(true);
Braze.launchContentCards(false);
expect(NativeBrazeReactModule.launchContentCards).toBeCalledWith(false);
});
test('it calls BrazeReactBridge.getContentCards', () => {
Braze.getContentCards();
expect(NativeBrazeReactModule.getContentCards).toBeCalled();
});
test('it calls BrazeReactBridge.getCachedContentCards', () => {
Braze.getCachedContentCards();
expect(NativeBrazeReactModule.getCachedContentCards).toBeCalled();
});
test('it calls BrazeReactBridge.logContentCardClicked', () => {
const id = "1234";
Braze.logContentCardClicked(id);
expect(NativeBrazeReactModule.logContentCardClicked).toBeCalledWith(id);
});
test('it calls BrazeReactBridge.logContentCardDismissed', () => {
const id = "1234";
Braze.logContentCardDismissed(id);
expect(NativeBrazeReactModule.logContentCardDismissed).toBeCalledWith(id);
});
test('it calls BrazeReactBridge.logContentCardImpression', () => {
const id = "1234";
Braze.logContentCardImpression(id);
expect(NativeBrazeReactModule.logContentCardImpression).toBeCalledWith(id);
});
test('it calls BrazeReactBridge.requestImmediateDataFlush', () => {
Braze.requestImmediateDataFlush();
expect(NativeBrazeReactModule.requestImmediateDataFlush).toBeCalled();
});
test('it calls BrazeReactBridge.wipeData', () => {
Braze.wipeData();
expect(NativeBrazeReactModule.wipeData).toBeCalled();
});
test('it calls BrazeReactBridge.disableSDK', () => {
Braze.disableSDK();
expect(NativeBrazeReactModule.disableSDK).toBeCalled();
});
test('it calls BrazeReactBridge.enableSDK', () => {
Braze.enableSDK();
expect(NativeBrazeReactModule.enableSDK).toBeCalled();
});
test('it calls BrazeReactBridge.requestLocationInitialization', () => {
Braze.requestLocationInitialization();
expect(NativeBrazeReactModule.requestLocationInitialization).toBeCalled();
});
test('it calls BrazeReactBridge.requestGeofences', () => {
const latitude = 40.7128;
const longitude = 74.0060;
Braze.requestGeofences(latitude, longitude);
expect(NativeBrazeReactModule.requestGeofences).toBeCalledWith(latitude, longitude);
});
test('it calls BrazeReactBridge.setLocationCustomAttribute', () => {
const key = "some_key";
const latitude = 40.7128;
const longitude = 74.0060;
Braze.setLocationCustomAttribute(key, latitude, longitude, testCallback);
expect(NativeBrazeReactModule.setLocationCustomAttribute).toBeCalledWith(key, latitude, longitude, testCallback);
});
test('it calls BrazeReactBridge.setLastKnownLocation', () => {
const latitude = 40.7128;
const longitude = 74.0060;
const altitude = 24.0;
const horizontalAccuracy = 25.0;
const verticalAccuracy = 26.0;
Braze.setLastKnownLocation(latitude, longitude, altitude, horizontalAccuracy, verticalAccuracy);
expect(NativeBrazeReactModule.setLastKnownLocation).toBeCalledWith(latitude, longitude, altitude, horizontalAccuracy, verticalAccuracy);
});
test('it calls BrazeReactBridge.setLastKnownLocation with 3 null', () => {
const latitude = 40.7128;
const longitude = 74.0060;
const altitude = null;
const horizontalAccuracy = null;
const verticalAccuracy = null;
Braze.setLastKnownLocation(latitude, longitude, altitude, horizontalAccuracy, verticalAccuracy);
expect(NativeBrazeReactModule.setLastKnownLocation).toBeCalledWith(latitude, longitude, 0, -1, -1);
});
test('it calls BrazeReactBridge.setLastKnownLocation with 2 null', () => {
const latitude = 40.7128;
const longitude = 74.0060;
const altitude = null;
const horizontalAccuracy = 25.0;
const verticalAccuracy = null;
Braze.setLastKnownLocation(latitude, longitude, altitude, horizontalAccuracy, verticalAccuracy);
expect(NativeBrazeReactModule.setLastKnownLocation).toBeCalledWith(latitude, longitude, 0, horizontalAccuracy, -1);
});
test('it calls BrazeReactBridge.setLastKnownLocation with 1 null', () => {
const latitude = 40.7128;
const longitude = 74.0060;
const altitude = 24.0;
const horizontalAccuracy = 25.0;
const verticalAccuracy = null;
Braze.setLastKnownLocation(latitude, longitude, altitude, horizontalAccuracy, verticalAccuracy);
expect(NativeBrazeReactModule.setLastKnownLocation).toBeCalledWith(latitude, longitude, altitude, horizontalAccuracy, -1);
});
test('it calls BrazeReactBridge.requestContentCardsRefresh', () => {
Braze.requestContentCardsRefresh();
expect(NativeBrazeReactModule.requestContentCardsRefresh).toBeCalled();
});
test('it calls BrazeReactBridge.setDateOfBirth', () => {
const year = 2011;
const month = 11;
const day = 23;
Braze.setDateOfBirth(year, month, day);
expect(NativeBrazeReactModule.setDateOfBirth).toBeCalledWith(year, month, day);
});
test('it calls BrazeReactBridge.changeUser', () => {
const user_id = "some_id";
Braze.changeUser(user_id);
expect(NativeBrazeReactModule.changeUser).toBeCalledWith(user_id, null);
});
test('it calls BrazeReactBridge.getUserId', () => {
const user_id = "some_user_id";
Braze.changeUser(user_id);
NativeBrazeReactModule.getUserId.mockImplementation((callback) => {
callback(null, "some_user_id");
});
});
test('it calls BrazeReactBridge.getUserId with null', () => {
const user_id = null;
Braze.changeUser(user_id);
NativeBrazeReactModule.getUserId.mockImplementation((callback) => {
callback(null, null);
});
});
test('it calls BrazeReactBridge.setSdkAuthenticationSignature', () => {
const signature = "signature";
Braze.setSdkAuthenticationSignature(signature);
expect(NativeBrazeReactModule.setSdkAuthenticationSignature).toBeCalledWith(signature);
});
test('it calls BrazeReactBridge.addAlias', () => {
const aliasName = "name";
const aliasLabel = "label";
Braze.addAlias(aliasName, aliasLabel);
expect(NativeBrazeReactModule.addAlias).toBeCalledWith(aliasName, aliasLabel);
});
test('it calls BrazeReactBridge.logCustomEvent', () => {
const event_name = "event_name";
const event_properties = "event_properties";
Braze.logCustomEvent(event_name, event_properties);
expect(NativeBrazeReactModule.logCustomEvent).toBeCalledWith(event_name, event_properties);
});
test('it calls BrazeReactBridge.logPurchase', () => {
const product_id = "product_id";
const price = "price";
const currency_code = "currency_code";
const quantity = "quantity";
const purchase_properties = "purchase_properties";
Braze.logPurchase(product_id, price, currency_code, quantity, purchase_properties);
expect(NativeBrazeReactModule.logPurchase).toBeCalledWith(product_id, price, currency_code, quantity, purchase_properties);
});
test('it calls BrazeReactBridge.setAttributionData', () => {
const network = "some_network";
const campaign = "some_campaign";
const adGroup = "some_adGroup";
const creative = "some_creative";
Braze.setAttributionData(network, campaign, adGroup, creative);
expect(NativeBrazeReactModule.setAttributionData).toBeCalledWith(network, campaign, adGroup, creative);
});
test('it calls BrazeReactBridge.setDateCustomUserAttribute', () => {
const key = "some_key";
const date = new Date('December 17, 1995 03:24:00');
Braze.setCustomUserAttribute(key, date, testCallback);
expect(NativeBrazeReactModule.setDateCustomUserAttribute).toBeCalledWith(key, Math.floor(date.getTime() / 1000), testCallback);
});
test('it calls BrazeReactBridge.setCustomUserAttributeArray', () => {
const key = "some_key";
const array = ['a', 'b'];
Braze.setCustomUserAttribute(key, array, testCallback);
expect(NativeBrazeReactModule.setCustomUserAttributeArray).toBeCalledWith(key, array, testCallback);
});
test('it calls BrazeReactBridge.setCustomUserAttributeObjectArray', () => {
const key = "some_key";
const array = [{'one': 1, 'two': 2, 'three': 3}, {'eight': 8, 'nine': 9}];
Braze.setCustomUserAttribute(key, array, testCallback);
expect(NativeBrazeReactModule.setCustomUserAttributeObjectArray).toBeCalledWith(key, array, testCallback);
});
test('it calls BrazeReactBridge.setCustomUserAttributeObject 4 parameters', () => {
const key = "some_key";
const hash = {'do': 're', 'mi': 'fa'};
const merge = true;
Braze.setCustomUserAttribute(key, hash, merge, testCallback);
expect(NativeBrazeReactModule.setCustomUserAttributeObject).toBeCalledWith(key, hash, merge, testCallback);
});
test('it calls BrazeReactBridge.setCustomUserAttributeObject 3 parameters', () => {
const key = "some_key";
const hash = {'do': 're', 'mi': 'fa'};
// When not given, merge defaults to 'false'
const merge = false;
Braze.setCustomUserAttribute(key, hash, testCallback);
expect(NativeBrazeReactModule.setCustomUserAttributeObject).toBeCalledWith(key, hash, merge, testCallback);
});
test('it calls BrazeReactBridge.setCustomUserAttributeObject with null value', () => {
const key = "some_key";
const hash = null;
// When not given, merge defaults to 'false'
const merge = false;
Braze.setCustomUserAttribute(key, hash, testCallback);
expect(NativeBrazeReactModule.setCustomUserAttributeObject).toBeCalledWith(key, hash, merge, testCallback);
});
test('it calls BrazeReactBridge.setBoolCustomUserAttribute', () => {
const key = "some_key";
const bool_value = true;
Braze.setCustomUserAttribute(key, bool_value, testCallback);
expect(NativeBrazeReactModule.setBoolCustomUserAttribute).toBeCalledWith(key, bool_value, testCallback);
});
test('it calls BrazeReactBridge.setStringCustomUserAttribute', () => {
const key = "some_key";
const string_value = "some string";
Braze.setCustomUserAttribute(key, string_value, testCallback);
expect(NativeBrazeReactModule.setStringCustomUserAttribute).toBeCalledWith(key, string_value, testCallback);
});
test('it calls BrazeReactBridge.setIntCustomUserAttribute', () => {
const key = "some_key";
const int_value = 55;
Braze.setCustomUserAttribute(key, int_value, testCallback);
expect(NativeBrazeReactModule.setIntCustomUserAttribute).toBeCalledWith(key, int_value, testCallback);
});
test('it calls BrazeReactBridge.setDoubleCustomUserAttribute', () => {
const key = "some_key";
const double_value = 3.14;
Braze.setCustomUserAttribute(key, double_value, testCallback);
expect(NativeBrazeReactModule.setDoubleCustomUserAttribute).toBeCalledWith(key, double_value, testCallback);
});
test('it calls BrazeReactBridge.incrementCustomUserAttribute', () => {
const key = "some_key";
const value = 5;
Braze.incrementCustomUserAttribute(key, value, testCallback);
expect(NativeBrazeReactModule.incrementCustomUserAttribute).toBeCalledWith(key, value, testCallback);
});
test('it calls BrazeReactBridge.setGender', () => {
const gender = "male";
Braze.setGender(gender, testCallback);
expect(NativeBrazeReactModule.setGender).toBeCalledWith(gender, testCallback);
});
test('it calls BrazeReactBridge.addToSubscriptionGroup', () => {
const groupId = "some_group_id";
Braze.addToSubscriptionGroup(groupId, testCallback);
expect(NativeBrazeReactModule.addToSubscriptionGroup).toBeCalledWith(groupId, testCallback);
});
test('it calls BrazeReactBridge.removeFromSubscriptionGroup', () => {
const groupId = "some_group_id";
Braze.removeFromSubscriptionGroup(groupId, testCallback);
expect(NativeBrazeReactModule.removeFromSubscriptionGroup).toBeCalledWith(groupId, testCallback);
});
test('it calls BrazeReactBridge.setPushNotificationSubscriptionType', () => {
const sub_type = "some_sub_type";
Braze.setPushNotificationSubscriptionType(sub_type, testCallback);
expect(NativeBrazeReactModule.setPushNotificationSubscriptionType).toBeCalledWith(sub_type, testCallback);
});
test('it calls BrazeReactBridge.setEmailNotificationSubscriptionType', () => {
const sub_type = "some_sub_type";
Braze.setEmailNotificationSubscriptionType(sub_type, testCallback);
expect(NativeBrazeReactModule.setEmailNotificationSubscriptionType).toBeCalledWith(sub_type, testCallback);
});
test('it calls BrazeReactBridge.addToCustomUserAttributeArray', () => {
const key = "some_key";
const value = "some_value"
Braze.addToCustomUserAttributeArray(key, value, testCallback);
expect(NativeBrazeReactModule.addToCustomUserAttributeArray).toBeCalledWith(key, value, testCallback);
});
test('it calls BrazeReactBridge.removeFromCustomUserAttributeArray', () => {
const key = "some_key";
const value = "some_value"
Braze.removeFromCustomUserAttributeArray(key, value, testCallback);
expect(NativeBrazeReactModule.removeFromCustomUserAttributeArray).toBeCalledWith(key, value, testCallback);
});
test('it calls BrazeReactBridge.unsetCustomUserAttribute', () => {
const key = "some_key";
Braze.unsetCustomUserAttribute(key, testCallback);
expect(NativeBrazeReactModule.unsetCustomUserAttribute).toBeCalledWith(key, testCallback);
});
test('it calls BrazeReactBridge.getCardCountForCategories', () => {
const category = "some_category";
Braze.getCardCountForCategories(category, testCallback);
expect(NativeBrazeReactModule.getCardCountForCategories).toBeCalledWith(category, testCallback);
});
test('it calls BrazeReactBridge.getUnreadCardCountForCategories', () => {
const category = "some_category";
Braze.getUnreadCardCountForCategories(category, testCallback);
expect(NativeBrazeReactModule.getUnreadCardCountForCategories).toBeCalledWith(category, testCallback);
});
test('it calls BrazeReactBridge.getInitialURL if defined', () => {
NativeBrazeReactModule.getInitialURL.mockImplementation((callback) => {
callback(null, testPushPayloadJson["url"]);
});
Braze.getInitialURL(testCallback);
expect(NativeBrazeReactModule.getInitialURL).toBeCalled();
expect(testCallback).toBeCalledWith(testPushPayloadJson["url"]);
});
test('it calls BrazeReactBridge.getInitialPushPayload if defined', () => {
NativeBrazeReactModule.getInitialPushPayload.mockImplementation((callback) => {
callback(null, testPushPayloadJson);
});
Braze.getInitialPushPayload(testCallback);
expect(NativeBrazeReactModule.getInitialPushPayload).toBeCalled();
expect(testCallback).toBeCalledWith(testPushPayloadJson);
});
test('it calls BrazeReactBridge.getDeviceId', () => {
NativeBrazeReactModule.getDeviceId.mockImplementation((callback) => {
callback(null, "some_tracking_id");
});
Braze.getDeviceId(testCallback);
expect(NativeBrazeReactModule.getDeviceId).toBeCalled();
expect(testCallback).toBeCalledWith(null, "some_tracking_id");
});
test('it calls the callback with null and logs the error if BrazeReactBridge.getInitialUrl returns an error', () => {
NativeBrazeReactModule.getInitialURL.mockImplementation((callback) => {
callback("error", null);
});
Braze.getInitialURL(testCallback);
expect(NativeBrazeReactModule.getInitialURL).toBeCalled();
expect(testCallback).toBeCalledWith(null);
expect(console.log).toBeCalledWith("error");
});
test('it calls the callback with null and logs the error if BrazeReactBridge.getInitialPushPayload returns an error', () => {
NativeBrazeReactModule.getInitialPushPayload.mockImplementation((callback) => {
callback("error", null);
});
Braze.getInitialPushPayload(testCallback);
expect(NativeBrazeReactModule.getInitialPushPayload).toBeCalled();
expect(testCallback).toBeCalledWith(null);
expect(console.log).toBeCalledWith("error");
});
test('it calls the callback with null if BrazeReactBridge.getInitialUrl is running on Android', () => {
const platform = Platform.OS;
Platform.OS = 'android';
Braze.getInitialURL(testCallback);
expect(testCallback).toBeCalledWith(null);
Platform.OS = platform;
});
test('it calls the callback with null if BrazeReactBridge.getInitialPushPayload is running on Android', () => {
const platform = Platform.OS;
Platform.OS = 'android';
Braze.getInitialPushPayload(testCallback);
expect(testCallback).toBeCalledWith(null);
Platform.OS = platform;
});
test('it calls BrazeReactBridge.subscribeToInAppMessage', () => {
Braze.subscribeToInAppMessage(true, testCallback);
expect(NativeBrazeReactModule.subscribeToInAppMessage).toBeCalledWith(true, testCallback);
Braze.subscribeToInAppMessage(false, testCallback);
expect(NativeBrazeReactModule.subscribeToInAppMessage).toBeCalledWith(false, testCallback);
});
test('it calls BrazeReactBridge.hideCurrentInAppMessage', () => {
Braze.hideCurrentInAppMessage();
expect(NativeBrazeReactModule.hideCurrentInAppMessage).toBeCalled();
});
test('it adds a listener', () => {
let counter = 0;
let testFunction = () => { counter += 1 };
let testEvent = Braze.Events.CONTENT_CARDS_UPDATED;
const nativeEmitter = new NativeEventEmitter();
Braze.addListener(testEvent, testFunction);
nativeEmitter.emit(testEvent);
expect(counter).toBe(1);
});
it('instantiates a BrazeInAppMessage object', () => {
const testMessageBody = "some message body";
const testMessageType = 'MODAL';
const testUri = "https:\\/\\/www.sometesturi.com";
const testImageUrl = "https:\\/\\/www.sometestimageuri.com";
const testZippedAssetsUrl = "https:\\/\\/www.sometestzippedassets.com";
const testUseWebView = true;
const testDuration = 42;
const testExtras = '{\"test\":\"123\",\"foo\":\"bar\"}';
const testClickAction = 'URI';
const testDismissType = 'SWIPE';
const testHeader = "some header";
const testButton0 = '{\"id\":0,\"text\":\"button 1\",\"click_action\":\"URI\",\"uri\":\"https:\\/\\/www.google.com\",\"use_webview\":true,\"bg_color\":4294967295,\"text_color\":4279990479,\"border_color\":4279990479}';
const testButton1 = '{\"id\":1,\"text\":\"button 2\",\"click_action\":\"NONE\",\"bg_color\":4279990479,\"text_color\":4294967295,\"border_color\":4279990479}';
const testButtonString = `[${testButton0}, ${testButton1}]`;
const testButtons = [];
const testIsTestSend = true;
testButtons.push(new Braze.BrazeButton(JSON.parse(testButton0)));
testButtons.push(new Braze.BrazeButton(JSON.parse(testButton1)));
const testJson = `{\"message\":\"${testMessageBody}\",\"type\":\"${testMessageType}\",\"text_align_message\":\"CENTER\",\"click_action\":\"${testClickAction}\",\"message_close\":\"SWIPE\",\"extras\":${testExtras},\"header\":\"${testHeader}\",\"text_align_header\":\"CENTER\",\"image_url\":\"${testImageUrl}\",\"image_style\":\"TOP\",\"btns\":${testButtonString},\"close_btn_color\":4291085508,\"bg_color\":4294243575,\"frame_color\":3207803699,\"text_color\":4280624421,\"header_text_color\":4280624421,\"trigger_id\":\"NWJhNTMxOThiZjVjZWE0NDZiMTUzYjZiXyRfbXY9NWJhNTMxOThiZjVjZWE0NDZiMTUzYjc1JnBpPWNtcA==\",\"uri\":\"${testUri}\",\"zipped_assets_url\":\"${testZippedAssetsUrl}\",\"duration\":${testDuration},\"message_close\":\"${testDismissType}\",\"use_webview\":${testUseWebView}, \"is_test_send\":${testIsTestSend}}`
const inAppMessage = new Braze.BrazeInAppMessage(testJson);
expect(inAppMessage.message).toBe(testMessageBody);
expect(inAppMessage.messageType).toBe(testMessageType.toLowerCase());
expect(inAppMessage.uri).toBe(JSON.parse(`"${testUri}"`));
expect(inAppMessage.useWebView).toBe(testUseWebView);
expect(inAppMessage.zippedAssetsUrl).toBe(JSON.parse(`"${testZippedAssetsUrl}"`));
expect(inAppMessage.duration).toBe(testDuration);
expect(inAppMessage.extras).toEqual(JSON.parse(testExtras));
expect(inAppMessage.clickAction).toBe(testClickAction.toLowerCase());
expect(inAppMessage.dismissType).toBe(testDismissType.toLowerCase());
expect(inAppMessage.imageUrl).toBe(JSON.parse(`"${testImageUrl}"`));
expect(inAppMessage.header).toBe(testHeader);
expect(inAppMessage.inAppMessageJsonString).toBe(testJson);
expect(inAppMessage.buttons).toEqual(testButtons);
expect(inAppMessage.isTestSend).toEqual(testIsTestSend);
});
it('instantiates a BrazeInAppMessage object with the desired defaults', () => {
const defaultMessageBody = '';
const defaultMessageType = 'SLIDEUP';
const defaultUri = '';
const defaultImageUrl = '';
const defaultZippedAssetsUrl = '';
const defaultUseWebView = false;
const defaultDuration = 5;
const defaultExtras = {};
const defaultClickAction = 'NONE';
const defaultDismissType = 'AUTO_DISMISS';
const defaultHeader = '';
const defaultButtons = [];
const defaultIsTestSend = false;
const testJson = `{}`;
const inAppMessage = new Braze.BrazeInAppMessage(testJson);
expect(inAppMessage.message).toBe(defaultMessageBody);
expect(inAppMessage.messageType).toBe(defaultMessageType.toLowerCase());
expect(inAppMessage.uri).toBe(defaultUri);
expect(inAppMessage.useWebView).toBe(defaultUseWebView);
expect(inAppMessage.zippedAssetsUrl).toBe(defaultZippedAssetsUrl);
expect(inAppMessage.duration).toBe(defaultDuration);
expect(inAppMessage.extras).toEqual(defaultExtras);
expect(inAppMessage.clickAction).toBe(defaultClickAction.toLowerCase());
expect(inAppMessage.dismissType).toBe(defaultDismissType.toLowerCase());
expect(inAppMessage.imageUrl).toBe(defaultImageUrl);
expect(inAppMessage.header).toBe(defaultHeader);
expect(inAppMessage.inAppMessageJsonString).toBe(testJson);
expect(inAppMessage.buttons).toEqual(defaultButtons);
expect(inAppMessage.isTestSend).toEqual(defaultIsTestSend);
});
it('returns the original JSON when calling BrazeInAppMessage.toString()', () => {
const inAppMessage = new Braze.BrazeInAppMessage(testInAppMessageJson);
expect(inAppMessage.toString()).toBe(testInAppMessageJson);
});
test('it calls BrazeReactBridge.logInAppMessageClicked', () => {
const inAppMessage = new Braze.BrazeInAppMessage(testInAppMessageJson);
Braze.logInAppMessageClicked(inAppMessage);
expect(NativeBrazeReactModule.logInAppMessageClicked).toBeCalledWith(testInAppMessageJson);
});
test('it calls BrazeReactBridge.logInAppMessageImpression', () => {
const inAppMessage = new Braze.BrazeInAppMessage(testInAppMessageJson);
Braze.logInAppMessageImpression(inAppMessage);
expect(NativeBrazeReactModule.logInAppMessageImpression).toBeCalledWith(testInAppMessageJson);
});
test('it calls BrazeReactBridge.logInAppMessageButtonClicked', () => {
const inAppMessage = new Braze.BrazeInAppMessage(testInAppMessageJson);
const testId = 23;
Braze.logInAppMessageButtonClicked(inAppMessage, testId);
expect(NativeBrazeReactModule.logInAppMessageButtonClicked).toBeCalledWith(testInAppMessageJson, testId);
});
test('calls BrazeReactBridge.requestPushPermission', () => {
const options = {
"alert": true,
"badge": true,
"sound": true,
"timeSensitive": true,
"provisional": true,
}
Braze.requestPushPermission(options);
expect(NativeBrazeReactModule.requestPushPermission).toBeCalledWith(options);
})
it('instantiates a BrazeButton object', () => {
const testId = 53;
const testClickAction = 'URI';
const testText = 'some text';
const testUri = "https:\\/\\/www.sometesturi.com";
const testUseWebView = true;
const testButtonJson = `{\"id\":${testId},\"text\":\"${testText}\",\"click_action\":\"${testClickAction}\",\"uri\":\"${testUri}\",\"use_webview\":${testUseWebView},\"bg_color\":4294967295,\"text_color\":4279990479,\"border_color\":4279990479}`;
const button = new Braze.BrazeButton(JSON.parse(testButtonJson));
expect(button.id).toBe(testId);
expect(button.clickAction).toBe(testClickAction.toLowerCase());
expect(button.text).toBe(testText);
expect(button.uri).toBe(JSON.parse(`"${testUri}"`));
expect(button.useWebView).toBe(testUseWebView);
expect(button.toString()).toBe("BrazeButton text:" + button.text + " uri:" + button.uri + " clickAction:"
+ button.clickAction.toString() + " useWebView:" + button.useWebView.toString());
});
it('instantiates a BrazeButton object with the desired defaults', () => {
const defaultUri = '';
const defaultText = '';
const defaultUseWebView = false;
const defaultClickAction = 'NONE';
const defaultId = 0;
const inAppMessage = new Braze.BrazeButton(`{}`);
expect(inAppMessage.uri).toBe(defaultUri);
expect(inAppMessage.useWebView).toBe(defaultUseWebView);
expect(inAppMessage.text).toBe(defaultText);
expect(inAppMessage.clickAction).toBe(defaultClickAction.toLowerCase());
expect(inAppMessage.id).toBe(defaultId);
});
test('it calls BrazeReactBridge.getFeatureFlag', () => {
const testId = 'test';
Braze.getFeatureFlag('test');
expect(NativeBrazeReactModule.getFeatureFlag).toBeCalledWith(testId);
});
test('it calls BrazeReactBridge.getAllFeatureFlags', () => {
Braze.getAllFeatureFlags();
expect(NativeBrazeReactModule.getAllFeatureFlags).toBeCalled();
});
test('it calls BrazeReactBridge.refreshFeatureFlags', () => {
Braze.refreshFeatureFlags();
expect(NativeBrazeReactModule.refreshFeatureFlags).toBeCalled();
});
test('it calls BrazeReactBridge.logFeatureFlagImpression', () => {
Braze.logFeatureFlagImpression('test');
expect(NativeBrazeReactModule.logFeatureFlagImpression).toBeCalled();
})
test('it calls BrazeReactBridge.getFeatureFlagBooleanProperty', () => {
Braze.getFeatureFlagBooleanProperty('id', 'key');
expect(NativeBrazeReactModule.getFeatureFlagBooleanProperty).toBeCalled();
});
test('it calls BrazeReactBridge.getFeatureFlagStringProperty', () => {
Braze.getFeatureFlagStringProperty('id', 'key');
expect(NativeBrazeReactModule.getFeatureFlagStringProperty).toBeCalled();
});
test('it calls BrazeReactBridge.getFeatureFlagNumberProperty', () => {
Braze.getFeatureFlagNumberProperty('id', 'key');
expect(NativeBrazeReactModule.getFeatureFlagNumberProperty).toBeCalled();
});
test('it calls BrazeReactBridge.getFeatureFlagTimestampProperty', () => {
Braze.getFeatureFlagTimestampProperty('id', 'key');
expect(NativeBrazeReactModule.getFeatureFlagTimestampProperty).toBeCalled();
});
test('it calls BrazeReactBridge.getFeatureFlagJSONProperty', () => {
Braze.getFeatureFlagJSONProperty('id', 'key');
expect(NativeBrazeReactModule.getFeatureFlagJSONProperty).toBeCalled();
});
test('it calls BrazeReactBridge.getFeatureFlagImageProperty', () => {
Braze.getFeatureFlagImageProperty('id', 'key');
expect(NativeBrazeReactModule.getFeatureFlagImageProperty).toBeCalled();
});
test('it calls BrazeReactBridge.updateTrackingPropertyAllowList', () => {
const allowList = {
adding: [Braze.TrackingProperty.ALL_CUSTOM_ATTRIBUTES],
removing: [Braze.TrackingProperty.ANALYTICS_EVENTS, Braze.TrackingProperty.EMAIL],
addingCustomEvents: ['123', '234'],
removingCustomEvents: ['233'],
addingCustomAttributes: ['attr-1'],
removingCustomAttributes: ['attr-2', 'attr3']
};
Braze.updateTrackingPropertyAllowList(allowList);
expect(NativeBrazeReactModule.updateTrackingPropertyAllowList).toBeCalledWith(allowList);
});