Skip to content

Commit

Permalink
chore: refactor analytics test
Browse files Browse the repository at this point in the history
  • Loading branch information
lili2311 committed May 24, 2019
1 parent 2053048 commit 812cada
Show file tree
Hide file tree
Showing 2 changed files with 178 additions and 136 deletions.
136 changes: 0 additions & 136 deletions test/analytics.test.js

This file was deleted.

178 changes: 178 additions & 0 deletions test/analytics.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
import * as tap from 'tap';
import * as Proxyquire from 'proxyquire';
// tslint:disable-next-line
const osName = require('os-name');
import * as sinon from 'sinon';
import * as snyk from '../src/lib';
let old;
const iswindows = osName().toLowerCase().indexOf('windows') === 0;
const proxyquire = Proxyquire.noPreserveCache();
const {test} = tap;

tap.beforeEach((done) => {
old = snyk.config.get('disable-analytics');
snyk.config.delete('disable-analytics');
done();
});

tap.afterEach((done) => {
if (old === undefined) {
snyk.config.delete('disable-analytics');
} else {
snyk.config.set('disable-analytics', old);
}
done();
});

test('analytics disabled', (t) => {
const spy = sinon.spy();
snyk.config.set('disable-analytics', '1');
const analytics = proxyquire('../src/lib/analytics', {
'./request': spy,
});

return analytics().then(() => {
t.equal(spy.called, false, 'the request should not have been made');
});
});

test('analytics', (t) => {
const spy = sinon.spy();
const analytics = proxyquire('../src/lib/analytics', {
'./request': spy,
});

analytics.add('foo', 'bar');

return analytics({
command: '__test__',
args: [],
}).then(() => {
const body = spy.lastCall.args[0].body.data;
t.deepEqual(Object.keys(body).sort(),
['command', 'os', 'version', 'id', 'ci', 'metadata', 'args', 'nodeVersion', 'durationMs'].sort(),
'keys as expected');
});
});

test('bad command', (t) => {
const spy = sinon.spy();
process.argv = ['node', 'script.js', 'random command', '-q'];
const cli = proxyquire('../src/cli', {
'../lib/analytics': proxyquire('../src/lib/analytics', {
'./request': spy,
}),
});

return cli.then(() => {
t.equal(spy.callCount, 1, 'analytics was called');

const payload = spy.args[0][0].body;
t.equal(payload.data.command, 'bad-command', 'correct event name');
t.equal(payload.data.metadata.command, 'random command', 'found original command');
t.equal(payload.data.metadata['error-message'],
'Unknown command "random command"', 'got correct error');
});
});

test('bad command with string error', (t) => {
const spy = sinon.spy();
process.argv = ['node', 'script.js', 'test', '-q'];
const error = new Error('Some error') as any;
error.code = 'CODE';
const cli = proxyquire('../src/cli', {
'../lib/analytics': proxyquire('../src/lib/analytics', {
'./request': spy,
}),

'./args': proxyquire('../src/cli/args', {
'./commands': proxyquire('../src/cli/commands', {
'../../lib/hotload': proxyquire('../src/lib/hotload', {
// windows-based testing uses windows path separator
'..\\cli\\commands\\test'() {
return Promise.reject(error);
},
'../cli/commands/test'() {
return Promise.reject(error);
},
}),
}),
}),
});

return cli.then(() => {
t.equal(spy.callCount, 1, 'analytics was called');

const payload = spy.args[0][0].body;
t.equal(payload.data.command, 'bad-command', 'correct event name');
t.equal(payload.data.metadata.command, 'test', 'found original command');
t.match(payload.data.metadata.error, 'Some error', 'got correct error');
});
});

test('vulns found (thrown as an error)', (t) => {
const spy = sinon.spy();
process.argv = ['node', 'script.js', 'test', '-q'];
const error = new Error('7 vulnerable dependency paths') as any;
error.code = 'VULNS';
const cli = proxyquire('../src/cli', {
'../lib/analytics': proxyquire('../src/lib/analytics', {
'./request': spy,
}),

'./args': proxyquire('../src/cli/args', {
'./commands': proxyquire('../src/cli/commands', {
'../../lib/hotload': proxyquire('../src/lib/hotload', {
// windows-based testing uses windows path separator
'..\\cli\\commands\\test'() {
return Promise.reject(error);
},
'../cli/commands/test'() {
return Promise.reject(error);
},
}),
}),
}),
});

return cli.then(() => {
t.equal(spy.callCount, 1, 'analytics was called');

const payload = spy.args[0][0].body;
t.equal(payload.data.command, 'test', 'correct event name');
t.equal(payload.data.metadata.command, 'test', 'found original command');
t.equal(payload.data.metadata['error-message'], 'Vulnerabilities found', 'got correct vuln count');
});
});

test('test includes data', { skip: iswindows }, (t) => {
const spy = sinon.spy();
process.argv = ['node', 'script.js', 'test', 'snyk-demo-app', '-q'];

const analytics = proxyquire('../src/lib/analytics', {
'./request': spy,
});

const cli = proxyquire('../src/cli', {
'../lib/analytics': analytics,
'./args': proxyquire('../src/cli/args', {
'./commands': proxyquire('../src/cli/commands', {
'../../lib/hotload': proxyquire('../src/lib/hotload', {
'../cli/commands/test': proxyquire('../src/lib/snyk-test', {
'./run-test': proxyquire('../src/lib/snyk-test/run-test', {
'../analytics': analytics,
}),
}),
}),
}),
}),
});

return cli.then(() => {
t.equal(spy.callCount, 1, 'analytics was called');

const payload = spy.args[0][0].body;
t.equal(payload.data.command, 'test', 'correct event name');
t.equal(payload.data.metadata.package, 'snyk-demo-app@*', 'includes package');
});
});

0 comments on commit 812cada

Please sign in to comment.