mirror of https://github.com/BTCPrivate/copay.git
166 lines
4.5 KiB
JavaScript
166 lines
4.5 KiB
JavaScript
'use strict';
|
|
|
|
var _ = require('lodash');
|
|
var chai = chai || require('chai');
|
|
var sinon = sinon || require('sinon');
|
|
var should = chai.should();
|
|
|
|
var csv = require('../js/util/csv')
|
|
var moment = moment || require('moment');
|
|
|
|
describe('csv utils', function() {
|
|
it('should convert simple json', function(done) {
|
|
var data = [
|
|
{ name: 'Lennon John', age: 40 },
|
|
{ name: 'Cobain, Kurt', age: 27 },
|
|
];
|
|
|
|
var descriptor = {
|
|
columns: [
|
|
{ label: 'Name', property: 'name', type: 'string' },
|
|
{ label: 'Age', property: 'age', type: 'number' },
|
|
],
|
|
};
|
|
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('Name,Age\r\nLennon John,40\r\n"Cobain, Kurt",27\r\n');
|
|
done();
|
|
});
|
|
});
|
|
it('should handle empty data', function(done) {
|
|
var data = [];
|
|
|
|
var descriptor = {
|
|
columns: [
|
|
{ label: 'Name', property: 'name', type: 'string' },
|
|
{ label: 'Age', property: 'age', type: 'number' },
|
|
{ property: 'lastLogin', type: 'date' },
|
|
],
|
|
};
|
|
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('Name,Age,lastLogin\r\n');
|
|
done();
|
|
});
|
|
});
|
|
it('should handle null row in data', function(done) {
|
|
var data = [
|
|
{ name: 'John', age: 40 },
|
|
null,
|
|
{ name: 'Kurt', age: 27 },
|
|
];
|
|
|
|
var descriptor = {
|
|
columns: [
|
|
{ label: 'Name', property: 'name', type: 'string' },
|
|
{ label: 'Age', property: 'age', type: 'number' },
|
|
],
|
|
};
|
|
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('Name,Age\r\nJohn,40\r\n,\r\nKurt,27\r\n');
|
|
done();
|
|
});
|
|
});
|
|
it('should format dates', function(done) {
|
|
var data = [
|
|
{ name: 'John', age: 40, lastLogin: moment(1417608870000), },
|
|
{ name: 'Kurt', age: 27, lastLogin: moment('2014-11-01'), },
|
|
];
|
|
|
|
var descriptor = {
|
|
columns: [
|
|
{ property: 'name', type: 'string' },
|
|
{ property: 'age', type: 'number' },
|
|
{ property: 'lastLogin', type: 'date', format: 'YYYY MM DD' },
|
|
],
|
|
};
|
|
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('name,age,lastLogin\r\nJohn,40,2014 12 03\r\nKurt,27,2014 11 01\r\n');
|
|
done();
|
|
});
|
|
});
|
|
it('should compute values from function properties', function(done) {
|
|
var data = [
|
|
{ name: 'John', payments: 400, withdrawals: 300, },
|
|
{ name: 'Kurt', payments: 270.5, withdrawals: 200, },
|
|
];
|
|
|
|
var descriptor = {
|
|
columns: [
|
|
{ property: 'name', type: 'string' },
|
|
{ label: 'Balance', property: function (obj) { return obj.payments - obj.withdrawals; }, type: 'number' },
|
|
],
|
|
};
|
|
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('name,Balance\r\nJohn,100\r\nKurt,70.5\r\n');
|
|
done();
|
|
});
|
|
});
|
|
it('should not fail on error from calculated values', function(done) {
|
|
var data = [
|
|
{ name: 'John', error: 0 },
|
|
{ name: 'Kurt', error: 1 },
|
|
];
|
|
|
|
var descriptor = {
|
|
columns: [{
|
|
property: 'name',
|
|
type: 'string'
|
|
}, {
|
|
label: 'Error',
|
|
property: function(obj) {
|
|
if (obj.error) {
|
|
throw 'dummy error';
|
|
} else {
|
|
return 'ok';
|
|
}
|
|
}
|
|
}, ],
|
|
};
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('name,Error\r\nJohn,ok\r\nKurt,dummy error\r\n');
|
|
done();
|
|
});
|
|
});
|
|
it('should use blank label if label not specified for computed property', function(done) {
|
|
var data = [
|
|
{ name: 'John', payments: 400, withdrawals: 300, },
|
|
{ name: 'Kurt', payments: 270.5, withdrawals: 200, },
|
|
];
|
|
|
|
var descriptor = {
|
|
columns: [
|
|
{ property: 'name', type: 'string' },
|
|
{ property: function (obj) { return obj.payments - obj.withdrawals; }, type: 'number' },
|
|
],
|
|
};
|
|
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('name,\r\nJohn,100\r\nKurt,70.5\r\n');
|
|
done();
|
|
});
|
|
});
|
|
it('should handle non existent properties', function(done) {
|
|
var data = [
|
|
{ name: 'John', age: 40 },
|
|
{ name: 'Kurt', age: 27 },
|
|
];
|
|
|
|
var descriptor = {
|
|
columns: [
|
|
{ property: 'name', type: 'string' },
|
|
{ property: 'age', type: 'number' },
|
|
{ property: 'lastLogin', type: 'date', format: 'YYYY MM DD' },
|
|
],
|
|
};
|
|
|
|
csv.toCsv(data, descriptor, function (err, res) {
|
|
res.should.equal('name,age,lastLogin\r\nJohn,40,\r\nKurt,27,\r\n');
|
|
done();
|
|
});
|
|
});
|
|
});
|