elemez2csv
Version:
Use the elemez raw data endpoint to extract data to CSV
124 lines (115 loc) • 4.57 kB
JavaScript
var _ = require('lodash'),
expect = require('chai').expect,
request = require('request'),
sinon = require('sinon'),
elemez2csv = require('../lib/elemez2csv');
describe('elemez2csv', function() {
var argv;
beforeEach(function() {
argv = ['node', 'elemez2csv', '--token', 'TOKEN'];
});
it('should return error if you do not provide token', function(done) {
argv.splice(2, 2);
elemez2csv(argv, function(e) {
expect(e).to.equal('Usage: elemez2csv --token <TOKEN> [--types <TYPES>] [--data <ADDITIONALDATAFIELDS>]');
return done();
});
});
describe('with one page of data', function() {
beforeEach(function() {
sinon.stub(console, 'log');
sinon.stub(request, 'get');
var events = _.map(_.range(0, 5), function(i) {
return {
key: 'k' + i,
scheme: 'sch' + i,
schemeid: 'sid' + i,
received: Date.UTC(2014, i, 1),
raised: Date.UTC(2014, i, 2),
sender: 'sdr' + i,
source: 'src' + i,
type: 't' + i,
data: {
a: i,
b: {
c: i
}
}
};
});
var response0 = {
lastKey: 'X',
events: events
};
var response1 = {
lastKey: null,
events: [
]
};
request.get.onCall(0).yields(null, null, response0);
request.get.onCall(1).yields(null, null, response1);
});
afterEach(function() {
console.log.restore();
request.get.restore();
});
it('should call request correctly', function(done) {
return elemez2csv(argv, function() {
expect(request.get.calledTwice).to.be.true;
var options0 = {
url: 'https://elemez.com/raw/1',
json: true,
headers: {
token: 'TOKEN'
}
};
expect(request.get.args[0][0]).to.deep.equal(options0);
var options1 = {
url: 'https://elemez.com/raw/1',
json: true,
headers: {
token: 'TOKEN'
},
qs: {
lastkey: 'X',
limit: 1000
}
};
expect(request.get.args[1][0]).to.deep.equal(options1);
return done();
});
});
it('should console.log the data as CSV', function(done) {
return elemez2csv(argv, function() {
expect(console.log.callCount).to.equal(5);
expect(console.log.args[0][0]).to.equal('k0,sch0,sid0,2014-01-01T00:00:00.000Z,2014-01-02T00:00:00.000Z,sdr0,src0,t0');
expect(console.log.args[1][0]).to.equal('k1,sch1,sid1,2014-02-01T00:00:00.000Z,2014-02-02T00:00:00.000Z,sdr1,src1,t1');
expect(console.log.args[2][0]).to.equal('k2,sch2,sid2,2014-03-01T00:00:00.000Z,2014-03-02T00:00:00.000Z,sdr2,src2,t2');
expect(console.log.args[3][0]).to.equal('k3,sch3,sid3,2014-04-01T00:00:00.000Z,2014-04-02T00:00:00.000Z,sdr3,src3,t3');
expect(console.log.args[4][0]).to.equal('k4,sch4,sid4,2014-05-01T00:00:00.000Z,2014-05-02T00:00:00.000Z,sdr4,src4,t4');
return done();
});
});
it('should filter types if passed', function(done) {
argv = ['node', 'elemez2csv', '--token', 'TOKEN', '--types', 't2,t3'];
return elemez2csv(argv, function() {
expect(console.log.callCount).to.equal(2);
expect(console.log.args[0][0]).to.equal('k2,sch2,sid2,2014-03-01T00:00:00.000Z,2014-03-02T00:00:00.000Z,sdr2,src2,t2');
expect(console.log.args[1][0]).to.equal('k3,sch3,sid3,2014-04-01T00:00:00.000Z,2014-04-02T00:00:00.000Z,sdr3,src3,t3');
return done();
});
});
it('should return data if passed', function(done) {
argv = ['node', 'elemez2csv', '--token', 'TOKEN', '--data', 'a,c'];
return elemez2csv(argv, function() {
expect(console.log.callCount).to.equal(5);
expect(console.log.args[0][0]).to.equal('k0,sch0,sid0,2014-01-01T00:00:00.000Z,2014-01-02T00:00:00.000Z,sdr0,src0,t0,0,0');
expect(console.log.args[1][0]).to.equal('k1,sch1,sid1,2014-02-01T00:00:00.000Z,2014-02-02T00:00:00.000Z,sdr1,src1,t1,1,1');
expect(console.log.args[2][0]).to.equal('k2,sch2,sid2,2014-03-01T00:00:00.000Z,2014-03-02T00:00:00.000Z,sdr2,src2,t2,2,2');
expect(console.log.args[3][0]).to.equal('k3,sch3,sid3,2014-04-01T00:00:00.000Z,2014-04-02T00:00:00.000Z,sdr3,src3,t3,3,3');
expect(console.log.args[4][0]).to.equal('k4,sch4,sid4,2014-05-01T00:00:00.000Z,2014-05-02T00:00:00.000Z,sdr4,src4,t4,4,4');
return done();
});
});
});
});