You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
442 lines
9.2 KiB
442 lines
9.2 KiB
1 year ago
|
import { c3, initChart } from './c3-helper'
|
||
|
|
||
|
const $$ = c3.chart.internal.fn
|
||
|
$$.d3 = require('d3')
|
||
|
|
||
|
describe('data.convert', () => {
|
||
|
describe('$$.convertColumnsToData', () => {
|
||
|
it('converts column data to normalized data', () => {
|
||
|
const data = $$.convertColumnsToData([
|
||
|
['cat1', 'a', 'b', 'c', 'd'],
|
||
|
['data1', 30, 200, 100, 400],
|
||
|
['cat2', 'b', 'a', 'c', 'd', 'e', 'f'],
|
||
|
['data2', 400, 60, 200, 800, 10, 10]
|
||
|
])
|
||
|
|
||
|
expect(data).toEqual({
|
||
|
keys: ['cat1', 'data1', 'cat2', 'data2'],
|
||
|
rows: [
|
||
|
{
|
||
|
cat1: 'a',
|
||
|
data1: 30,
|
||
|
cat2: 'b',
|
||
|
data2: 400
|
||
|
},
|
||
|
{
|
||
|
cat1: 'b',
|
||
|
data1: 200,
|
||
|
cat2: 'a',
|
||
|
data2: 60
|
||
|
},
|
||
|
{
|
||
|
cat1: 'c',
|
||
|
data1: 100,
|
||
|
cat2: 'c',
|
||
|
data2: 200
|
||
|
},
|
||
|
{
|
||
|
cat1: 'd',
|
||
|
data1: 400,
|
||
|
cat2: 'd',
|
||
|
data2: 800
|
||
|
},
|
||
|
{
|
||
|
cat2: 'e',
|
||
|
data2: 10
|
||
|
},
|
||
|
{
|
||
|
cat2: 'f',
|
||
|
data2: 10
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
})
|
||
|
|
||
|
it('throws when the column data contains undefined', () => {
|
||
|
expect(() =>
|
||
|
$$.convertColumnsToData([
|
||
|
['cat1', 'a', 'b', 'c', 'd'],
|
||
|
['data1', undefined]
|
||
|
])
|
||
|
).toThrowError(Error, /Source data is missing a component/)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('$$.convertRowsToData', () => {
|
||
|
it('converts the row data to normalized data', () => {
|
||
|
const data = $$.convertRowsToData([
|
||
|
['data1', 'data2', 'data3'],
|
||
|
[90, 120, 300],
|
||
|
[40, 160, 240],
|
||
|
[50, 200, 290],
|
||
|
[120, 160, 230],
|
||
|
[80, 130, 300],
|
||
|
[90, 220, 320]
|
||
|
])
|
||
|
|
||
|
expect(data).toEqual({
|
||
|
keys: ['data1', 'data2', 'data3'],
|
||
|
rows: [
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 120,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 40,
|
||
|
data2: 160,
|
||
|
data3: 240
|
||
|
},
|
||
|
{
|
||
|
data1: 50,
|
||
|
data2: 200,
|
||
|
data3: 290
|
||
|
},
|
||
|
{
|
||
|
data1: 120,
|
||
|
data2: 160,
|
||
|
data3: 230
|
||
|
},
|
||
|
{
|
||
|
data1: 80,
|
||
|
data2: 130,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 220,
|
||
|
data3: 320
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
})
|
||
|
|
||
|
it('throws when the row data contains undefined', () => {
|
||
|
expect(() =>
|
||
|
$$.convertRowsToData([
|
||
|
['data1', 'data2', 'data3'],
|
||
|
[40, 160, 240],
|
||
|
[90, 120, undefined]
|
||
|
])
|
||
|
).toThrowError(Error, /Source data is missing a component/)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('$$.convertXsvToData', () => {
|
||
|
it('converts the csv data to normalized data', () => {
|
||
|
const data = [
|
||
|
{
|
||
|
data1: '90',
|
||
|
data2: '120',
|
||
|
data3: '300'
|
||
|
},
|
||
|
{
|
||
|
data1: '40',
|
||
|
data2: '160',
|
||
|
data3: '240'
|
||
|
},
|
||
|
{
|
||
|
data1: '50',
|
||
|
data2: '200',
|
||
|
data3: '290'
|
||
|
},
|
||
|
{
|
||
|
data1: '120',
|
||
|
data2: '160',
|
||
|
data3: '230'
|
||
|
},
|
||
|
{
|
||
|
data1: '80',
|
||
|
data2: '130',
|
||
|
data3: '300'
|
||
|
},
|
||
|
{
|
||
|
data1: '90',
|
||
|
data2: '220',
|
||
|
data3: '320'
|
||
|
}
|
||
|
]
|
||
|
;(data as any).columns = ['data1', 'data2', 'data3']
|
||
|
expect($$.convertXsvToData(data)).toEqual({
|
||
|
keys: ['data1', 'data2', 'data3'],
|
||
|
rows: [
|
||
|
{
|
||
|
data1: '90',
|
||
|
data2: '120',
|
||
|
data3: '300'
|
||
|
},
|
||
|
{
|
||
|
data1: '40',
|
||
|
data2: '160',
|
||
|
data3: '240'
|
||
|
},
|
||
|
{
|
||
|
data1: '50',
|
||
|
data2: '200',
|
||
|
data3: '290'
|
||
|
},
|
||
|
{
|
||
|
data1: '120',
|
||
|
data2: '160',
|
||
|
data3: '230'
|
||
|
},
|
||
|
{
|
||
|
data1: '80',
|
||
|
data2: '130',
|
||
|
data3: '300'
|
||
|
},
|
||
|
{
|
||
|
data1: '90',
|
||
|
data2: '220',
|
||
|
data3: '320'
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
})
|
||
|
|
||
|
it('converts one lined CSV data', () => {
|
||
|
const data = []
|
||
|
;(data as any).columns = ['data1', 'data2', 'data3']
|
||
|
expect($$.convertXsvToData(data)).toEqual({
|
||
|
keys: ['data1', 'data2', 'data3'],
|
||
|
rows: [
|
||
|
{
|
||
|
data1: null,
|
||
|
data2: null,
|
||
|
data3: null
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('$$.convertDataToTargets', () => {
|
||
|
beforeEach(() => {
|
||
|
$$.cache = {}
|
||
|
|
||
|
$$.data = {
|
||
|
xs: []
|
||
|
}
|
||
|
|
||
|
$$.config = {
|
||
|
data_idConverter: v => v
|
||
|
}
|
||
|
})
|
||
|
|
||
|
it('converts the legacy data format into targets', () => {
|
||
|
const targets = $$.convertDataToTargets([
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 120,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 40,
|
||
|
data2: 160,
|
||
|
data3: 240
|
||
|
}
|
||
|
])
|
||
|
|
||
|
expect(targets).toEqual([
|
||
|
{
|
||
|
id: 'data1',
|
||
|
id_org: 'data1',
|
||
|
values: [
|
||
|
{ x: 0, value: 90, id: 'data1', index: 0 },
|
||
|
{ x: 1, value: 40, id: 'data1', index: 1 }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
id: 'data2',
|
||
|
id_org: 'data2',
|
||
|
values: [
|
||
|
{ x: 0, value: 120, id: 'data2', index: 0 },
|
||
|
{ x: 1, value: 160, id: 'data2', index: 1 }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
id: 'data3',
|
||
|
id_org: 'data3',
|
||
|
values: [
|
||
|
{ x: 0, value: 300, id: 'data3', index: 0 },
|
||
|
{ x: 1, value: 240, id: 'data3', index: 1 }
|
||
|
]
|
||
|
}
|
||
|
])
|
||
|
})
|
||
|
|
||
|
it('converts the data into targets', () => {
|
||
|
const targets = $$.convertDataToTargets({
|
||
|
keys: ['data1', 'data2', 'data3'],
|
||
|
rows: [
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 120,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 40,
|
||
|
data2: 160,
|
||
|
data3: 240
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
|
||
|
expect(targets).toEqual([
|
||
|
{
|
||
|
id: 'data1',
|
||
|
id_org: 'data1',
|
||
|
values: [
|
||
|
{ x: 0, value: 90, id: 'data1', index: 0 },
|
||
|
{ x: 1, value: 40, id: 'data1', index: 1 }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
id: 'data2',
|
||
|
id_org: 'data2',
|
||
|
values: [
|
||
|
{ x: 0, value: 120, id: 'data2', index: 0 },
|
||
|
{ x: 1, value: 160, id: 'data2', index: 1 }
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
id: 'data3',
|
||
|
id_org: 'data3',
|
||
|
values: [
|
||
|
{ x: 0, value: 300, id: 'data3', index: 0 },
|
||
|
{ x: 1, value: 240, id: 'data3', index: 1 }
|
||
|
]
|
||
|
}
|
||
|
])
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('$$.convertJsonToData', () => {
|
||
|
it('converts JSON as object (no keys provided)', () => {
|
||
|
const data = $$.convertJsonToData({
|
||
|
data1: [90, 40, 50, 120, 80, 90],
|
||
|
data2: [120, 160, 200, 160, 130, 220],
|
||
|
data3: [300, 240, 290, 230, 300, 320]
|
||
|
})
|
||
|
|
||
|
expect(data).toEqual({
|
||
|
keys: ['data1', 'data2', 'data3'],
|
||
|
rows: [
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 120,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 40,
|
||
|
data2: 160,
|
||
|
data3: 240
|
||
|
},
|
||
|
{
|
||
|
data1: 50,
|
||
|
data2: 200,
|
||
|
data3: 290
|
||
|
},
|
||
|
{
|
||
|
data1: 120,
|
||
|
data2: 160,
|
||
|
data3: 230
|
||
|
},
|
||
|
{
|
||
|
data1: 80,
|
||
|
data2: 130,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 220,
|
||
|
data3: 320
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
})
|
||
|
|
||
|
it('converts JSON as rows (keys provided)', () => {
|
||
|
const data = $$.convertJsonToData(
|
||
|
[
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 120,
|
||
|
data3: 300,
|
||
|
unused: 42
|
||
|
},
|
||
|
{
|
||
|
data1: 40,
|
||
|
data2: 160,
|
||
|
data3: 240,
|
||
|
unused: 42
|
||
|
},
|
||
|
{
|
||
|
data1: 50,
|
||
|
data2: 200,
|
||
|
data3: 290,
|
||
|
unused: 42
|
||
|
},
|
||
|
{
|
||
|
data1: 120,
|
||
|
data2: 160,
|
||
|
data3: 230,
|
||
|
unused: 42
|
||
|
},
|
||
|
{
|
||
|
data1: 80,
|
||
|
data2: 130,
|
||
|
data3: 300,
|
||
|
unused: 42
|
||
|
},
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 220,
|
||
|
data3: 320,
|
||
|
unused: 42
|
||
|
}
|
||
|
],
|
||
|
{
|
||
|
value: ['data1', 'data2', 'data3']
|
||
|
}
|
||
|
)
|
||
|
|
||
|
expect(data).toEqual({
|
||
|
keys: ['data1', 'data2', 'data3'],
|
||
|
rows: [
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 120,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 40,
|
||
|
data2: 160,
|
||
|
data3: 240
|
||
|
},
|
||
|
{
|
||
|
data1: 50,
|
||
|
data2: 200,
|
||
|
data3: 290
|
||
|
},
|
||
|
{
|
||
|
data1: 120,
|
||
|
data2: 160,
|
||
|
data3: 230
|
||
|
},
|
||
|
{
|
||
|
data1: 80,
|
||
|
data2: 130,
|
||
|
data3: 300
|
||
|
},
|
||
|
{
|
||
|
data1: 90,
|
||
|
data2: 220,
|
||
|
data3: 320
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
})
|