2573 lines
72 KiB
TypeScript
2573 lines
72 KiB
TypeScript
import { PGlite } from '@electric-sql/pglite';
|
|
import { sql } from 'drizzle-orm';
|
|
import type { PgliteDatabase } from 'drizzle-orm/pglite';
|
|
import { drizzle } from 'drizzle-orm/pglite';
|
|
import { cities, countries, firstNames, lastNames, reset, seed } from 'drizzle-seed';
|
|
import { afterAll, afterEach, beforeAll, expect, test } from 'vitest';
|
|
import * as schema from './pgSchema.ts';
|
|
|
|
let client: PGlite;
|
|
let db: PgliteDatabase;
|
|
|
|
const createNorthwindTables = async () => {
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."customer" (
|
|
"id" varchar(256) PRIMARY KEY NOT NULL,
|
|
"company_name" text NOT NULL,
|
|
"contact_name" text NOT NULL,
|
|
"contact_title" text NOT NULL,
|
|
"address" text NOT NULL,
|
|
"city" text NOT NULL,
|
|
"postal_code" text,
|
|
"region" text,
|
|
"country" text NOT NULL,
|
|
"phone" text NOT NULL,
|
|
"fax" text
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."order_detail" (
|
|
"unit_price" numeric NOT NULL,
|
|
"quantity" integer NOT NULL,
|
|
"discount" numeric NOT NULL,
|
|
"order_id" integer NOT NULL,
|
|
"product_id" integer NOT NULL
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."employee" (
|
|
"id" integer PRIMARY KEY NOT NULL,
|
|
"last_name" text NOT NULL,
|
|
"first_name" text,
|
|
"title" text NOT NULL,
|
|
"title_of_courtesy" text NOT NULL,
|
|
"birth_date" timestamp NOT NULL,
|
|
"hire_date" timestamp NOT NULL,
|
|
"address" text NOT NULL,
|
|
"city" text NOT NULL,
|
|
"postal_code" text NOT NULL,
|
|
"country" text NOT NULL,
|
|
"home_phone" text NOT NULL,
|
|
"extension" integer NOT NULL,
|
|
"notes" text NOT NULL,
|
|
"reports_to" integer,
|
|
"photo_path" text
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."order" (
|
|
"id" integer PRIMARY KEY NOT NULL,
|
|
"order_date" timestamp NOT NULL,
|
|
"required_date" timestamp NOT NULL,
|
|
"shipped_date" timestamp,
|
|
"ship_via" integer NOT NULL,
|
|
"freight" numeric NOT NULL,
|
|
"ship_name" text NOT NULL,
|
|
"ship_city" text NOT NULL,
|
|
"ship_region" text,
|
|
"ship_postal_code" text,
|
|
"ship_country" text NOT NULL,
|
|
"customer_id" text NOT NULL,
|
|
"employee_id" integer NOT NULL
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."product" (
|
|
"id" integer PRIMARY KEY NOT NULL,
|
|
"name" text NOT NULL,
|
|
"quantity_per_unit" text NOT NULL,
|
|
"unit_price" numeric NOT NULL,
|
|
"units_in_stock" integer NOT NULL,
|
|
"units_on_order" integer NOT NULL,
|
|
"reorder_level" integer NOT NULL,
|
|
"discontinued" integer NOT NULL,
|
|
"supplier_id" integer NOT NULL
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."supplier" (
|
|
"id" integer PRIMARY KEY NOT NULL,
|
|
"company_name" text NOT NULL,
|
|
"contact_name" text NOT NULL,
|
|
"contact_title" text NOT NULL,
|
|
"address" text NOT NULL,
|
|
"city" text NOT NULL,
|
|
"region" text,
|
|
"postal_code" text NOT NULL,
|
|
"country" text NOT NULL,
|
|
"phone" text NOT NULL
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
DO $$ BEGIN
|
|
ALTER TABLE "seeder_lib_pg"."order_detail" ADD CONSTRAINT "order_detail_order_id_order_id_fk" FOREIGN KEY ("order_id") REFERENCES "seeder_lib_pg"."order"("id") ON DELETE cascade ON UPDATE no action;
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
DO $$ BEGIN
|
|
ALTER TABLE "seeder_lib_pg"."order_detail" ADD CONSTRAINT "order_detail_product_id_product_id_fk" FOREIGN KEY ("product_id") REFERENCES "seeder_lib_pg"."product"("id") ON DELETE cascade ON UPDATE no action;
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
DO $$ BEGIN
|
|
ALTER TABLE "seeder_lib_pg"."employee" ADD CONSTRAINT "employee_reports_to_employee_id_fk" FOREIGN KEY ("reports_to") REFERENCES "seeder_lib_pg"."employee"("id") ON DELETE no action ON UPDATE no action;
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
DO $$ BEGIN
|
|
ALTER TABLE "seeder_lib_pg"."order" ADD CONSTRAINT "order_customer_id_customer_id_fk" FOREIGN KEY ("customer_id") REFERENCES "seeder_lib_pg"."customer"("id") ON DELETE cascade ON UPDATE no action;
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
DO $$ BEGIN
|
|
ALTER TABLE "seeder_lib_pg"."order" ADD CONSTRAINT "order_employee_id_employee_id_fk" FOREIGN KEY ("employee_id") REFERENCES "seeder_lib_pg"."employee"("id") ON DELETE cascade ON UPDATE no action;
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
DO $$ BEGIN
|
|
ALTER TABLE "seeder_lib_pg"."product" ADD CONSTRAINT "product_supplier_id_supplier_id_fk" FOREIGN KEY ("supplier_id") REFERENCES "seeder_lib_pg"."supplier"("id") ON DELETE cascade ON UPDATE no action;
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
`,
|
|
);
|
|
};
|
|
|
|
const createAllDataTypesTable = async () => {
|
|
await db.execute(
|
|
sql`
|
|
DO $$ BEGIN
|
|
CREATE TYPE "seeder_lib_pg"."mood_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"."all_data_types" (
|
|
"integer" integer,
|
|
"smallint" smallint,
|
|
"bigint" bigint,
|
|
"bigint_number" bigint,
|
|
"serial" serial,
|
|
"smallserial" smallserial,
|
|
"bigserial" bigserial,
|
|
"bigserial_number" bigserial,
|
|
"boolean" boolean,
|
|
"text" text,
|
|
"varchar" varchar(256),
|
|
"char" char(256),
|
|
"numeric" numeric,
|
|
"decimal" numeric,
|
|
"real" real,
|
|
"double_precision" double precision,
|
|
"json" json,
|
|
"jsonb" jsonb,
|
|
"time" time,
|
|
"timestamp_date" timestamp,
|
|
"timestamp_string" timestamp,
|
|
"date_string" date,
|
|
"date" date,
|
|
"interval" interval,
|
|
"point" "point",
|
|
"point_tuple" "point",
|
|
"line" "line",
|
|
"line_tuple" "line",
|
|
"mood_enum" "seeder_lib_pg"."mood_enum",
|
|
"uuid" "uuid"
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."all_array_data_types" (
|
|
"integer_array" integer[],
|
|
"smallint_array" smallint[],
|
|
"bigint_array" bigint[],
|
|
"bigint_number_array" bigint[],
|
|
"boolean_array" boolean[],
|
|
"text_array" text[],
|
|
"varchar_array" varchar(256)[],
|
|
"char_array" char(256)[],
|
|
"numeric_array" numeric[],
|
|
"decimal_array" numeric[],
|
|
"real_array" real[],
|
|
"double_precision_array" double precision[],
|
|
"json_array" json[],
|
|
"jsonb_array" jsonb[],
|
|
"time_array" time[],
|
|
"timestamp_date_array" timestamp[],
|
|
"timestamp_string_array" timestamp[],
|
|
"date_string_array" date[],
|
|
"date_array" date[],
|
|
"interval_array" interval[],
|
|
"point_array" "point"[],
|
|
"point_tuple_array" "point"[],
|
|
"line_array" "line"[],
|
|
"line_tuple_array" "line"[],
|
|
"mood_enum_array" "seeder_lib_pg"."mood_enum"[]
|
|
);
|
|
`,
|
|
);
|
|
|
|
await db.execute(
|
|
sql`
|
|
CREATE TABLE IF NOT EXISTS "seeder_lib_pg"."nd_arrays" (
|
|
"integer_1d_array" integer[3],
|
|
"integer_2d_array" integer[3][4],
|
|
"integer_3d_array" integer[3][4][5],
|
|
"integer_4d_array" integer[3][4][5][6]
|
|
);
|
|
`,
|
|
);
|
|
};
|
|
|
|
const createAllGeneratorsTables = async () => {
|
|
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"."identity_columns_table" (
|
|
"id" integer GENERATED ALWAYS AS IDENTITY,
|
|
"id1" integer,
|
|
"name" text
|
|
);
|
|
`,
|
|
);
|
|
};
|
|
|
|
beforeAll(async () => {
|
|
client = new PGlite();
|
|
|
|
db = drizzle(client);
|
|
|
|
await db.execute(sql`CREATE SCHEMA IF NOT EXISTS "seeder_lib_pg";`);
|
|
|
|
await createNorthwindTables();
|
|
await createAllDataTypesTable();
|
|
await createAllGeneratorsTables();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await reset(db, schema);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await client.close();
|
|
});
|
|
|
|
test('basic seed test', async () => {
|
|
const currSchema = {
|
|
customers: schema.customers,
|
|
details: schema.details,
|
|
employees: schema.employees,
|
|
orders: schema.orders,
|
|
products: schema.products,
|
|
suppliers: schema.suppliers,
|
|
};
|
|
await seed(db, currSchema);
|
|
|
|
const customers = await db.select().from(schema.customers);
|
|
const details = await db.select().from(schema.details);
|
|
const employees = await db.select().from(schema.employees);
|
|
const orders = await db.select().from(schema.orders);
|
|
const products = await db.select().from(schema.products);
|
|
const suppliers = await db.select().from(schema.suppliers);
|
|
|
|
expect(customers.length).toBe(10);
|
|
expect(details.length).toBe(10);
|
|
expect(employees.length).toBe(10);
|
|
expect(orders.length).toBe(10);
|
|
expect(products.length).toBe(10);
|
|
expect(suppliers.length).toBe(10);
|
|
});
|
|
|
|
test('seed with options.count:11 test', async () => {
|
|
const currSchema = {
|
|
customers: schema.customers,
|
|
details: schema.details,
|
|
employees: schema.employees,
|
|
orders: schema.orders,
|
|
products: schema.products,
|
|
suppliers: schema.suppliers,
|
|
};
|
|
await seed(db, currSchema, { count: 11 });
|
|
|
|
const customers = await db.select().from(schema.customers);
|
|
const details = await db.select().from(schema.details);
|
|
const employees = await db.select().from(schema.employees);
|
|
const orders = await db.select().from(schema.orders);
|
|
const products = await db.select().from(schema.products);
|
|
const suppliers = await db.select().from(schema.suppliers);
|
|
|
|
expect(customers.length).toBe(11);
|
|
expect(details.length).toBe(11);
|
|
expect(employees.length).toBe(11);
|
|
expect(orders.length).toBe(11);
|
|
expect(products.length).toBe(11);
|
|
expect(suppliers.length).toBe(11);
|
|
});
|
|
|
|
test('redefine(refine) customers count', async () => {
|
|
const currSchema = {
|
|
customers: schema.customers,
|
|
details: schema.details,
|
|
employees: schema.employees,
|
|
orders: schema.orders,
|
|
products: schema.products,
|
|
suppliers: schema.suppliers,
|
|
};
|
|
await seed(db, currSchema, { count: 11 }).refine(() => ({
|
|
customers: {
|
|
count: 12,
|
|
},
|
|
}));
|
|
|
|
const customers = await db.select().from(schema.customers);
|
|
const details = await db.select().from(schema.details);
|
|
const employees = await db.select().from(schema.employees);
|
|
const orders = await db.select().from(schema.orders);
|
|
const products = await db.select().from(schema.products);
|
|
const suppliers = await db.select().from(schema.suppliers);
|
|
|
|
expect(customers.length).toBe(12);
|
|
expect(details.length).toBe(11);
|
|
expect(employees.length).toBe(11);
|
|
expect(orders.length).toBe(11);
|
|
expect(products.length).toBe(11);
|
|
expect(suppliers.length).toBe(11);
|
|
});
|
|
|
|
test('redefine(refine) all tables count', async () => {
|
|
const currSchema = {
|
|
customers: schema.customers,
|
|
details: schema.details,
|
|
employees: schema.employees,
|
|
orders: schema.orders,
|
|
products: schema.products,
|
|
suppliers: schema.suppliers,
|
|
};
|
|
await seed(db, currSchema, { count: 11 }).refine(() => ({
|
|
customers: {
|
|
count: 12,
|
|
},
|
|
details: {
|
|
count: 13,
|
|
},
|
|
employees: {
|
|
count: 14,
|
|
},
|
|
orders: {
|
|
count: 15,
|
|
},
|
|
products: {
|
|
count: 16,
|
|
},
|
|
suppliers: {
|
|
count: 17,
|
|
},
|
|
}));
|
|
|
|
const customers = await db.select().from(schema.customers);
|
|
const details = await db.select().from(schema.details);
|
|
const employees = await db.select().from(schema.employees);
|
|
const orders = await db.select().from(schema.orders);
|
|
const products = await db.select().from(schema.products);
|
|
const suppliers = await db.select().from(schema.suppliers);
|
|
|
|
expect(customers.length).toBe(12);
|
|
expect(details.length).toBe(13);
|
|
expect(employees.length).toBe(14);
|
|
expect(orders.length).toBe(15);
|
|
expect(products.length).toBe(16);
|
|
expect(suppliers.length).toBe(17);
|
|
});
|
|
|
|
test("redefine(refine) orders count using 'with' in customers", async () => {
|
|
const currSchema = {
|
|
customers: schema.customers,
|
|
details: schema.details,
|
|
employees: schema.employees,
|
|
orders: schema.orders,
|
|
products: schema.products,
|
|
suppliers: schema.suppliers,
|
|
};
|
|
await seed(db, currSchema, { count: 11 }).refine(() => ({
|
|
customers: {
|
|
count: 4,
|
|
with: {
|
|
orders: 2,
|
|
},
|
|
},
|
|
orders: {
|
|
count: 13,
|
|
},
|
|
}));
|
|
|
|
const customers = await db.select().from(schema.customers);
|
|
const details = await db.select().from(schema.details);
|
|
const employees = await db.select().from(schema.employees);
|
|
const orders = await db.select().from(schema.orders);
|
|
const products = await db.select().from(schema.products);
|
|
const suppliers = await db.select().from(schema.suppliers);
|
|
|
|
expect(customers.length).toBe(4);
|
|
expect(details.length).toBe(11);
|
|
expect(employees.length).toBe(11);
|
|
expect(orders.length).toBe(8);
|
|
expect(products.length).toBe(11);
|
|
expect(suppliers.length).toBe(11);
|
|
});
|
|
|
|
test("sequential using of 'with'", async () => {
|
|
const currSchema = {
|
|
customers: schema.customers,
|
|
details: schema.details,
|
|
employees: schema.employees,
|
|
orders: schema.orders,
|
|
products: schema.products,
|
|
suppliers: schema.suppliers,
|
|
};
|
|
await seed(db, currSchema, { count: 11 }).refine(() => ({
|
|
customers: {
|
|
count: 4,
|
|
with: {
|
|
orders: 2,
|
|
},
|
|
},
|
|
orders: {
|
|
count: 12,
|
|
with: {
|
|
details: 3,
|
|
},
|
|
},
|
|
}));
|
|
|
|
const customers = await db.select().from(schema.customers);
|
|
const details = await db.select().from(schema.details);
|
|
const employees = await db.select().from(schema.employees);
|
|
const orders = await db.select().from(schema.orders);
|
|
const products = await db.select().from(schema.products);
|
|
const suppliers = await db.select().from(schema.suppliers);
|
|
|
|
expect(customers.length).toBe(4);
|
|
expect(details.length).toBe(24);
|
|
expect(employees.length).toBe(11);
|
|
expect(orders.length).toBe(8);
|
|
expect(products.length).toBe(11);
|
|
expect(suppliers.length).toBe(11);
|
|
});
|
|
|
|
test('seeding with identity columns', async () => {
|
|
await seed(db, { identityColumnsTable: schema.identityColumnsTable });
|
|
|
|
const result = await db.select().from(schema.identityColumnsTable);
|
|
|
|
expect(result.length).toBe(10);
|
|
});
|
|
|
|
// All data types test -------------------------------
|
|
test('basic seed test for all postgres data types', async () => {
|
|
await seed(db, { allDataTypes: schema.allDataTypes }, { count: 10000 });
|
|
|
|
const allDataTypes = await db.select().from(schema.allDataTypes);
|
|
// every value in each 10 rows does not equal undefined.
|
|
const predicate = allDataTypes.every((row) => Object.values(row).every((val) => val !== undefined && val !== null));
|
|
|
|
expect(predicate).toBe(true);
|
|
});
|
|
|
|
test('all array data types test', async () => {
|
|
await seed(db, { allArrayDataTypes: schema.allArrayDataTypes }, { count: 1000 });
|
|
|
|
const allArrayDataTypes = await db.select().from(schema.allArrayDataTypes);
|
|
// every value in each rows does not equal undefined.
|
|
const predicate = allArrayDataTypes.every((row) =>
|
|
Object.values(row).every((val) => val !== undefined && val !== null && val.length === 10)
|
|
);
|
|
|
|
expect(predicate).toBe(true);
|
|
});
|
|
|
|
test('nd arrays', async () => {
|
|
await seed(db, { ndArrays: schema.ndArrays }, { count: 1000 });
|
|
|
|
const ndArrays = await db.select().from(schema.ndArrays);
|
|
// every value in each rows does not equal undefined.
|
|
const predicate0 = ndArrays.every((row) =>
|
|
Object.values(row).every((val) => val !== undefined && val !== null && val.length !== 0)
|
|
);
|
|
let predicate1 = true, predicate2 = true, predicate3 = true, predicate4 = true;
|
|
|
|
for (const row of ndArrays) {
|
|
predicate1 = predicate1 && (row.integer1DArray?.length === 3);
|
|
|
|
predicate2 = predicate2 && (row.integer2DArray?.length === 4) && (row.integer2DArray[0]?.length === 3);
|
|
|
|
predicate3 = predicate3 && (row.integer3DArray?.length === 5) && (row.integer3DArray[0]?.length === 4)
|
|
&& (row.integer3DArray[0][0]?.length === 3);
|
|
|
|
predicate4 = predicate4 && (row.integer4DArray?.length === 6) && (row.integer4DArray[0]?.length === 5)
|
|
&& (row.integer4DArray[0][0]?.length === 4) && (row.integer4DArray[0][0][0]?.length === 3);
|
|
}
|
|
|
|
expect(predicate0 && predicate1 && predicate2 && predicate3 && predicate4).toBe(true);
|
|
});
|
|
|
|
// All generators test-------------------------------
|
|
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<string>(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<string>(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',
|
|
);
|
|
});
|