@braze/react-native-sdk
Version:
Braze SDK for React Native.
106 lines (94 loc) • 3.63 kB
JavaScript
import { Banner } from '../../src/models/banner';
const { CampaignProperties } = require('../../src/models/campaign-properties');
const testBannerJson = {
trackingId: 'test_tracking_id',
placementId: 'test_placement_id',
isTestSend: true,
isControl: false,
expiresAt: 1672531200,
html: '<div>Test Banner</div>',
properties: {
string_prop: { type: 'string', value: 'test_string' },
bool_prop: { type: 'boolean', value: true },
number_prop: { type: 'number', value: 42.5 },
timestamp_prop: { type: 'datetime', value: 1672531200000 },
json_prop: { type: 'jsonobject', value: { key: 'value' } },
image_prop: { type: 'image', value: 'https://example.com/image.png' },
},
};
afterEach(() => {
jest.clearAllMocks();
});
describe('Banner', () => {
let bannerInstance;
beforeEach(() => {
bannerInstance = new Banner(testBannerJson);
});
test('constructor correctly assigns all properties', () => {
expect(bannerInstance.trackingId).toBe('test_tracking_id');
expect(bannerInstance.placementId).toBe('test_placement_id');
expect(bannerInstance.isTestSend).toBe(true);
expect(bannerInstance.isControl).toBe(false);
expect(bannerInstance.expiresAt).toBe(1672531200);
expect(bannerInstance.html).toBe('<div>Test Banner</div>');
expect(bannerInstance.properties).toBeInstanceOf(CampaignProperties);
});
test('constructor uses default values when properties are missing', () => {
const minimalBanner = new Banner({});
expect(minimalBanner.trackingId).toBe('');
expect(minimalBanner.placementId).toBe('');
expect(minimalBanner.isTestSend).toBe(false);
expect(minimalBanner.isControl).toBe(false);
expect(minimalBanner.expiresAt).toBe(0);
expect(minimalBanner.html).toBe('');
expect(minimalBanner.properties).toBeInstanceOf(CampaignProperties);
});
test('maps stableKey from bridge payload', () => {
const banner = new Banner({
trackingId: 'tid',
placementId: 'pid',
stableKey: 'stable-xyz',
isTestSend: false,
isControl: false,
expiresAt: 2000,
html: '<div/>',
properties: {},
});
expect(banner.stableKey).toBe('stable-xyz');
expect(banner.placementId).toBe('pid');
expect(banner.trackingId).toBe('tid');
});
test('defaults stableKey to empty string when missing', () => {
const banner = new Banner({
trackingId: 'a',
placementId: 'b',
isTestSend: false,
isControl: false,
expiresAt: 0,
html: '',
properties: {},
});
expect(banner.stableKey).toBe('');
});
describe.each([
['getBooleanProperty', 'bool_prop', true, 'string_prop'],
['getStringProperty', 'string_prop', 'test_string', 'bool_prop'],
['getNumberProperty', 'number_prop', 42.5, 'string_prop'],
['getTimestampProperty', 'timestamp_prop', 1672531200000, 'string_prop'],
['getJSONProperty', 'json_prop', { key: 'value' }, 'string_prop'],
['getImageProperty', 'image_prop', 'https://example.com/image.png', 'string_prop'],
])('property getter: %s', (methodName, validKey, expectedValue, wrongTypeKey) => {
test(`correctly delegates to CampaignProperties`, () => {
const value = bannerInstance[methodName](validKey);
expect(value).toEqual(expectedValue);
});
test(`returns null for non-existent key`, () => {
const value = bannerInstance[methodName]('non_existent_key');
expect(value).toBeNull();
});
test(`returns null for mismatched type`, () => {
const value = bannerInstance[methodName](wrongTypeKey);
expect(value).toBeNull();
});
});
});