chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
import { describe, it } from 'vitest';
|
||||
import { customType, pgTable } from '~/pg-core/index.ts';
|
||||
|
||||
const anyColumn = customType<{ data: any }>({
|
||||
dataType() {
|
||||
return 'any';
|
||||
},
|
||||
});
|
||||
|
||||
const table = pgTable('test', {
|
||||
a: anyColumn('a').array(),
|
||||
b: anyColumn('a').array().array(),
|
||||
});
|
||||
|
||||
describe.concurrent('makePgArray', () => {
|
||||
it('parses simple 1D array', ({ expect }) => {
|
||||
const input = ['1', '2', '3'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","2","3"}');
|
||||
});
|
||||
|
||||
it('parses simple 2D array', ({ expect }) => {
|
||||
const input = [
|
||||
['1', '2', '3'],
|
||||
['4', '5', '6'],
|
||||
['7', '8', '9'],
|
||||
];
|
||||
const output = table.b.mapToDriverValue(input);
|
||||
expect(output).toEqual('{{"1","2","3"},{"4","5","6"},{"7","8","9"}}');
|
||||
});
|
||||
|
||||
it('parses array with quoted values', ({ expect }) => {
|
||||
const input = ['1', '2,3', '4'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","2,3","4"}');
|
||||
});
|
||||
|
||||
it('parses array with nested quoted values', ({ expect }) => {
|
||||
const input = [
|
||||
['1', '2,3', '4'],
|
||||
['5', '6,7', '8'],
|
||||
];
|
||||
const output = table.b.mapToDriverValue(input);
|
||||
expect(output).toEqual('{{"1","2,3","4"},{"5","6,7","8"}}');
|
||||
});
|
||||
|
||||
it('parses array with empty values', ({ expect }) => {
|
||||
const input = ['1', '', '3'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","","3"}');
|
||||
});
|
||||
|
||||
it('parses array with empty nested values', ({ expect }) => {
|
||||
const input = [
|
||||
['1', '2', '3'],
|
||||
['', '5', '6'],
|
||||
['7', '8', '9'],
|
||||
];
|
||||
const output = table.b.mapToDriverValue(input);
|
||||
expect(output).toEqual('{{"1","2","3"},{"","5","6"},{"7","8","9"}}');
|
||||
});
|
||||
|
||||
it('parses empty array', ({ expect }) => {
|
||||
const input: string[] = [];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{}');
|
||||
});
|
||||
|
||||
it('parses empty nested array', ({ expect }) => {
|
||||
const input = [[]];
|
||||
const output = table.b.mapToDriverValue(input);
|
||||
expect(output).toEqual('{{}}');
|
||||
});
|
||||
|
||||
it('parses single-level array with strings', ({ expect }) => {
|
||||
const input = ['one', 'two', 'three'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"one","two","three"}');
|
||||
});
|
||||
|
||||
it('parses single-level array with mixed values', ({ expect }) => {
|
||||
const input = ['1', 'two', '3'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","two","3"}');
|
||||
});
|
||||
|
||||
it('parses single-level array with commas inside quotes', ({ expect }) => {
|
||||
const input = ['1', 'two, three', '4'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","two, three","4"}');
|
||||
});
|
||||
|
||||
it('parses single-level array with escaped quotes inside quotes', ({ expect }) => {
|
||||
const input = ['1', 'two "three", four', '5'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","two \\"three\\", four","5"}');
|
||||
});
|
||||
|
||||
it('parses two-dimensional array with strings', ({ expect }) => {
|
||||
const input = [
|
||||
['one', 'two', 'three'],
|
||||
['four', 'five', 'six'],
|
||||
['seven', 'eight', 'nine'],
|
||||
];
|
||||
const output = table.b.mapToDriverValue(input);
|
||||
expect(output).toEqual('{{"one","two","three"},{"four","five","six"},{"seven","eight","nine"}}');
|
||||
});
|
||||
|
||||
it('parses two-dimensional array with mixed values and escaped quotes', ({ expect }) => {
|
||||
const input = [
|
||||
['1', 'two "and a half", three', '3'],
|
||||
['four', 'five "and a half", six', '6'],
|
||||
['seven', 'eight', 'nine'],
|
||||
];
|
||||
const output = table.b.mapToDriverValue(input);
|
||||
expect(output).toEqual(
|
||||
'{{"1","two \\"and a half\\", three","3"},{"four","five \\"and a half\\", six","6"},{"seven","eight","nine"}}',
|
||||
);
|
||||
});
|
||||
|
||||
it('parses an array with null values', ({ expect }) => {
|
||||
const input = ['1', null, '3'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1",null,"3"}');
|
||||
});
|
||||
|
||||
it('parses an array with null values in nested arrays', ({ expect }) => {
|
||||
const input = [
|
||||
['1', '2', '3'],
|
||||
[null, '5', '6'],
|
||||
['7', '8', '9'],
|
||||
];
|
||||
const output = table.b.mapToDriverValue(input);
|
||||
expect(output).toEqual('{{"1","2","3"},{null,"5","6"},{"7","8","9"}}');
|
||||
});
|
||||
|
||||
it('parses string array with empty strings', ({ expect }) => {
|
||||
const input = ['1', '', '3'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","","3"}');
|
||||
});
|
||||
|
||||
it('parses string array with backlash strings', ({ expect }) => {
|
||||
const input = ['1', '\n', '3\\'];
|
||||
const output = table.a.mapToDriverValue(input);
|
||||
expect(output).toEqual('{"1","\n","3\\\\"}');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user