import { afterAll, beforeAll, expect, test } from 'vitest'; import { PGlite } from '@electric-sql/pglite'; import type { PgliteDatabase } from 'drizzle-orm/pglite'; import { drizzle } from 'drizzle-orm/pglite'; import { reset, seed } from '../../../src/index.ts'; import * as schema from './pgSchema.ts'; import { sql } from 'drizzle-orm'; import cities from '../../../src/datasets/cityNames.ts'; import countries from '../../../src/datasets/countries.ts'; import firstNames from '../../../src/datasets/firstNames.ts'; import lastNames from '../../../src/datasets/lastNames.ts'; let client: PGlite; let db: PgliteDatabase; beforeAll(async () => { client = new PGlite(); db = drizzle(client); await db.execute(sql`CREATE SCHEMA "seeder_lib_pg";`); await db.execute( sql` DO $$ BEGIN CREATE TYPE "seeder_lib_pg"."enum" AS ENUM('sad', 'ok', 'happy'); EXCEPTION WHEN duplicate_object THEN null; END $$; `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."default_table" ( "default_string" text ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."default_array_table" ( "default_string" text[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."boolean_table" ( "boolean" boolean ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."boolean_array_table" ( "boolean" boolean[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."city_table" ( "city" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."city_unique_table" ( "city_unique" varchar(256), CONSTRAINT "city_unique_table_city_unique_unique" UNIQUE("city_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."city_array_table" ( "city" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."company_name_table" ( "company_name" text ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."company_name_unique_table" ( "company_name_unique" varchar(256), CONSTRAINT "company_name_unique_table_company_name_unique_unique" UNIQUE("company_name_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."company_name_array_table" ( "company_name" text[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."country_table" ( "country" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."country_unique_table" ( "country_unique" varchar(256), CONSTRAINT "country_unique_table_country_unique_unique" UNIQUE("country_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."country_array_table" ( "country" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."date_table" ( "date" date ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."date_array_table" ( "date" date[], "date_string" date[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."email_table" ( "email" varchar(256), CONSTRAINT "email_table_email_unique" UNIQUE("email") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."email_array_table" ( "email" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."enum_table" ( "mood_enum" "seeder_lib_pg"."enum" ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."first_name_table" ( "first_name" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."first_name_unique_table" ( "first_name_unique" varchar(256), CONSTRAINT "first_name_unique_table_first_name_unique_unique" UNIQUE("first_name_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."first_name_array_table" ( "first_name" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."full_name__table" ( "full_name_" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."full_name_unique_table" ( "full_name_unique" varchar(256), CONSTRAINT "full_name_unique_table_full_name_unique_unique" UNIQUE("full_name_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."full_name_array_table" ( "full_name" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."int_primary_key_table" ( "int_primary_key" integer, CONSTRAINT "int_primary_key_table_int_primary_key_unique" UNIQUE("int_primary_key") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."int_table" ( "int" integer ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."int_unique_table" ( "int_unique" integer, CONSTRAINT "int_unique_table_int_unique_unique" UNIQUE("int_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."int_array_table" ( "int" integer[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."interval_table" ( "interval" interval ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."interval_unique_table" ( "interval_unique" interval, CONSTRAINT "interval_unique_table_interval_unique_unique" UNIQUE("interval_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."interval_array_table" ( "interval" interval[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."job_Title_table" ( "job_title" text ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."job_title_array_table" ( "job_title" text[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."json_table" ( "json" json ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."json_array_table" ( "json" json[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."last_name_table" ( "last_name" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."last_name_unique_table" ( "last_name_unique" varchar(256), CONSTRAINT "last_name_unique_table_last_name_unique_unique" UNIQUE("last_name_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."last_name_array_table" ( "last_name" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."line_table" ( "line" "line" ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."line_array_table" ( "line" "line"[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."lorem_ipsum_table" ( "lorem_ipsum" text ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."lorem_ipsum_array_table" ( "lorem_ipsum" text[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."number_table" ( "number" real ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."number_unique_table" ( "number_unique" real, CONSTRAINT "number_unique_table_number_unique_unique" UNIQUE("number_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."number_array_table" ( "number" real[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."phone_number_table" ( "phoneNumber" varchar(256), "phone_number_template" varchar(256), "phone_number_prefixes" varchar(256), CONSTRAINT "phone_number_table_phoneNumber_unique" UNIQUE("phoneNumber"), CONSTRAINT "phone_number_table_phone_number_template_unique" UNIQUE("phone_number_template"), CONSTRAINT "phone_number_table_phone_number_prefixes_unique" UNIQUE("phone_number_prefixes") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."phone_number_array_table" ( "phoneNumber" varchar(256)[], "phone_number_template" varchar(256)[], "phone_number_prefixes" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."point_table" ( "point" "point" ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."point_array_table" ( "point" "point"[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."postcode_table" ( "postcode" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."postcode_unique_table" ( "postcode_unique" varchar(256), CONSTRAINT "postcode_unique_table_postcode_unique_unique" UNIQUE("postcode_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."postcode_array_table" ( "postcode" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."state_table" ( "state" text ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."state_array_table" ( "state" text[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."street_address_table" ( "street_address" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."street_address_unique_table" ( "street_address_unique" varchar(256), CONSTRAINT "street_address_unique_table_street_address_unique_unique" UNIQUE("street_address_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."street_address_array_table" ( "street_address" varchar(256)[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."string_table" ( "string" text ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."string_unique_table" ( "string_unique" varchar(256), CONSTRAINT "string_unique_table_string_unique_unique" UNIQUE("string_unique") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."string_array_table" ( "string" text[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."time_table" ( "time" time ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."time_array_table" ( "time" time[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."timestamp_table" ( "timestamp" timestamp ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."timestamp_array_table" ( "timestamp" timestamp[] ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."values_from_array_table" ( "values_from_array_not_null" varchar(256) NOT NULL, "values_from_array_weighted_not_null" varchar(256) NOT NULL ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."values_from_array_unique_table" ( "values_from_array" varchar(256), "values_from_array_not_null" varchar(256) NOT NULL, "values_from_array_weighted" varchar(256), "values_from_array_weighted_not_null" varchar(256) NOT NULL, CONSTRAINT "values_from_array_unique_table_values_from_array_unique" UNIQUE("values_from_array"), CONSTRAINT "values_from_array_unique_table_values_from_array_not_null_unique" UNIQUE("values_from_array_not_null"), CONSTRAINT "values_from_array_unique_table_values_from_array_weighted_unique" UNIQUE("values_from_array_weighted"), CONSTRAINT "values_from_array_unique_table_values_from_array_weighted_not_null_unique" UNIQUE("values_from_array_weighted_not_null") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."values_from_array_array_table" ( "values_from_array" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."weighted_random_table" ( "weighted_random" varchar(256) ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."weighted_random_with_unique_gens_table" ( "weighted_random_with_unique_gens" varchar(256), CONSTRAINT "weighted_random_with_unique_gens_table_weighted_random_with_unique_gens_unique" UNIQUE("weighted_random_with_unique_gens") ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."uuid_table" ( "uuid" uuid ); `, ); await db.execute( sql` CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."uuid_array_table" ( "uuid" uuid[] ); `, ); }); afterAll(async () => { await client.close(); }); const count = 1000; test('enum generator test', async () => { await seed(db, { enumTable: schema.enumTable }).refine(() => ({ enumTable: { count, }, })); const data = await db.select().from(schema.enumTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('default generator test', async () => { await seed(db, { defaultTable: schema.defaultTable }).refine((funcs) => ({ defaultTable: { count, columns: { defaultString: funcs.default({ defaultValue: 'default string' }), }, }, })); const data = await db.select().from(schema.defaultTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('default array generator test', async () => { await seed(db, { defaultTable: schema.defaultArrayTable }).refine((funcs) => ({ defaultTable: { count, columns: { defaultString: funcs.default({ defaultValue: 'default string', arraySize: 3 }), }, }, })); const data = await db.select().from(schema.defaultArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('valuesFromArray generator test', async () => { await seed(db, { valuesFromArrayTable: schema.valuesFromArrayTable }).refine((funcs) => ({ valuesFromArrayTable: { count, columns: { valuesFromArrayNotNull: funcs.valuesFromArray({ values: lastNames }), valuesFromArrayWeightedNotNull: funcs.valuesFromArray({ values: [ { values: lastNames, weight: 0.3 }, { values: firstNames, weight: 0.7 }, ], }), }, }, })); const data = await db.select().from(schema.valuesFromArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('valuesFromArray unique generator test', async () => { // valuesFromArrayUniqueTable----------------------------------------------------------------------------------- await seed(db, { valuesFromArrayUniqueTable: schema.valuesFromArrayUniqueTable }, { seed: 1 }).refine((funcs) => ({ valuesFromArrayUniqueTable: { count: 49998, columns: { valuesFromArray: funcs.valuesFromArray({ values: lastNames.slice(0, 20), isUnique: true }), valuesFromArrayNotNull: funcs.valuesFromArray({ values: lastNames, isUnique: true }), valuesFromArrayWeighted: funcs.valuesFromArray({ values: [ { values: lastNames.slice(0, 20000), weight: 0.3 }, { values: lastNames.slice(20000), weight: 0.7 }, ], isUnique: true, }), valuesFromArrayWeightedNotNull: funcs.valuesFromArray({ values: [ { values: lastNames.slice(0, 14920), weight: 0.3 }, { values: lastNames.slice(14920), weight: 0.7 }, ], isUnique: true, }), }, }, })); const data = await db.select().from(schema.valuesFromArrayUniqueTable); // console.log(valuesFromArrayUniqueTableData); const predicate = data.length !== 0 && data.every((row) => row['valuesFromArrayWeightedNotNull'] !== null && row['valuesFromArrayNotNull'] !== null ); expect(predicate).toBe(true); await expect( seed(db, { valuesFromArrayUniqueTable: schema.valuesFromArrayUniqueTable }).refine((funcs) => ({ valuesFromArrayUniqueTable: { count: 49998, columns: { valuesFromArrayWeightedNotNull: funcs.valuesFromArray({ values: [ { values: lastNames.slice(0, 20000), weight: 0.3 }, { values: lastNames.slice(20000), weight: 0.7 }, ], isUnique: true, }), }, }, })), ).rejects.toThrow( /^weighted values arrays is too small to generate values with specified probability for unique not null column\..+/, ); await expect( seed(db, { valuesFromArrayUniqueTable: schema.valuesFromArrayUniqueTable }).refine((funcs) => ({ valuesFromArrayUniqueTable: { count: 49998, columns: { valuesFromArrayNotNull: funcs.valuesFromArray({ values: lastNames.slice(20), isUnique: true, }), }, }, })), ).rejects.toThrow('There are no enough values to fill unique column.'); await expect( seed(db, { valuesFromArrayUniqueTable: schema.valuesFromArrayUniqueTable }, { seed: 1 }).refine((funcs) => ({ valuesFromArrayUniqueTable: { count: 49999, columns: { valuesFromArrayNotNull: funcs.valuesFromArray({ values: lastNames, isUnique: true, }), valuesFromArrayWeightedNotNull: funcs.valuesFromArray({ values: [ { values: lastNames.slice(0, 14854), weight: 0.3 }, { values: lastNames.slice(14854), weight: 0.7 }, ], isUnique: true, }), }, }, })), ).rejects.toThrow('There are no enough values to fill unique column.'); }); test('valuesFromArray array generator test', async () => { await seed(db, { valuesFromArrayTable: schema.valuesFromArrayArrayTable }).refine((funcs) => ({ valuesFromArrayTable: { count, columns: { valuesFromArray: funcs.valuesFromArray({ values: lastNames, arraySize: 3 }), }, }, })); const data = await db.select().from(schema.valuesFromArrayArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('intPrimaryKey generator test', async () => { await seed(db, { intPrimaryKeyTable: schema.intPrimaryKeyTable }).refine((funcs) => ({ intPrimaryKeyTable: { count, columns: { intPrimaryKey: funcs.intPrimaryKey(), }, }, })); const data = await db.select().from(schema.intPrimaryKeyTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('number generator test', async () => { await seed(db, { numberTable: schema.numberTable }).refine((funcs) => ({ numberTable: { count, columns: { number: funcs.number(), }, }, })); const data = await db.select().from(schema.numberTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('number unique generator test', async () => { // numberUniqueTable----------------------------------------------------------------------------------- await seed(db, { numberUniqueTable: schema.numberUniqueTable }).refine((funcs) => ({ numberUniqueTable: { count: 20070, columns: { numberUnique: funcs.number({ isUnique: true, minValue: -100.23, maxValue: 100.46 }), }, }, })); const data = await db.select().from(schema.numberUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val >= -100.23 && val <= 100.46) ); expect(predicate).toBe(true); await expect( seed(db, { numberUniqueTable: schema.numberUniqueTable }).refine((funcs) => ({ numberUniqueTable: { count: 20071, columns: { numberUnique: funcs.number({ isUnique: true, minValue: -100.23, maxValue: 100.46 }), }, }, })), ).rejects.toThrow('count exceeds max number of unique integers in given range(min, max), try to make range wider.'); }); test('number array generator test', async () => { await seed(db, { numberTable: schema.numberArrayTable }).refine((funcs) => ({ numberTable: { count, columns: { number: funcs.number({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.numberArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('int generator test', async () => { await seed(db, { intTable: schema.intTable }).refine((funcs) => ({ intTable: { count, columns: { int: funcs.int(), }, }, })); const data = await db.select().from(schema.intTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('int unique generator test', async () => { // intUniqueTable----------------------------------------------------------------------------------- await seed(db, { intUniqueTable: schema.intUniqueTable }).refine((funcs) => ({ intUniqueTable: { count: 201, columns: { intUnique: funcs.int({ isUnique: true, minValue: -100, maxValue: 100 }), }, }, })); const data = await db.select().from(schema.intUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); await expect( seed(db, { intUniqueTable: schema.intUniqueTable }).refine((funcs) => ({ intUniqueTable: { count: 202, columns: { intUnique: funcs.int({ isUnique: true, minValue: -100, maxValue: 100 }), }, }, })), ).rejects.toThrow('count exceeds max number of unique integers in given range(min, max), try to make range wider.'); }); test('int array generator test', async () => { await seed(db, { intTable: schema.intArrayTable }).refine((funcs) => ({ intTable: { count, columns: { int: funcs.int({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.intArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('boolean generator test', async () => { await seed(db, { booleanTable: schema.booleanTable }).refine((funcs) => ({ booleanTable: { count, columns: { boolean: funcs.boolean(), }, }, })); const data = await db.select().from(schema.booleanTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('boolean array generator test', async () => { await seed(db, { booleanTable: schema.booleanArrayTable }).refine((funcs) => ({ booleanTable: { count, columns: { boolean: funcs.boolean({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.booleanArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('date generator test', async () => { await seed(db, { dateTable: schema.dateTable }).refine((funcs) => ({ dateTable: { count, columns: { date: funcs.date(), }, }, })); const data = await db.select().from(schema.dateTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('date array generator test', async () => { await seed(db, { dateTable: schema.dateArrayTable }).refine((funcs) => ({ dateTable: { count, columns: { date: funcs.date({ arraySize: 3 }), dateString: funcs.date({ arraySize: 4 }), }, }, })); const data = await db.select().from(schema.dateArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && [3, 4].includes(val.length)) ); expect(predicate).toBe(true); }); test('time generator test', async () => { await seed(db, { timeTable: schema.timeTable }).refine((funcs) => ({ timeTable: { count, columns: { time: funcs.time(), }, }, })); const data = await db.select().from(schema.timeTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('time array generator test', async () => { await seed(db, { timeTable: schema.timeArrayTable }).refine((funcs) => ({ timeTable: { count, columns: { time: funcs.time({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.timeArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('timestamp generator test', async () => { await seed(db, { timestampTable: schema.timestampTable }).refine((funcs) => ({ timestampTable: { count, columns: { timestamp: funcs.timestamp(), }, }, })); const data = await db.select().from(schema.timestampTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('timestamp array generator test', async () => { await seed(db, { timestampTable: schema.timestampArrayTable }).refine((funcs) => ({ timestampTable: { count, columns: { timestamp: funcs.timestamp({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.timestampArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('json generator test', async () => { await seed(db, { jsonTable: schema.jsonTable }).refine((funcs) => ({ jsonTable: { count, columns: { json: funcs.json(), }, }, })); const data = await db.select().from(schema.jsonTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('json array generator test', async () => { await seed(db, { jsonTable: schema.jsonArrayTable }).refine((funcs) => ({ jsonTable: { count, columns: { json: funcs.json({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.jsonArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('interval generator test', async () => { await seed(db, { intervalTable: schema.intervalTable }).refine((funcs) => ({ intervalTable: { count, columns: { interval: funcs.interval(), }, }, })); const data = await db.select().from(schema.intervalTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('interval unique generator test', async () => { // intervalUniqueTable----------------------------------------------------------------------------------- await seed(db, { intervalUniqueTable: schema.intervalUniqueTable }).refine((funcs) => ({ intervalUniqueTable: { count, columns: { intervalUnique: funcs.interval({ isUnique: true }), }, }, })); const data = await db.select().from(schema.intervalUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('interval array generator test', async () => { await seed(db, { intervalTable: schema.intervalArrayTable }).refine((funcs) => ({ intervalTable: { count, columns: { interval: funcs.interval({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.intervalArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('string generator test', async () => { await seed(db, { stringTable: schema.stringTable }).refine((funcs) => ({ stringTable: { count, columns: { string: funcs.string(), }, }, })); const data = await db.select().from(schema.stringTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('string unique generator test', async () => { await seed(db, { stringUniqueTable: schema.stringUniqueTable }).refine((funcs) => ({ stringUniqueTable: { count, columns: { stringUnique: funcs.string({ isUnique: true }), }, }, })); const data = await db.select().from(schema.stringUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('string array generator test', async () => { await seed(db, { stringTable: schema.stringArrayTable }).refine((funcs) => ({ stringTable: { count, columns: { string: funcs.string({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.stringArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('email generator test', async () => { await seed(db, { emailTable: schema.emailTable }).refine((funcs) => ({ emailTable: { count, columns: { email: funcs.email(), }, }, })); const data = await db.select().from(schema.emailTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('email array generator test', async () => { await seed(db, { emailTable: schema.emailArrayTable }).refine((funcs) => ({ emailTable: { count, columns: { email: funcs.email({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.emailArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('firstName generator test', async () => { await seed(db, { firstNameTable: schema.firstNameTable }).refine((funcs) => ({ firstNameTable: { count, columns: { firstName: funcs.firstName(), }, }, })); const data = await db.select().from(schema.firstNameTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('firstName unique generator test', async () => { // firstNameUniqueTable----------------------------------------------------------------------------------- await seed(db, { firstNameUniqueTable: schema.firstNameUniqueTable }).refine((funcs) => ({ firstNameUniqueTable: { count: 30274, columns: { firstNameUnique: funcs.firstName({ isUnique: true }), }, }, })); const data = await db.select().from(schema.firstNameUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); await expect( seed(db, { firstNameUniqueTable: schema.firstNameUniqueTable }, { count: 30275 }).refine((funcs) => ({ firstNameUniqueTable: { count: 30275, columns: { firstNameUnique: funcs.firstName({ isUnique: true }), }, }, })), ).rejects.toThrow('count exceeds max number of unique first names.'); }); test('firstName array generator test', async () => { await seed(db, { firstNameTable: schema.firstNameArrayTable }).refine((funcs) => ({ firstNameTable: { count, columns: { firstName: funcs.firstName({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.firstNameArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('lastName generator test', async () => { await seed(db, { lastNameTable: schema.lastNameTable }).refine((funcs) => ({ lastNameTable: { count, columns: { lastName: funcs.lastName(), }, }, })); const data = await db.select().from(schema.lastNameTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('lastName unique generator test', async () => { // lastNameUniqueTable----------------------------------------------------------------------------------- await seed(db, { lastNameUniqueTable: schema.lastNameUniqueTable }).refine((funcs) => ({ lastNameUniqueTable: { count: 49998, columns: { lastNameUnique: funcs.lastName({ isUnique: true }), }, }, })); const data = await db.select().from(schema.lastNameUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); await expect( seed(db, { lastNameUniqueTable: schema.lastNameUniqueTable }).refine((funcs) => ({ lastNameUniqueTable: { count: 49999, columns: { lastNameUnique: funcs.lastName({ isUnique: true }), }, }, })), ).rejects.toThrow('count exceeds max number of unique last names.'); }); test('lastName array generator test', async () => { await seed(db, { lastNameTable: schema.lastNameArrayTable }).refine((funcs) => ({ lastNameTable: { count, columns: { lastName: funcs.lastName({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.lastNameArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('fullName generator test', async () => { await seed(db, { fullNameTable: schema.fullNameTable }).refine((funcs) => ({ fullNameTable: { count, columns: { fullName: funcs.fullName(), }, }, })); const data = await db.select().from(schema.fullNameTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('fullName unique generator test', async () => { // fullNameUniqueTable----------------------------------------------------------------------------------- await seed(db, { fullNameUniqueTable: schema.fullNameUniqueTable }).refine((funcs) => ({ fullNameUniqueTable: { count, columns: { fullNameUnique: funcs.fullName({ isUnique: true }), }, }, })); const data = await db.select().from(schema.fullNameUniqueTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('fullName array generator test', async () => { await seed(db, { fullNameTable: schema.fullNameArrayTable }).refine((funcs) => ({ fullNameTable: { count, columns: { fullName: funcs.fullName({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.fullNameArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('country generator test', async () => { await seed(db, { countryTable: schema.countryTable }).refine((funcs) => ({ countryTable: { count, columns: { country: funcs.country(), }, }, })); const data = await db.select().from(schema.countryTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('country unique generator test', async () => { // countryUniqueTable----------------------------------------------------------------------------------- await seed(db, { countryUniqueTable: schema.countryUniqueTable }).refine((funcs) => ({ countryUniqueTable: { count: countries.length, columns: { countryUnique: funcs.country({ isUnique: true }), }, }, })); const data = await db.select().from(schema.countryUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); await expect( seed(db, { countryUniqueTable: schema.countryUniqueTable }).refine((funcs) => ({ countryUniqueTable: { count: countries.length + 1, columns: { countryUnique: funcs.country({ isUnique: true }), }, }, })), ).rejects.toThrow('count exceeds max number of unique countries.'); }); test('country array generator test', async () => { await seed(db, { countryTable: schema.countryArrayTable }).refine((funcs) => ({ countryTable: { count, columns: { country: funcs.country({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.countryArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('city generator test', async () => { await seed(db, { cityTable: schema.cityTable }).refine((funcs) => ({ cityTable: { count, columns: { city: funcs.city(), }, }, })); const data = await db.select().from(schema.cityTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('city unique generator test', async () => { // cityUniqueTable----------------------------------------------------------------------------------- await reset(db, { cityUniqueTable: schema.cityUniqueTable }); await seed(db, { cityUniqueTable: schema.cityUniqueTable }).refine((funcs) => ({ cityUniqueTable: { count: cities.length, columns: { cityUnique: funcs.city({ isUnique: true }), }, }, })); const data = await db.select().from(schema.cityUniqueTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); await expect( seed(db, { cityUniqueTable: schema.cityUniqueTable }).refine((funcs) => ({ cityUniqueTable: { count: cities.length + 1, columns: { cityUnique: funcs.city({ isUnique: true }), }, }, })), ).rejects.toThrow('count exceeds max number of unique cities.'); }); test('city array generator test', async () => { await seed(db, { cityTable: schema.cityArrayTable }).refine((funcs) => ({ cityTable: { count, columns: { city: funcs.city({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.cityArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('streetAddress generator test', async () => { await seed(db, { streetAddressTable: schema.streetAddressTable }).refine((funcs) => ({ streetAddressTable: { count, columns: { streetAddress: funcs.streetAddress(), }, }, })); const data = await db.select().from(schema.streetAddressTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('streetAddress unique generator test', async () => { await seed(db, { streetAddressUniqueTable: schema.streetAddressUniqueTable }).refine((funcs) => ({ streetAddressUniqueTable: { count, columns: { streetAddressUnique: funcs.streetAddress({ isUnique: true }), }, }, })); const data = await db.select().from(schema.streetAddressUniqueTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('streetAddress array generator test', async () => { await seed(db, { streetAddressTable: schema.streetAddressArrayTable }).refine((funcs) => ({ streetAddressTable: { count, columns: { streetAddress: funcs.streetAddress({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.streetAddressArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('jobTitle generator test', async () => { await seed(db, { jobTitleTable: schema.jobTitleTable }).refine((funcs) => ({ jobTitleTable: { count, columns: { jobTitle: funcs.jobTitle(), }, }, })); const data = await db.select().from(schema.jobTitleTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('jobTitle array generator test', async () => { await seed(db, { jobTitleTable: schema.jobTitleArrayTable }).refine((funcs) => ({ jobTitleTable: { count, columns: { jobTitle: funcs.jobTitle({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.jobTitleArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('postcode generator test', async () => { await seed(db, { postcodeTable: schema.postcodeTable }).refine((funcs) => ({ postcodeTable: { count, columns: { postcode: funcs.postcode(), }, }, })); const data = await db.select().from(schema.postcodeTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('postcode unique generator test', async () => { await seed(db, { postcodeUniqueTable: schema.postcodeUniqueTable }).refine((funcs) => ({ postcodeUniqueTable: { count, columns: { postcodeUnique: funcs.postcode({ isUnique: true }), }, }, })); const data = await db.select().from(schema.postcodeUniqueTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('postcode array generator test', async () => { await seed(db, { postcodeTable: schema.postcodeArrayTable }).refine((funcs) => ({ postcodeTable: { count, columns: { postcode: funcs.postcode({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.postcodeArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('state generator test', async () => { await seed(db, { stateTable: schema.stateTable }).refine((funcs) => ({ stateTable: { count, columns: { state: funcs.state(), }, }, })); const data = await db.select().from(schema.stateTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('state array generator test', async () => { await seed(db, { stateTable: schema.stateArrayTable }).refine((funcs) => ({ stateTable: { count, columns: { state: funcs.state({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.stateArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('companyName generator test', async () => { await seed(db, { companyNameTable: schema.companyNameTable }).refine((funcs) => ({ companyNameTable: { count, columns: { companyName: funcs.companyName(), }, }, })); const data = await db.select().from(schema.companyNameTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('companyName unique generator test', async () => { await seed(db, { companyNameUniqueTable: schema.companyNameUniqueTable }).refine((funcs) => ({ companyNameUniqueTable: { count, columns: { companyNameUnique: funcs.companyName({ isUnique: true }), }, }, })); const data = await db.select().from(schema.companyNameUniqueTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('companyName array generator test', async () => { await seed(db, { companyNameTable: schema.companyNameArrayTable }).refine((funcs) => ({ companyNameTable: { count, columns: { companyName: funcs.companyName({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.companyNameArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('loremIpsum generator test', async () => { await seed(db, { loremIpsumTable: schema.loremIpsumTable }).refine((funcs) => ({ loremIpsumTable: { count, columns: { loremIpsum: funcs.loremIpsum(), }, }, })); const data = await db.select().from(schema.loremIpsumTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('loremIpsum array generator test', async () => { await seed(db, { loremIpsumTable: schema.loremIpsumArrayTable }).refine((funcs) => ({ loremIpsumTable: { count, columns: { loremIpsum: funcs.loremIpsum({ arraySize: 3 }), }, }, })); const data = await db.select().from(schema.loremIpsumArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 3)); expect(predicate).toBe(true); }); test('point generator test', async () => { await seed(db, { pointTable: schema.pointTable }).refine((funcs) => ({ pointTable: { count, columns: { point: funcs.point(), }, }, })); const data = await db.select().from(schema.pointTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('point unique generator test', async () => { await reset(db, { pointTable: schema.pointTable }); await seed(db, { pointTable: schema.pointTable }).refine((funcs) => ({ pointTable: { count, columns: { point: funcs.point({ isUnique: true }), }, }, })); const data = await db.select().from(schema.pointTable); // every value in each row does not equal undefined. let predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); // using Set because PGlite does not support unique point const pointStrsSet = new Set(data.map((row) => row.point!.map(String).join(','))); predicate = pointStrsSet.size === data.length; expect(predicate).toBe(true); }); test('point array generator test', async () => { await seed(db, { pointTable: schema.pointArrayTable }).refine((funcs) => ({ pointTable: { count, columns: { point: funcs.point({ arraySize: 2 }), }, }, })); const data = await db.select().from(schema.pointArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 2)); expect(predicate).toBe(true); }); test('line generator test', async () => { await seed(db, { lineTable: schema.lineTable }).refine((funcs) => ({ lineTable: { count, columns: { line: funcs.line(), }, }, })); const data = await db.select().from(schema.lineTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('line unique generator test', async () => { await reset(db, { lineTable: schema.lineTable }); await seed(db, { lineTable: schema.lineTable }).refine((funcs) => ({ lineTable: { count, columns: { line: funcs.line({ isUnique: true }), }, }, })); const data = await db.select().from(schema.lineTable); // every value in each row does not equal undefined. let predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); // using Set because PGlite does not support unique point const lineStrsSet = new Set(data.map((row) => row.line!.map(String).join(','))); predicate = lineStrsSet.size === data.length; expect(predicate).toBe(true); }); test('line array generator test', async () => { await seed(db, { lineTable: schema.lineArrayTable }).refine((funcs) => ({ lineTable: { count, columns: { line: funcs.line({ arraySize: 2 }), }, }, })); const data = await db.select().from(schema.lineArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && val.length === 2)); expect(predicate).toBe(true); }); test('phoneNumber generator test', async () => { await seed(db, { phoneNumberTable: schema.phoneNumberTable }).refine((funcs) => ({ phoneNumberTable: { count, columns: { phoneNumber: funcs.phoneNumber(), phoneNumberPrefixes: funcs.phoneNumber({ prefixes: ['+380 99', '+380 67', '+1'], generatedDigitsNumbers: [7, 7, 10], }), phoneNumberTemplate: funcs.phoneNumber({ template: '+380 ## ## ### ##' }), }, }, })); const data = await db.select().from(schema.phoneNumberTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('phoneNumber array generator test', async () => { await seed(db, { phoneNumberTable: schema.phoneNumberArrayTable }).refine((funcs) => ({ phoneNumberTable: { count, columns: { phoneNumber: funcs.phoneNumber({ arraySize: 3 }), phoneNumberPrefixes: funcs.phoneNumber({ prefixes: ['+380 99', '+380 67', '+1'], generatedDigitsNumbers: [7, 7, 10], arraySize: 4, }), phoneNumberTemplate: funcs.phoneNumber({ template: '+380 ## ## ### ##', arraySize: 5, }), }, }, })); const data = await db.select().from(schema.phoneNumberArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null && [3, 4, 5].includes(val.length)) ); expect(predicate).toBe(true); }); test('weightedRandom generator test', async () => { await seed(db, { weightedRandomTable: schema.weightedRandomTable }).refine((funcs) => ({ weightedRandomTable: { count, columns: { weightedRandom: funcs.weightedRandom([ { value: funcs.default({ defaultValue: 'default value' }), weight: 0.3 }, { value: funcs.loremIpsum(), weight: 0.7 }, ]), }, }, })); const data = await db.select().from(schema.weightedRandomTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); }); test('weightedRandom with unique gens generator test', async () => { await seed(db, { weightedRandomWithUniqueGensTable: schema.weightedRandomWithUniqueGensTable }).refine((funcs) => ({ weightedRandomWithUniqueGensTable: { count: 10000, columns: { weightedRandomWithUniqueGens: funcs.weightedRandom([ { weight: 0.3, value: funcs.email() }, { weight: 0.7, value: funcs.firstName({ isUnique: true }) }, ]), }, }, })); const data = await db.select().from(schema.weightedRandomWithUniqueGensTable); const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); await expect( seed(db, { weightedRandomWithUniqueGensTable: schema.weightedRandomWithUniqueGensTable }).refine((funcs) => ({ weightedRandomWithUniqueGensTable: { count: 40000, columns: { weightedRandomWithUniqueGens: funcs.weightedRandom([ { weight: 0.1, value: funcs.email() }, { weight: 0.9, value: funcs.firstName({ isUnique: true }) }, ]), }, }, })), ).rejects.toThrow('count exceeds max number of unique first names.'); await expect( seed(db, { weightedRandomWithUniqueGensTable: schema.weightedRandomWithUniqueGensTable }).refine((funcs) => ({ weightedRandomWithUniqueGensTable: { count: 10000, columns: { weightedRandomWithUniqueGens: funcs.weightedRandom([ { weight: 0.2, value: funcs.email() }, { weight: 0.9, value: funcs.firstName({ isUnique: true }) }, ]), }, }, })), ).rejects.toThrow( 'The weights for the Weighted Random feature must add up to exactly 1. Please review your weights to ensure they total 1 before proceeding', ); }); test('uuid generator test', async () => { await reset(db, { uuidTable: schema.uuidTable }); await seed(db, { uuidTable: schema.uuidTable }).refine((funcs) => ({ uuidTable: { count, columns: { uuid: funcs.uuid(), }, }, })); const data = await db.select().from(schema.uuidTable); // every value in each row does not equal undefined. let predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); const uuidStrsSet = new Set(data.map((row) => row.uuid!)); predicate = uuidStrsSet.size === data.length; expect(predicate).toBe(true); }); test('uuid array generator test', async () => { await reset(db, { uuidArrayTable: schema.uuidArrayTable }); await seed(db, { uuidArrayTable: schema.uuidArrayTable }).refine((funcs) => ({ uuidArrayTable: { count, columns: { uuid: funcs.uuid({ arraySize: 4 }), }, }, })); const data = await db.select().from(schema.uuidArrayTable); // every value in each row does not equal undefined. const predicate = data.length !== 0 && data.every((row) => Object.values(row).every((val) => val !== undefined && val !== null)); expect(predicate).toBe(true); });