summaryrefslogtreecommitdiff
path: root/vitest.setup.ts
diff options
context:
space:
mode:
authorJustZvan <justzvan@justzvan.xyz>2026-02-06 12:16:40 +0100
committerJustZvan <justzvan@justzvan.xyz>2026-02-06 12:16:40 +0100
commite904e9634548e47d611bdcbb88d7b180b927fd5f (patch)
tree21aa5be08fc5b22585508c0263ee5ea4effcc593 /vitest.setup.ts
feat: initial commit!
Diffstat (limited to 'vitest.setup.ts')
-rw-r--r--vitest.setup.ts107
1 files changed, 107 insertions, 0 deletions
diff --git a/vitest.setup.ts b/vitest.setup.ts
new file mode 100644
index 0000000..e24e32e
--- /dev/null
+++ b/vitest.setup.ts
@@ -0,0 +1,107 @@
+import { vi } from "vitest";
+import { users, linkedDevices } from "./src/db/schema";
+import * as schema from "./src/db/schema";
+
+process.env.DATABASE_URL = "test-db";
+process.env.JWT_PUBLIC_KEY = "test-key";
+process.env.JWT_PRIVATE_KEY = "test-key";
+
+vi.mock("./src/db/db", async () => {
+ const { PGlite } = await vi.importActual<
+ typeof import("@electric-sql/pglite")
+ >("@electric-sql/pglite");
+ const { drizzle } =
+ await vi.importActual<typeof import("drizzle-orm/pglite")>(
+ "drizzle-orm/pglite",
+ );
+
+ const client = new PGlite();
+
+ const db = drizzle({ client, schema });
+
+ await client.exec(`
+ CREATE TABLE IF NOT EXISTS "users" (
+ "id" SERIAL PRIMARY KEY,
+ "email" VARCHAR(255) NOT NULL UNIQUE,
+ "password" VARCHAR(255) NOT NULL,
+ "emailVerified" BOOLEAN DEFAULT false,
+ "emailCode" VARCHAR(6) NOT NULL,
+ "push_tokens" TEXT[] DEFAULT '{}'
+ );
+
+ CREATE TABLE IF NOT EXISTS "linkedDevices" (
+ "id" SERIAL PRIMARY KEY,
+ "nickname" VARCHAR(255) NOT NULL DEFAULT 'New Device',
+ "parent_id" INTEGER NOT NULL,
+ "last_online" INTEGER,
+ "devEnabled" BOOLEAN DEFAULT false
+ );
+
+ CREATE TABLE IF NOT EXISTS "deviceConfig" (
+ "id" SERIAL PRIMARY KEY,
+ "device_id" INTEGER NOT NULL UNIQUE,
+ "disable_buddy" BOOLEAN NOT NULL DEFAULT false,
+ "block_adult_sites" BOOLEAN NOT NULL DEFAULT true,
+ "family_link_anti_circumvention" BOOLEAN NOT NULL DEFAULT false,
+ "new_contact_alerts" BOOLEAN NOT NULL DEFAULT true,
+ "block_strangers" BOOLEAN NOT NULL DEFAULT false,
+ "notify_dangerous_messages" BOOLEAN NOT NULL DEFAULT true,
+ "notify_new_contact_added" BOOLEAN NOT NULL DEFAULT true
+ );
+
+ CREATE TABLE IF NOT EXISTS "alerts" (
+ "id" SERIAL PRIMARY KEY,
+ "device_id" INTEGER NOT NULL,
+ "parent_id" INTEGER NOT NULL,
+ "category" VARCHAR(50),
+ "title" VARCHAR(255),
+ "message" TEXT,
+ "summary" TEXT,
+ "confidence" INTEGER,
+ "packageName" VARCHAR(255),
+ "timestamp" INTEGER NOT NULL,
+ "read" BOOLEAN DEFAULT false
+ );
+ `);
+
+ await db.insert(users).values({
+ email: "test@example.com",
+ password: "$argon2id$v=19$m=65536,t=3,p=4$test",
+ emailVerified: true,
+ emailCode: "123456",
+ pushTokens: [],
+ });
+
+ await db.insert(linkedDevices).values({
+ nickname: "Test Device",
+ parentId: 1,
+ lastOnline: Math.floor(Date.now() / 1000),
+ devEnabled: false,
+ });
+
+ return { db };
+});
+
+vi.mock("./src/db/redis/client", () => ({
+ redis: {
+ get: vi.fn(),
+ set: vi.fn(),
+ del: vi.fn(),
+ pipeline: vi.fn(() => ({
+ set: vi.fn(),
+ del: vi.fn(),
+ exec: vi.fn(),
+ })),
+ sadd: vi.fn(),
+ smembers: vi.fn(() => []),
+ },
+}));
+
+vi.mock("./src/lib/pino", () => ({
+ logger: {
+ info: vi.fn(),
+ error: vi.fn(),
+ warn: vi.fn(),
+ debug: vi.fn(),
+ },
+}));