diff --git a/src/csv.js b/src/csv.js index d1b1ab9..bb67698 100644 --- a/src/csv.js +++ b/src/csv.js @@ -7,7 +7,7 @@ const hintsByCode = { } export default { - getResut (source) { + getResult (source) { const result = {} if (source.meta.fields) { result.columns = source.meta.fields @@ -20,7 +20,7 @@ export default { result.values = source.data result.columns = [] for (let i = 1; i <= source.data[0].length; i++) { - result.columns.push(`col ${i}`) + result.columns.push(`col${i}`) } } @@ -44,7 +44,7 @@ export default { step: undefined, complete: results => { const res = { - data: this.getResut(results), + data: this.getResult(results), delimiter: results.meta.delimiter, hasErrors: false } diff --git a/tests/unit/csv.spec.js b/tests/unit/csv.spec.js new file mode 100644 index 0000000..89170b0 --- /dev/null +++ b/tests/unit/csv.spec.js @@ -0,0 +1,117 @@ +import { expect } from 'chai' +import sinon from 'sinon' +import csv from '@/csv' +import Papa from 'papaparse' + +describe('csv.js', () => { + afterEach(() => { + sinon.restore() + }) + + it('getResult with fields', () => { + const source = { + data: [ + {id: 1, name: 'foo'}, + {id: 2, name: 'bar'} + ], + meta: { + fields: ['id', 'name'] + } + } + expect(csv.getResult(source)).to.eql({ + columns: ['id', 'name'], + values: [ + [1, 'foo'], + [2, 'bar'] + ] + }) + }) + + it('getResult without fields', () => { + const source = { + data: [ + [1, 'foo'], + [2, 'bar'] + ], + meta: {} + } + expect(csv.getResult(source)).to.eql({ + columns: ['col1', 'col2'], + values: [ + [1, 'foo'], + [2, 'bar'] + ] + }) + }) + + it('parse resolves', async () => { + Papa.parse = sinon.stub().callsFake((file, config) => { + config.complete({ + data: [ + [1, 'foo'], + [2, 'bar'] + ], + errors: [ + { + type: 'Quotes', + code: 'MissingQuotes', + message: 'Quote is missed', + row: 0 + }, + { + type: 'Delimiter', + code: 'UndetectableDelimiter', + message: 'Comma was used as a standart delimiter', + row: 0 + } + ], + meta: { + delimiter: ',', + linebreak: '\n', + aborted: false, + truncated: true + } + }) + }) + const file = {} + const result = await csv.parse(file) + expect(result).to.eql({ + data: { + columns: ['col1', 'col2'], + values: [ + [1, 'foo'], + [2, 'bar'] + ] + }, + delimiter: ',', + hasErrors: true, + messages: [ + { + type: 'Quotes', + code: 'MissingQuotes', + message: 'Quote is missed', + row: 0, + type: 'error', + hint: 'Edit your CSV so that the field has a closing quote char.' + }, + { + type: 'Delimiter', + code: 'UndetectableDelimiter', + message: 'Comma was used as a standart delimiter', + row: 0, + type: 'info', + hint: undefined + } + ] + }) + }) + + it('parse rejects', async () => { + const err = new Error('something went wrong') + Papa.parse = sinon.stub().callsFake((file, config) => { + config.error(err) + }) + const file = {} + await expect(csv.parse(file)).to.be.rejectedWith(err) + }) +})