Files

211 lines
7.4 KiB
JavaScript

var json2xls = require('../lib/json2xls');
var prep = json2xls.prepareJson;
var arrayData = require('./arrayData.json');
var objectData = require('./objectData.json');
var weirdData = require('./weirdData');
describe('prepare',function() {
beforeEach(function() {
this.addMatchers({
toEqualFields: function() {
return {
compare: function(actual,expected) {
var res;
var res = expected && expected.all && expected.all(function(item,i) {
return actual[i] && Object.keys(item).all(function(field) {
return actual[i][field] === item[field];
});
})
return {
pass: res
}
}
}
}
})
})
describe('handling illegal xml characters', function() {
it('should remove vertical tabs',function() {
var res = prep(weirdData);
expect(res.rows[0][1]).toEqual(' foo bar ');
});
});
describe('when the data is an empty array', function() {
it('should create an empty config', function() {
var res = prep([]);
expect(res.cols).toEqual([]);
expect(res.rows).toEqual([]);
});
});
describe('when the data is an empty object', function() {
it('should create a config with one empty row', function() {
var res = prep({});
expect(res.cols).toEqual([]);
expect(res.rows).toEqual([[]]);
});
});
describe('when the data is an array', function() {
describe('cols',function() {
it('should create a cols part',function() {
var res = prep(arrayData);
expect(res.cols).toBeDefined();
});
it('should create the correct cols',function() {
var res = prep(arrayData);
expect(res.cols).toEqualFields([{
caption: 'name',
type: 'string'
},{
caption: 'date',
type: 'string'
},{
caption: 'number',
type: 'number'
}]);
});
it('should create the correct cols when fields are given as array',function() {
var res = prep(arrayData,{
fields: ['date','name']
});
expect(res.cols).toEqualFields([{
caption: 'date',
type: 'string'
},{
caption: 'name',
type: 'string'
}]);
});
it('should create the correct cols when fields are given as object',function() {
var res = prep(arrayData,{
fields: {
number: 'string',
name: 'string'
}
});
expect(res.cols).toEqualFields([{
caption: 'number',
type: 'string'
},{
caption: 'name',
type: 'string'
}]);
});
it('should create caption and type field',function() {
var cols = prep(arrayData).cols;
expect(cols[0].caption).toBeDefined();
expect(cols[0].type).toBeDefined();
});
});
describe('rows',function() {
it('should create a rows part',function() {
var res = prep(arrayData);
expect(res.rows).toBeDefined();
});
it('should create rows with data in the correct order',function() {
var res = prep(arrayData);
expect(res.rows[0]).toEqual([ 'Ivy Dickson', '2013-05-27T11:04:15-07:00', 10 ]);
expect(res.rows[1]).toEqual([ 'Walker Lynch','2014-02-07T22:09:58-08:00', 2 ]);
expect(res.rows[2]).toEqual([ 'Maxwell U. Holden', '2013-06-16T05:29:13-07:00', 5]);
});
});
describe('style',function() {
it('should have the provided style xml file',function() {
var fn = 'test.xml';
var res = prep(arrayData,{
style: fn
});
expect(res.stylesXmlFile).toBe(fn);
});
});
});
describe('when the data is an object', function() {
describe('cols',function() {
it('should create a cols part',function() {
var res = prep(objectData);
expect(res.cols).toBeDefined();
});
it('should create caption and type field',function() {
var cols = prep(objectData).cols;
expect(cols[0].caption).toBeDefined();
expect(cols[0].type).toBeDefined();
});
});
describe('rows',function() {
it('should create a rows part',function() {
var res = prep(objectData);
expect(res.rows).toBeDefined();
});
});
describe('style',function() {
it('should have the provided style xml file',function() {
var fn = 'test.xml';
var res = prep(objectData,{
style: fn
});
expect(res.stylesXmlFile).toBe(fn);
});
});
describe('display of nested fields',function() {
it('should write nested fields as json',function() {
var res = prep(objectData);
expect(res.rows[0][3]).toEqual('{"field":"foo"}');
});
});
});
describe('working with missing fields',function() {
it('should leave missing fields blank',function() {
var res = prep([
{
"firma": "transportabel",
"internet": "http://www.transportabel.de",
"Branche": "Möbel",
"STRASSE": "Messingweg 49",
"ort": "Münster-Sprakel",
"TEL_ZENTRALE": "(0251) 29 79 46"
},
{
"firma": "Soziale Möbelbörse & mehr e.V.",
"internet": "http://www.gersch-ms.de",
"Branche": "Möbel",
"STRASSE": "Nienkamp 80",
"ort": "Münster-Wienburg",
"TEL_ZENTRALE": "(0251) 53 40 76"
},
{
"firma": "Bald Eckhart e.K.",
"Branche": "Möbel",
"STRASSE": "Weseler Str. 628",
"ort": "Münster-Mecklenbeck",
"TEL_ZENTRALE": "(0251) 53 40 76"
}
]);
expect(res.rows[2][1]).toEqual(null);
})
})
describe('prepping with config',function() {
it('should get a nested field',function() {
var res = prep(objectData,{
fields:['nested.field']
});
expect(res.rows[0]).toEqual(['foo']);
})
});
});