fix(api): Set platform and agent to Unknown if headers are not passed in

This commit is contained in:
Blade Barringer
2016-08-14 23:07:37 -05:00
parent 02545ae439
commit 977bafd2d1
2 changed files with 48 additions and 6 deletions

View File

@@ -94,7 +94,19 @@ describe('analyticsService', () => {
amplitudeNock amplitudeNock
.filteringPath(/httpapi.*platform.*3rd\%20Party.*/g, ''); .filteringPath(/httpapi.*platform.*3rd\%20Party.*/g, '');
data.headers = {}; data.headers = {'x-client': 'some-third-party'};
return analyticsService.track(eventType, data)
.then(() => {
amplitudeNock.done();
});
});
it('logs unknown if headers are not passed in', () => {
amplitudeNock
.filteringPath(/httpapi.*platform.*Unknown.*/g, '');
delete data.headers;
return analyticsService.track(eventType, data) return analyticsService.track(eventType, data)
.then(() => { .then(() => {
@@ -108,6 +120,11 @@ describe('analyticsService', () => {
amplitudeNock amplitudeNock
.filteringPath(/httpapi.*os.*name.*Other.*/g, ''); .filteringPath(/httpapi.*os.*name.*Other.*/g, '');
data.headers = {
'x-client': 'thrid-party',
'user-agent': 'foo',
};
return analyticsService.track(eventType, data) return analyticsService.track(eventType, data)
.then(() => { .then(() => {
amplitudeNock.done(); amplitudeNock.done();
@@ -118,8 +135,10 @@ describe('analyticsService', () => {
amplitudeNock amplitudeNock
.filteringPath(/httpapi.*os.*name.*iOS.*/g, ''); .filteringPath(/httpapi.*os.*name.*iOS.*/g, '');
data.headers = {'x-client': 'habitica-ios', data.headers = {
'user-agent': 'Habitica/148 (iPhone; iOS 9.3; Scale/2.00)'}; 'x-client': 'habitica-ios',
'user-agent': 'Habitica/148 (iPhone; iOS 9.3; Scale/2.00)',
};
return analyticsService.track(eventType, data) return analyticsService.track(eventType, data)
.then(() => { .then(() => {
@@ -131,7 +150,22 @@ describe('analyticsService', () => {
amplitudeNock amplitudeNock
.filteringPath(/httpapi.*os.*name.*Android.*/g, ''); .filteringPath(/httpapi.*os.*name.*Android.*/g, '');
data.headers = {'x-client': 'habitica-android'}; data.headers = {
'x-client': 'habitica-android',
'user-agent': 'Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19',
};
return analyticsService.track(eventType, data)
.then(() => {
amplitudeNock.done();
});
});
it('sets Unkown if headers are not passed in', () => {
amplitudeNock
.filteringPath(/httpapi.*Unknown.*/g, '');
delete data.headers;
return analyticsService.track(eventType, data) return analyticsService.track(eventType, data)
.then(() => { .then(() => {

View File

@@ -89,6 +89,10 @@ let _formatUserData = (user) => {
}; };
let _formatPlatformForAmplitude = (platform) => { let _formatPlatformForAmplitude = (platform) => {
if (!platform) {
return 'Unknown';
}
if (platform in PLATFORM_MAP) { if (platform in PLATFORM_MAP) {
return PLATFORM_MAP[platform]; return PLATFORM_MAP[platform];
} }
@@ -97,6 +101,10 @@ let _formatPlatformForAmplitude = (platform) => {
}; };
let _formatUserAgentForAmplitude = (platform, agentString) => { let _formatUserAgentForAmplitude = (platform, agentString) => {
if (!agentString) {
return 'Unknown';
}
let agent = useragent.lookup(agentString).toJSON(); let agent = useragent.lookup(agentString).toJSON();
let formattedAgent = {}; let formattedAgent = {};
if (platform === 'iOS' || platform === 'Android') { if (platform === 'iOS' || platform === 'Android') {
@@ -115,8 +123,8 @@ let _formatUserAgentForAmplitude = (platform, agentString) => {
let _formatDataForAmplitude = (data) => { let _formatDataForAmplitude = (data) => {
let event_properties = omit(data, AMPLITUDE_PROPERTIES_TO_SCRUB); let event_properties = omit(data, AMPLITUDE_PROPERTIES_TO_SCRUB);
let platform = _formatPlatformForAmplitude(data.headers['x-client']); let platform = _formatPlatformForAmplitude(data.headers && data.headers['x-client']);
let agent = _formatUserAgentForAmplitude(platform, data.headers['user-agent']); let agent = _formatUserAgentForAmplitude(platform, data.headers && data.headers['user-agent']);
let ampData = { let ampData = {
user_id: data.uuid || 'no-user-id-was-provided', user_id: data.uuid || 'no-user-id-was-provided',
platform, platform,