deserializeRawResults.test.ts•4.2 kB
import Decimal from 'decimal.js'
import { deserializeRawResult } from '../runtime/utils/deserializeRawResults'
describe('deserializeRawResult', () => {
test('int', () => {
expect(
deserializeRawResult({
columns: ['a'],
types: ['int'],
rows: [[42]],
}),
).toEqual([
{
a: 42,
},
])
})
test('bigint', () => {
expect(
deserializeRawResult({
columns: ['a'],
types: ['bigint'],
rows: [['10000']],
}),
).toEqual([
{
a: BigInt(10_000),
},
])
})
test('floating point', () => {
expect(
deserializeRawResult({
columns: ['a', 'b'],
types: ['float', 'double'],
rows: [[1.5, 0.5]],
}),
).toEqual([
{
a: 1.5,
b: 0.5,
},
])
})
test('string', () => {
expect(deserializeRawResult({ columns: ['a'], types: ['string'], rows: [['hello']] })).toEqual([
{
a: 'hello',
},
])
})
test('enum', () => {
expect(deserializeRawResult({ columns: ['a'], types: ['enum'], rows: [['value']] })).toEqual([
{
a: 'value',
},
])
})
test('bytes', () => {
expect(deserializeRawResult({ columns: ['a'], types: ['bytes'], rows: [['Ynl0ZXM=']] })).toEqual([
{
a: new Uint8Array(Buffer.from('bytes')),
},
])
})
test('bool', () => {
expect(deserializeRawResult({ columns: ['a', 'b'], types: ['bool', 'bool'], rows: [[true, false]] })).toEqual([
{
a: true,
b: false,
},
])
})
test('null', () => {
expect(
deserializeRawResult({
columns: ['a', 'b', 'c'],
types: ['int', 'string', 'bool-array'],
rows: [[null, null, null]],
}),
).toEqual([
{
a: null,
b: null,
c: null,
},
])
})
test('json', () => {
expect(deserializeRawResult({ columns: ['a'], types: ['json'], rows: [[{ a: 1, b: [2] }]] })).toEqual([
{
a: {
a: 1,
b: [2],
},
},
])
})
test('date and time', () => {
expect(
deserializeRawResult({
columns: ['a', 'b', 'c'],
types: ['datetime', 'date', 'time'],
rows: [['2022-01-01T00:00:00.000Z', '2022-05-04', '14:10:45.912']],
}),
).toEqual([
{
a: new Date('2022-01-01T00:00:00.000Z'),
b: new Date('2022-05-04T00:00:00.000Z'),
c: new Date('1970-01-01T14:10:45.912Z'),
},
])
})
test('unsupported', () => {
expect(
deserializeRawResult({
columns: ['a', 'b', 'c'],
types: ['char', 'xml', 'uuid'],
rows: [['a', '<xml></xml>', '00000000-0000-0000-0000-000000000000']],
}),
).toEqual([
{
a: 'a',
b: '<xml></xml>',
c: '00000000-0000-0000-0000-000000000000',
},
])
})
test('array', () => {
expect(
deserializeRawResult({
columns: ['bigints', 'bytes', 'decimals', 'datetimes', 'dates', 'times', 'empty'],
types: [
'bigint-array',
'bytes-array',
'decimal-array',
'datetime-array',
'date-array',
'time-array',
'unknown',
],
rows: [
[
['1234', '123456789'],
['Ynl0ZXM=', 'Ym9uam91cg=='],
['1.2345678', '9999999.456789'],
['2022-01-01T00:00:00.000Z', '2022-05-04T00:00:00.000Z'],
['2022-05-04', '2022-01-01'],
['14:10:45.912', '00:00:00.000'],
[],
],
],
}),
).toEqual([
{
bigints: [BigInt(1234), BigInt(123456789)],
bytes: [new Uint8Array(Buffer.from('bytes')), new Uint8Array(Buffer.from('bonjour'))],
decimals: [new Decimal('1.2345678'), new Decimal('9999999.456789')],
datetimes: [new Date('2022-01-01T00:00:00.000Z'), new Date('2022-05-04T00:00:00.000Z')],
dates: [new Date('2022-05-04T00:00:00.000Z'), new Date('2022-01-01T00:00:00.000Z')],
times: [new Date('1970-01-01T14:10:45.912Z'), new Date('1970-01-01T00:00:00.000Z')],
empty: [],
},
])
})
})