@segment/analytics.js-integration-appboy
Version:
The Appboy analytics.js integration.
278 lines (251 loc) • 8.54 kB
JavaScript
var Analytics = require('@segment/analytics.js-core').constructor;
// var integration = require('@segment/analytics.js-integration');
var sandbox = require('@segment/clear-env');
var tester = require('@segment/analytics.js-integration-tester');
var Appboy = require('../lib/');
var assert = require('assert');
var sinon = require('sinon');
describe('Appboy with onlyTrackKnownUsersOnWeb enabled', function() {
var analytics;
var appboy;
var options = {
apiKey: '7c664901-d8c0-4f82-80bf-e7e7a24478e8',
automaticallyDisplayMessages: false,
safariWebsitePushId: '',
enableHtmlInAppMessages: false,
trackAllPages: false,
trackNamedPages: false,
customEndpoint: '',
version: 1,
onlyTrackKnownUsersOnWeb: true, // Default off.
logPurchaseWhenRevenuePresent: false
};
var defaultInitializeArgs = [
[options.apiKey, { baseUrl: 'https://sdk.iad-01.braze.com/api/v3' }]
];
beforeEach(function() {
analytics = new Analytics();
appboy = new Appboy(options);
analytics.use(Appboy);
analytics.use(tester);
analytics.add(appboy);
});
afterEach(function(done) {
analytics.restore();
analytics.reset();
appboy.reset();
sandbox();
done();
});
describe('before loading', function() {
beforeEach(function() {
analytics.stub(appboy, 'load');
});
describe('#initialize', function() {
it('should call #load', function() {
analytics.initialize();
analytics.called(appboy.load);
});
});
});
describe('loading', function() {
it('should load', function(done) {
analytics.load(appboy, done);
});
it('should use initializeV1 if version is set to 1', function(done) {
var V1spy = sinon.spy(appboy, 'initializeV1');
var V2spy = sinon.spy(appboy, 'initializeV2');
appboy.options.version = 1;
analytics.once('ready', function() {
try {
assert(V1spy.called);
assert(!V2spy.called);
done();
} catch (e) {
done(e);
}
});
analytics.initialize();
});
it('should use initializeV2 if version is set to 2', function(done) {
var V1spy = sinon.spy(appboy, 'initializeV1');
var V2spy = sinon.spy(appboy, 'initializeV2');
appboy.options.version = 2;
analytics.once('ready', function() {
try {
assert(V2spy.called);
assert(!V1spy.called);
done();
} catch (e) {
done(e);
}
});
analytics.initialize();
});
it('should use initializeV2 if version is set to 2.7', function(done) {
var V1spy = sinon.spy(appboy, 'initializeV1');
var V2spy = sinon.spy(appboy, 'initializeV2');
appboy.options.version = 2.7;
analytics.once('ready', function() {
try {
assert(V2spy.called);
assert(!V1spy.called);
done();
} catch (e) {
done(e);
}
});
analytics.initialize();
});
describe('initializeV1', function() {
it('should call changeUser if userID is present', function(done) {
analytics.user().id('user-id');
analytics.once('ready', function() {
assert.equal(window.appboy.getUser().getUserId(), 'user-id');
done();
});
analytics.initialize();
});
});
describe('initializeV2', function() {
it('should call changeUser if userID is present', function(done) {
appboy.options.version = 2;
analytics.user().id('user-id');
analytics.once('ready', function() {
window.appboy.getUser().getUserId(function(userId) {
assert.equal(userId, 'user-id');
done();
});
});
analytics.initialize();
});
it('should not initialize appboy sdk as user is not initialized', function(done) {
appboy.options.version = 2;
var spy = sinon.spy(appboy, 'initializeTester');
analytics.once('ready', function() {
try {
assert.deepEqual(spy.args, []);
done();
} catch (e) {
done(e);
}
});
analytics.initialize();
});
it('should not initialize appboy sdk even if anonymous user is set', function(done) {
appboy.options.version = 2;
var spy = sinon.spy(appboy, 'initializeTester');
analytics.once('ready', function() {
try {
assert.deepEqual(spy.args, []);
done();
} catch (e) {
done(e);
}
});
analytics.user().anonymousId('ABC-123-XYZ');
analytics.initialize();
});
it('should initialize appboy sdk if user is identified with defaults', function(done) {
appboy.options.version = 2;
var spy = sinon.spy(appboy, 'initializeTester');
var defaults = {
allowCrawlerActivity: false,
doNotLoadFontAwesome: false,
enableLogging: false,
safariWebsitePushId: '',
localization: 'en',
minimumIntervalBetweenTriggerActionsInSeconds: 30,
openInAppMessagesInNewTab: false,
openNewsFeedCardsInNewTab: false,
sessionTimeoutInSeconds: 30,
serviceWorkerLocation: undefined,
requireExplicitInAppMessageDismissal: false,
enableHtmlInAppMessages: false
};
analytics.once('ready', function() {
try {
assert.deepEqual(spy.args[0][1], defaults);
done();
} catch (e) {
done(e);
}
});
analytics.identify('fakeUserId');
analytics.initialize();
});
});
});
describe('after loading', function() {
var initializeTesterSpy;
var appboyInitializeSpy;
beforeEach(function(done) {
initializeTesterSpy = sinon.spy(appboy, 'initializeTester');
appboyInitializeSpy = sinon.spy(appboy, 'appboyInitialize');
analytics.once('ready', done);
analytics.initialize();
});
describe('#identify', function() {
beforeEach(function() {
analytics.stub(window.appboy, 'changeUser');
analytics.stub(window.appboy, 'initialize');
analytics.stub(window.appboy, 'openSession');
});
it('should call each Appboy method for standard traits', function() {
assert.deepEqual(initializeTesterSpy.args, []);
assert.deepEqual(appboyInitializeSpy.args, []);
analytics.identify('userId', {
firstName: 'Mr',
lastName: 'Sloth'
});
// Initialize is triggered by identify call.
analytics.called(window.appboy.initialize);
assert.deepEqual(initializeTesterSpy.args, defaultInitializeArgs);
assert.deepEqual(appboyInitializeSpy.args.length, 1);
analytics.called(window.appboy.changeUser, 'userId');
});
});
describe('#group', function() {
beforeEach(function() {
analytics.stub(window.appboy, 'changeUser');
});
it('should send group calls with group ID as a custom field after initialized', function() {
analytics.group('0e8c78ea9d97a7b8185e8632', {
name: 'Initech'
});
analytics.didNotCall(window.appboy.changeUser);
analytics.identify('newUserId');
analytics.group('0e8c78ea9d97a7b8185e8632', {
name: 'Initech'
});
analytics.called(window.appboy.changeUser, 'newUserId');
});
});
describe('#track', function() {
beforeEach(function() {
analytics.stub(window.appboy, 'logCustomEvent');
analytics.stub(window.appboy, 'logPurchase');
});
it('should send an event once initialized', function() {
analytics.track('event');
analytics.didNotCall(window.appboy.logCustomEvent, 'event');
analytics.identify('newUserId');
analytics.track('event');
analytics.called(window.appboy.logCustomEvent, 'event');
});
});
describe('#page', function() {
beforeEach(function() {
analytics.stub(window.appboy, 'logCustomEvent');
});
it('should send event once initialized', function() {
appboy.options.trackAllPages = true;
analytics.page();
analytics.didNotCall(window.appboy.logCustomEvent, 'Loaded a Page');
analytics.identify('newUserId');
analytics.page();
analytics.called(window.appboy.logCustomEvent, 'Loaded a Page');
});
});
});
});