139 lines
3.4 KiB
TypeScript
139 lines
3.4 KiB
TypeScript
import BetterSqlite3 from 'better-sqlite3';
|
|
import { sql } from 'drizzle-orm';
|
|
import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
import { afterAll, afterEach, beforeAll, expect, test } from 'vitest';
|
|
import { reset, seed } from '../../../src/index.ts';
|
|
import * as schema from './sqliteSchema.ts';
|
|
|
|
let client: BetterSqlite3.Database;
|
|
let db: BetterSQLite3Database;
|
|
|
|
beforeAll(async () => {
|
|
client = new BetterSqlite3(':memory:');
|
|
|
|
db = drizzle(client);
|
|
|
|
db.run(
|
|
sql`
|
|
create table model
|
|
(
|
|
id integer not null
|
|
primary key,
|
|
name text not null,
|
|
defaultImageId integer,
|
|
foreign key (defaultImageId) references model_image
|
|
);
|
|
`,
|
|
);
|
|
|
|
db.run(
|
|
sql`
|
|
create table model_image
|
|
(
|
|
id integer not null
|
|
primary key,
|
|
url text not null,
|
|
caption text,
|
|
modelId integer not null
|
|
references model
|
|
);
|
|
`,
|
|
);
|
|
|
|
// 3 tables case
|
|
db.run(
|
|
sql`
|
|
create table model1
|
|
(
|
|
id integer not null
|
|
primary key,
|
|
name text not null,
|
|
userId integer,
|
|
defaultImageId integer,
|
|
foreign key (defaultImageId) references model_image1,
|
|
foreign key (userId) references user
|
|
);
|
|
`,
|
|
);
|
|
|
|
db.run(
|
|
sql`
|
|
create table model_image1
|
|
(
|
|
id integer not null
|
|
primary key,
|
|
url text not null,
|
|
caption text,
|
|
modelId integer not null
|
|
references model1
|
|
);
|
|
`,
|
|
);
|
|
|
|
db.run(
|
|
sql`
|
|
create table user
|
|
(
|
|
id integer not null
|
|
primary key,
|
|
name text,
|
|
invitedBy integer
|
|
references user,
|
|
imageId integer not null
|
|
references model_image1
|
|
);
|
|
`,
|
|
);
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await reset(db, schema);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
client.close();
|
|
});
|
|
|
|
test('2 cyclic tables test', async () => {
|
|
await seed(db, {
|
|
modelTable: schema.modelTable,
|
|
modelImageTable: schema.modelImageTable,
|
|
});
|
|
|
|
const modelTable = await db.select().from(schema.modelTable);
|
|
const modelImageTable = await db.select().from(schema.modelImageTable);
|
|
|
|
expect(modelTable.length).toBe(10);
|
|
let predicate = modelTable.every((row) => Object.values(row).every((val) => val !== undefined && val !== null));
|
|
expect(predicate).toBe(true);
|
|
|
|
expect(modelImageTable.length).toBe(10);
|
|
predicate = modelImageTable.every((row) => Object.values(row).every((val) => val !== undefined && val !== null));
|
|
expect(predicate).toBe(true);
|
|
});
|
|
|
|
test('3 cyclic tables test', async () => {
|
|
await seed(db, {
|
|
modelTable1: schema.modelTable1,
|
|
modelImageTable1: schema.modelImageTable1,
|
|
user: schema.user,
|
|
});
|
|
|
|
const modelTable1 = await db.select().from(schema.modelTable1);
|
|
const modelImageTable1 = await db.select().from(schema.modelImageTable1);
|
|
const user = await db.select().from(schema.user);
|
|
|
|
expect(modelTable1.length).toBe(10);
|
|
let predicate = modelTable1.every((row) => Object.values(row).every((val) => val !== undefined && val !== null));
|
|
expect(predicate).toBe(true);
|
|
|
|
expect(modelImageTable1.length).toBe(10);
|
|
predicate = modelImageTable1.every((row) => Object.values(row).every((val) => val !== undefined && val !== null));
|
|
expect(predicate).toBe(true);
|
|
|
|
expect(user.length).toBe(10);
|
|
predicate = user.every((row) => Object.values(row).every((val) => val !== undefined && val !== null));
|
|
expect(predicate).toBe(true);
|
|
});
|