mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 07:37:25 +01:00
Create analytics.track
This commit is contained in:
@@ -5,17 +5,31 @@ var expect = chai.expect
|
|||||||
var rewire = require('rewire');
|
var rewire = require('rewire');
|
||||||
|
|
||||||
describe('analytics', function() {
|
describe('analytics', function() {
|
||||||
|
// Mocks
|
||||||
var amplitudeMock = sinon.stub();
|
var amplitudeMock = sinon.stub();
|
||||||
var googleAnalyticsMock = sinon.stub();
|
var googleAnalyticsMock = sinon.stub();
|
||||||
|
var amplitudeTrack = sinon.stub();
|
||||||
|
var googleEvent = sinon.stub().returns({
|
||||||
|
send: function() { }
|
||||||
|
});
|
||||||
|
var googleItem = sinon.stub().returns({
|
||||||
|
send: function() { }
|
||||||
|
});
|
||||||
|
var googleTransaction = sinon.stub().returns({
|
||||||
|
item: googleItem
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function(){
|
||||||
|
amplitudeMock.reset();
|
||||||
|
amplitudeTrack.reset();
|
||||||
|
googleEvent.reset();
|
||||||
|
googleTransaction.reset();
|
||||||
|
googleItem.reset();
|
||||||
|
});
|
||||||
|
|
||||||
describe('init', function() {
|
describe('init', function() {
|
||||||
var analytics = rewire('../../website/src/analytics');
|
var analytics = rewire('../../website/src/analytics');
|
||||||
|
|
||||||
afterEach(function(){
|
|
||||||
amplitudeMock.reset();
|
|
||||||
googleAnalyticsMock.reset();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('throws an error if no options are passed in', function() {
|
it('throws an error if no options are passed in', function() {
|
||||||
expect(analytics).to.throw('No options provided');
|
expect(analytics).to.throw('No options provided');
|
||||||
});
|
});
|
||||||
@@ -43,6 +57,54 @@ describe('analytics', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('track', function() {
|
||||||
|
|
||||||
|
var event_type = 'Cron';
|
||||||
|
var analyticsData = {
|
||||||
|
gaCategory: 'behavior',
|
||||||
|
gaLabel: 'Ga Label',
|
||||||
|
uuid: 'unique-user-id',
|
||||||
|
resting: true,
|
||||||
|
cronCount: 5
|
||||||
|
}
|
||||||
|
|
||||||
|
var analytics = rewire('../../website/src/analytics');
|
||||||
|
var initializedAnalytics;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
analytics.__set__('Amplitude', amplitudeMock);
|
||||||
|
initializedAnalytics = analytics({amplitudeToken: 'token'});
|
||||||
|
analytics.__set__('amplitude.track', amplitudeTrack);
|
||||||
|
analytics.__set__('ga.event', googleEvent);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('tracks event in amplitude', function() {
|
||||||
|
|
||||||
|
initializedAnalytics.track(event_type, analyticsData);
|
||||||
|
|
||||||
|
expect(amplitudeTrack).to.be.calledOnce;
|
||||||
|
expect(amplitudeTrack).to.be.calledWith({
|
||||||
|
event_type: 'Cron',
|
||||||
|
user_id: 'unique-user-id',
|
||||||
|
event_properties: {
|
||||||
|
resting: true,
|
||||||
|
cronCount: 5
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('tracks event in google analytics', function() {
|
||||||
|
initializedAnalytics.track(event_type, analyticsData);
|
||||||
|
|
||||||
|
expect(googleEvent).to.be.calledOnce;
|
||||||
|
expect(googleEvent).to.be.calledWith(
|
||||||
|
'behavior',
|
||||||
|
'Cron',
|
||||||
|
'Ga Label'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('trackPurchase', function() {
|
describe('trackPurchase', function() {
|
||||||
|
|
||||||
var purchaseData = {
|
var purchaseData = {
|
||||||
@@ -57,16 +119,6 @@ describe('analytics', function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var analytics = rewire('../../website/src/analytics');
|
var analytics = rewire('../../website/src/analytics');
|
||||||
var amplitudeTrack = sinon.stub();
|
|
||||||
var googleEvent = sinon.stub().returns({
|
|
||||||
send: function() { return true }
|
|
||||||
});
|
|
||||||
var googleItem = sinon.stub().returns({
|
|
||||||
send: function() {}
|
|
||||||
});
|
|
||||||
var googleTransaction = sinon.stub().returns({
|
|
||||||
item: googleItem
|
|
||||||
});
|
|
||||||
var initializedAnalytics;
|
var initializedAnalytics;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
@@ -77,13 +129,6 @@ describe('analytics', function() {
|
|||||||
analytics.__set__('ga.transaction', googleTransaction);
|
analytics.__set__('ga.transaction', googleTransaction);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(function(){
|
|
||||||
amplitudeMock.reset();
|
|
||||||
googleEvent.reset();
|
|
||||||
googleTransaction.reset();
|
|
||||||
googleItem.reset();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('calls amplitude.track', function() {
|
it('calls amplitude.track', function() {
|
||||||
|
|
||||||
initializedAnalytics.trackPurchase(purchaseData);
|
initializedAnalytics.trackPurchase(purchaseData);
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ var ga;
|
|||||||
var amplitude;
|
var amplitude;
|
||||||
|
|
||||||
var analytics = {
|
var analytics = {
|
||||||
trackPurchase: trackPurchase
|
trackPurchase: trackPurchase,
|
||||||
|
track: track
|
||||||
}
|
}
|
||||||
|
|
||||||
function init(options) {
|
function init(options) {
|
||||||
@@ -18,6 +19,23 @@ function init(options) {
|
|||||||
return analytics;
|
return analytics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function track(eventType, data) {
|
||||||
|
_sendDataToAmplitude(eventType, data);
|
||||||
|
_sendDataToGoogle(eventType, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _sendDataToAmplitude(eventType, data) {
|
||||||
|
var amplitudeData = _formatDataForAmplitude(data);
|
||||||
|
amplitudeData.event_type = eventType;
|
||||||
|
amplitude.track(amplitudeData);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _sendDataToGoogle(eventType, data) {
|
||||||
|
var category = data.gaCategory;
|
||||||
|
var label = data.gaLabel;
|
||||||
|
ga.event(category, eventType, label).send();
|
||||||
|
}
|
||||||
|
|
||||||
function trackPurchase(data) {
|
function trackPurchase(data) {
|
||||||
_sendPurchaseDataToAmplitude(data);
|
_sendPurchaseDataToAmplitude(data);
|
||||||
_sendPurchaseDataToGoogle(data);
|
_sendPurchaseDataToGoogle(data);
|
||||||
@@ -32,7 +50,7 @@ function _sendPurchaseDataToAmplitude(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _formatDataForAmplitude(data) {
|
function _formatDataForAmplitude(data) {
|
||||||
var PROPERTIES_TO_SCRUB = ['uuid', 'user', 'purchaseValue'];
|
var PROPERTIES_TO_SCRUB = ['uuid', 'user', 'purchaseValue', 'gaCategory', 'gaLabel'];
|
||||||
var event_properties = _.omit(data, PROPERTIES_TO_SCRUB);
|
var event_properties = _.omit(data, PROPERTIES_TO_SCRUB);
|
||||||
|
|
||||||
var ampData = {
|
var ampData = {
|
||||||
|
|||||||
Reference in New Issue
Block a user