fix(test): mock db/index.js in unit tests that import API modules

Five unit tests crashed because they imported modules that transitively
reached db/index.ts, which eagerly calls `new Database()` at module load
time. Added vi.mock for db/index.js matching the pattern used by 16
other passing API unit tests.

Moved cleanup.test.ts to tests/integration/ since it uses a real SQLite
database, runs migrations, and inserts rows.
This commit is contained in:
SnapOtter
2026-06-09 23:34:36 +08:00
parent 60e3ac2210
commit 5b3b3c7632
6 changed files with 41 additions and 7 deletions
+7 -1
View File
@@ -1,4 +1,10 @@
import { describe, expect, it } from "vitest"; import { describe, expect, it, vi } from "vitest";
vi.mock("../../../apps/api/src/db/index.js", () => ({
db: {},
schema: {},
}));
import { import {
computeKeyPrefix, computeKeyPrefix,
hashPassword, hashPassword,
+7 -1
View File
@@ -8,7 +8,13 @@
import type { Permission, Role } from "@snapotter/shared"; import type { Permission, Role } from "@snapotter/shared";
import { describe, expect, it, vi } from "vitest"; import { describe, expect, it, vi } from "vitest";
// Mock the auth plugin to avoid transitively opening a SQLite connection vi.mock("../../../apps/api/src/db/index.js", () => ({
db: {
select: () => ({ from: () => ({ where: () => ({ get: () => null }) }) }),
},
schema: { roles: {}, settings: {} },
}));
vi.mock("../../../apps/api/src/plugins/auth.js", () => ({ vi.mock("../../../apps/api/src/plugins/auth.js", () => ({
getAuthUser: () => null, getAuthUser: () => null,
})); }));
+7 -3
View File
@@ -8,9 +8,13 @@
import type { Role } from "@snapotter/shared"; import type { Role } from "@snapotter/shared";
import { describe, expect, it, vi } from "vitest"; import { describe, expect, it, vi } from "vitest";
// Mock the auth plugin to avoid transitively opening a SQLite connection vi.mock("../../../apps/api/src/db/index.js", () => ({
// (permissions.ts -> auth.ts -> db/index.ts), which causes lock contention db: {
// when running in parallel with other DB-using test files like cleanup.test.ts. select: () => ({ from: () => ({ where: () => ({ get: () => null }) }) }),
},
schema: { roles: {}, settings: {} },
}));
vi.mock("../../../apps/api/src/plugins/auth.js", () => ({ vi.mock("../../../apps/api/src/plugins/auth.js", () => ({
getAuthUser: () => null, getAuthUser: () => null,
})); }));
+13 -1
View File
@@ -1,4 +1,16 @@
import { describe, expect, it } from "vitest"; import { describe, expect, it, vi } from "vitest";
vi.mock("../../../apps/api/src/db/index.js", () => ({
db: {
select: () => ({ from: () => ({ where: () => ({ get: () => null }) }) }),
},
schema: { roles: {}, settings: {} },
}));
vi.mock("../../../apps/api/src/plugins/auth.js", () => ({
getAuthUser: () => null,
}));
import { getPermissions, hasPermission } from "../../../apps/api/src/permissions.js"; import { getPermissions, hasPermission } from "../../../apps/api/src/permissions.js";
describe("role permissions", () => { describe("role permissions", () => {
+7 -1
View File
@@ -6,7 +6,13 @@
* - Auth Zod schemas enforce max length on username/password fields * - Auth Zod schemas enforce max length on username/password fields
* - New storage env vars have correct defaults * - New storage env vars have correct defaults
*/ */
import { describe, expect, it } from "vitest"; import { describe, expect, it, vi } from "vitest";
vi.mock("../../apps/api/src/db/index.js", () => ({
db: {},
schema: {},
}));
import { loadEnv } from "../../apps/api/src/lib/env.js"; import { loadEnv } from "../../apps/api/src/lib/env.js";
import { import {
changePasswordSchema, changePasswordSchema,