UNPKG

@ricepuddin/redux-segment

Version:

Segment.io analytics integration for redux.

197 lines (165 loc) 4.94 kB
import test from 'tape'; import { compose, createStore, applyMiddleware } from 'redux'; import createAnalyticsStub from './helpers/segment-stub'; import { createTracker, EventTypes } from '../src/index'; test('Group - spec', t => { t.test('default', st => { st.plan(2); window.analytics = createAnalyticsStub(); const EVENT_TYPE = 'JOIN_TEAM'; const explicitAction = { type: EVENT_TYPE, meta: { analytics: { eventType: EventTypes.group, }, }, }; const implicitAction = { type: EVENT_TYPE, meta: { analytics: EventTypes.group, }, }; const identity = val => val; const tracker = createTracker(); const store = compose( applyMiddleware(tracker) )(createStore)(identity); const explicitEvent = () => store.dispatch(explicitAction); st.throws(explicitEvent, /missing groupId/, 'throws error when groupId prop is missing'); const implicitEvent = () => store.dispatch(implicitAction); st.throws(implicitEvent, /missing groupId/, 'throws error when groupId props is missing'); window.analytics = null; }); t.test('groupId', st => { st.plan(1); window.analytics = createAnalyticsStub(); const EVENT_TYPE = 'JOIN_TEAM'; const GROUP_ID = '0PsRtFsHB0'; const action = { type: EVENT_TYPE, meta: { analytics: { eventType: EventTypes.group, eventPayload: { groupId: GROUP_ID, }, }, }, }; const identity = val => val; const tracker = createTracker(); const store = compose( applyMiddleware(tracker) )(createStore)(identity); store.dispatch(action); const event = [ window.analytics[0] && window.analytics[0][0], window.analytics[0] && window.analytics[0][1], ]; st.deepEqual(event, ['group', GROUP_ID], 'passes along the groupId of the user'); window.analytics = null; }); t.test('traits', st => { st.plan(1); window.analytics = createAnalyticsStub(); const EVENT_TYPE = 'JOIN_TEAM'; const GROUP_ID = '0PsRtFsHB0'; const TRAITS = { email: 'user@acme.org', login: 'acme', name: 'Acme', type: 'organization', }; const action = { type: EVENT_TYPE, meta: { analytics: { eventType: EventTypes.group, eventPayload: { groupId: GROUP_ID, traits: TRAITS, }, }, }, }; const identity = val => val; const tracker = createTracker(); const store = compose( applyMiddleware(tracker) )(createStore)(identity); store.dispatch(action); const event = [ window.analytics[0] && window.analytics[0][0], window.analytics[0] && window.analytics[0][1], window.analytics[0] && window.analytics[0][2], ]; st.deepEqual(event, ['group', GROUP_ID, TRAITS], 'passes along the traits of the group'); window.analytics = null; }); t.test('options', st => { st.plan(2); window.analytics = createAnalyticsStub(); const EVENT_TYPE = 'JOIN_TEAM'; const GROUP_ID = '0PsRtFsHB0'; const TRAITS = { email: 'user@acme.org', login: 'acme', name: 'Acme', type: 'organization', }; const OPTIONS = { 'All': false, 'Mixpanel': true, 'KISSmetrics': true, }; const action = { type: EVENT_TYPE, meta: { analytics: { eventType: EventTypes.group, eventPayload: { groupId: GROUP_ID, traits: TRAITS, options: OPTIONS, }, }, }, }; const noTraitsAction = { type: EVENT_TYPE, meta: { analytics: { eventType: EventTypes.group, eventPayload: { groupId: GROUP_ID, options: OPTIONS, }, }, }, }; const identity = val => val; const tracker = createTracker(); const store = compose( applyMiddleware(tracker) )(createStore)(identity); store.dispatch(action); const event = [ window.analytics[0] && window.analytics[0][0], window.analytics[0] && window.analytics[0][1], window.analytics[0] && window.analytics[0][2], window.analytics[0] && window.analytics[0][3], ]; st.deepEqual(event, ['group', GROUP_ID, TRAITS, OPTIONS], 'passes along the options of the group event'); store.dispatch(noTraitsAction); const noTraitsEvent = [ window.analytics[1] && window.analytics[1][0], window.analytics[1] && window.analytics[1][1], window.analytics[1] && window.analytics[1][2], window.analytics[1] && window.analytics[1][3], ]; st.deepEqual(noTraitsEvent, ['group', GROUP_ID, {}, OPTIONS], 'passes along the options of the group event when no traits are provided'); window.analytics = null; }); });