UNPKG

react-native-bridge-firebase

Version:

Can easy to use Analytics/Crash/Config/Message of Firebase on ReactNative

173 lines (138 loc) 6.18 kB
import faker from 'faker'; import RNBridgeFirebase from '../RNBridgeFirebase'; import Message, { eventHandler } from '../Message'; import EventTypeError from '../error/EventTypeError'; jest.useFakeTimers(); const { EventEmitter } = RNBridgeFirebase; const { triggerEventRegistered } = Message; const { EVENT } = Message; describe('Message Library', () => { it('constructor', () => { const title = faker.lorem.word(); const body = faker.lorem.paragraph(); const firebaseMessage = new Message({ title, body }); expect(firebaseMessage.title).toBe(title); expect(firebaseMessage.body).toBe(body); }); it('registerDevice', () => { RNBridgeFirebase.registerDevice.mockClear(); Message.registerDevice(); expect(RNBridgeFirebase.registerDevice).toBeCalled(); }); it('addEventListener for REMOTE_NOTIFICATION', () => { const handler = jest.fn(); const title = faker.lorem.word(); const body = faker.lorem.paragraph(); const messageId = [faker.random.number(), faker.random.number()]; Message.addEventListener(EVENT.REMOTE_NOTIFICATION, handler); EventEmitter.emit(EVENT.REMOTE_NOTIFICATION, { 'gcm.message_id': messageId[0], aps: { alert: { title, body } }, }); EventEmitter.emit(EVENT.REMOTE_NOTIFICATION, { 'gcm.message_id': messageId[0], aps: { alert: { title, body } }, }); expect(handler).lastCalledWith({ messageId: messageId[0], title, body }); EventEmitter.emit(EVENT.REMOTE_NOTIFICATION, { 'google.message_id': messageId[1], notification: { title, body }, }); EventEmitter.emit(EVENT.REMOTE_NOTIFICATION, { 'google.message_id': messageId[1], notification: { title, body }, }); expect(handler).lastCalledWith({ messageId: messageId[1], title, body }); expect(handler.mock.calls.length).toBe(2); expect(handler.mock.calls[0][0] instanceof Message).toBe(true); expect(handler.mock.calls[1][0] instanceof Message).toBe(true); }); it('addEventListener for REGISTERED', () => { const deviceTokenHandler = jest.fn(); const deviceToken = faker.random.uuid(); const firebaseTokenHandler = jest.fn(); const firebaseToken = faker.random.uuid(); setTimeout.mockClear(); expect(Message.deviceInfo.deviceToken).toBe(RNBridgeFirebase.deviceToken); expect(Message.deviceInfo.firebaseToken).toBe(RNBridgeFirebase.firebaseToken); expect(Message.deviceInfo.appVersion).toBe(RNBridgeFirebase.appVersion); expect(Message.deviceInfo.deviceModel).toBe(RNBridgeFirebase.deviceModel); expect(Message.deviceInfo.deviceName).toBe(RNBridgeFirebase.deviceName); expect(Message.deviceInfo.deviceUid).toBe(RNBridgeFirebase.deviceUid); Message.addEventListener(EVENT.REGISTERED, deviceTokenHandler); EventEmitter.emit(EVENT.DEVICE_REGISTERED, { deviceToken }); expect(setTimeout.mock.calls[0][1]).toBe(3000); expect(deviceTokenHandler).not.toBeCalled(); triggerEventRegistered.flush(); expect(deviceTokenHandler).toBeCalled(); expect(deviceTokenHandler).lastCalledWith(Message.deviceInfo); expect(Message.deviceInfo.deviceToken).toBe(deviceToken); expect(RNBridgeFirebase.subscribeToTopic).not.toBeCalled(); Message.addEventListener(EVENT.REGISTERED, firebaseTokenHandler); EventEmitter.emit(EVENT.REGISTERED, { firebaseToken }); expect(setTimeout.mock.calls[1][1]).toBe(3000); expect(firebaseTokenHandler).not.toBeCalled(); triggerEventRegistered.flush(); expect(firebaseTokenHandler).toBeCalled(); expect(firebaseTokenHandler).lastCalledWith(Message.deviceInfo); expect(Message.deviceInfo.firebaseToken).toBe(firebaseToken); expect(RNBridgeFirebase.subscribeToTopic).lastCalledWith('/topics/all'); }); it('addEventListener error type', () => { const handler = jest.fn(); const type = faker.lorem.word(); eventHandler.removeAllListeners(); let error; try { Message.addEventListener(type, handler); } catch (e) { error = e; } finally { expect(error instanceof EventTypeError).toBe(true); expect(eventHandler.listeners(type).length).toBe(0); } }); it('removeEventListener when has listener', () => { const handler = () => {}; eventHandler.removeAllListeners(); Message.addEventListener(EVENT.REGISTERED, handler); expect(eventHandler.listeners(EVENT.REGISTERED).length).toBe(1); Message.removeEventListener(EVENT.REGISTERED, handler); expect(eventHandler.listeners(EVENT.REGISTERED).length).toBe(0); }); it('removeEventListener when no listener', () => { const handler = () => {}; eventHandler.removeAllListeners(); Message.addEventListener(EVENT.REGISTERED, handler); expect(eventHandler.listeners(EVENT.REGISTERED).length).toBe(1); Message.removeEventListener(EVENT.REMOTE_NOTIFICATION, handler); expect(eventHandler.listeners(EVENT.REGISTERED).length).toBe(1); Message.removeEventListener(EVENT.REGISTERED, () => {}); expect(eventHandler.listeners(EVENT.REGISTERED).length).toBe(1); }); it('removeEventListener error type', () => { const handler = () => {}; eventHandler.removeAllListeners(); Message.addEventListener(EVENT.REGISTERED, handler); let error; const type = faker.lorem.word(); try { Message.removeEventListener(type, handler); } catch (e) { error = e; } finally { expect(error instanceof EventTypeError).toBe(true); expect(eventHandler.listeners(EVENT.REGISTERED).length).toBe(1); } }); it('subscribeToTopic', () => { const topic = `/topics/${faker.lorem.word()}`; RNBridgeFirebase.subscribeToTopic.mockClear(); expect(RNBridgeFirebase.subscribeToTopic).not.toBeCalled(); Message.subscribeToTopic(topic); expect(RNBridgeFirebase.subscribeToTopic).toBeCalled(); }); it('unsubscribeFromTopic', () => { const topic = `/topics/${faker.lorem.word()}`; RNBridgeFirebase.unsubscribeFromTopic.mockClear(); expect(RNBridgeFirebase.unsubscribeFromTopic).not.toBeCalled(); Message.unsubscribeFromTopic(topic); expect(RNBridgeFirebase.unsubscribeFromTopic).toBeCalled(); }); });