summaryrefslogtreecommitdiff
path: root/vitest.setup.ts
blob: 60f7ae3a8d86ec5c12421c44c0599467a5f217c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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 TYPE "galleryScanningMode" AS ENUM ('delete', 'notify', 'none');

    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,
      "galleryScanningMode" "galleryScanningMode" NOT NULL DEFAULT 'notify'
    );
    
    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(),
  },
}));