Track sleeping in the inn with analytics (fixes #9561) (#9685)

* Sleep status is tracked by analytics when toggled.

* Modify test: test that analytics is called with 'sleep' event and data passed includes the user's new sleep status
This commit is contained in:
Cai Lu
2018-01-29 12:48:24 -08:00
committed by Sabe Jones
parent 94619737e8
commit 12aa8a78c1
3 changed files with 23 additions and 3 deletions

View File

@@ -1,6 +1,7 @@
import { import {
generateUser, generateUser,
} from '../../../../helpers/api-integration/v3'; } from '../../../../helpers/api-integration/v3';
import { mockAnalyticsService as analytics } from '../../../../../website/server/libs/analyticsService';
describe('POST /user/sleep', () => { describe('POST /user/sleep', () => {
let user; let user;
@@ -22,4 +23,15 @@ describe('POST /user/sleep', () => {
await user.sync(); await user.sync();
expect(user.preferences.sleep).to.be.false; expect(user.preferences.sleep).to.be.false;
}); });
it('sends sleep status to analytics service', async () => {
sandbox.spy(analytics, 'track');
await user.post('/user/sleep');
await user.sync();
expect(analytics.track).to.be.calledOnce;
expect(analytics.track).to.be.calledWith('sleep', sandbox.match.has('status', user.preferences.sleep));
sandbox.restore();
});
}); });

View File

@@ -1,5 +1,14 @@
module.exports = function sleep (user) { module.exports = function sleep (user, req = {}, analytics) {
user.preferences.sleep = !user.preferences.sleep; user.preferences.sleep = !user.preferences.sleep;
if (analytics) {
analytics.track('sleep', {
uuid: user._id,
status: user.preferences.sleep,
category: 'behavior',
headers: req.headers,
});
}
return [user.preferences.sleep]; return [user.preferences.sleep];
}; };

View File

@@ -729,7 +729,7 @@ api.sleep = {
url: '/user/sleep', url: '/user/sleep',
async handler (req, res) { async handler (req, res) {
let user = res.locals.user; let user = res.locals.user;
let sleepRes = common.ops.sleep(user); let sleepRes = common.ops.sleep(user, req, res.analytics);
await user.save(); await user.save();
res.respond(200, ...sleepRes); res.respond(200, ...sleepRes);
}, },
@@ -787,7 +787,6 @@ api.buy = {
let quantity = 1; let quantity = 1;
if (req.body.quantity) quantity = req.body.quantity; if (req.body.quantity) quantity = req.body.quantity;
req.quantity = quantity; req.quantity = quantity;
buyRes = common.ops.buy(user, req, res.analytics); buyRes = common.ops.buy(user, req, res.analytics);
await user.save(); await user.save();