Files
CherryHQ-cherry-studio/tests/helpers/db/internal/migrationsPath.ts
fullex 8c83072887 feat(test-infra): introduce setupTestDatabase harness
Adds a unified, file-backed SQLite test harness under tests/helpers/db/
that provisions a real database per test file using the production
migrations + CUSTOM_SQL_STATEMENTS, wires it through
MockMainDbServiceUtils.setDb() so production code reaches it via
application.get('DbService').getDb() transparently, truncates user
tables on beforeEach, and cleans up on afterAll. Replaces the need for
hand-written CREATE TABLE SQL and inline vi.mock('@application')
overrides in consumer tests.

Companion changes:

- Register @test-helpers/* path alias (electron.vite.config.ts,
  tsconfig.node.json paths + include, vitest.config.ts main project
  include).
- Relax the global vi.mock stubs for node:fs, node:os, node:path in
  tests/main.setup.ts so third-party libraries (drizzle-orm migrator
  etc.) can read real files. The six existing tests that depended on
  the previous fully-stubbed modules now declare a local
  vi.mock('node:fs', ...) via the new createNodeFsMock helper at
  tests/helpers/mocks/nodeFsMock.ts.
- Self-tests under tests/helpers/db/__tests__/testDatabase.test.ts
  cover PRAGMA state, truncate semantics, FTS5 trigger cascades,
  NULL-searchableText handling, application-mock routing, and
  replay-array accumulation guards.
2026-04-15 09:33:37 -07:00

17 lines
654 B
TypeScript

import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
/**
* Absolute path to the production Drizzle migrations folder.
*
* Resolved relative to this module's own location so it works under Vitest's
* `transform`-based module runner — hardcoded `process.cwd()` is unreliable
* when tests run from different working directories.
*/
export function resolveMigrationsPath(): string {
const thisFile = fileURLToPath(import.meta.url)
const thisDir = dirname(thisFile)
// tests/helpers/db/internal/migrationsPath.ts → repo root is 4 levels up
return resolve(thisDir, '../../../../migrations/sqlite-drizzle')
}