1
0
mirror of https://github.com/lana-k/sqliteviz.git synced 2025-12-06 18:18:53 +08:00

add tests for csv module #27

This commit is contained in:
lana-k
2021-04-11 21:51:44 +02:00
parent 8867092601
commit 73c0936927
2 changed files with 120 additions and 3 deletions

View File

@@ -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
}

117
tests/unit/csv.spec.js Normal file
View File

@@ -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)
})
})