Builds the deferred integration tests from docs/backlog/feature-test-coverage- deferred.md that needed real infra (a test Postgres + real Redis) which the repo lacked. Runs against an isolated, auto-created docmost_test database and Redis logical DB 15 — never the dev data. Harness (apps/server/test/integration/, run via new `pnpm --filter server test:int` => jest --config test/jest-integration.json; default unit `jest` is untouched and excludes these via the *.int-spec.ts name + rootDir): - db.ts: buildTestDb() mirrors database.module.ts exactly (PostgresJSDialect, CamelCasePlugin, bigint to:20/from:[20,1700] parsing) + minimal seed helpers. - global-setup.ts: DROP/CREATE docmost_test, CREATE EXTENSION vector, migrate to latest via Kysely Migrator (fails loud on any errored migration). - global-teardown.ts: closes the pool. Coverage (5 suites, 16 tests, all green against live PG+Redis): - WorkspaceRepo.updateSetting: jsonb-merge persists htmlEmbed without clobbering sibling ai/sharing namespaces (the kill-switch write half). - AiAgentRoleRepo: soft-delete exclusion, cross-workspace tenant isolation, duplicate (name,workspace) -> 23505, name reusable after softDelete (partial unique index WHERE deleted_at IS NULL), same name across workspaces allowed. - page_template_references: deleting either source or referenced page cascades the link row (onDelete cascade) — real FK, not mocked. - PublicShareWorkspaceLimiter vs REAL Redis: real ioredis EVAL of the sliding- window Lua — max boundary (3 admit / 4th deny), re-admit after the window slides, same-ms distinct members. Catches Lua bugs a FakeRedis cannot. - AiChatRepo.findByCreator: role-badge join (enabled->badge; soft-deleted or disabled role -> null). Review: APPROVE; applied its two hardening suggestions (fail loud on errored migration result even without a top-level error; TEST_REDIS_URL override + ping preflight). tsc clean; unit run excludes int-spec (verified). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
24 lines
805 B
JSON
24 lines
805 B
JSON
{
|
|
"moduleFileExtensions": ["js", "json", "ts", "tsx"],
|
|
"rootDir": "..",
|
|
"testRegex": ".*\\.int-spec\\.ts$",
|
|
"testPathIgnorePatterns": ["/node_modules/"],
|
|
"transform": {
|
|
"^.+\\.(t|j)sx?$": "ts-jest"
|
|
},
|
|
"transformIgnorePatterns": [
|
|
"/node_modules/(?!(\\.pnpm/)?(nanoid|uuid|image-dimensions|marked|happy-dom|lib0)(@|/))"
|
|
],
|
|
"testEnvironment": "node",
|
|
"testTimeout": 60000,
|
|
"maxWorkers": 1,
|
|
"globalSetup": "<rootDir>/test/integration/global-setup.ts",
|
|
"globalTeardown": "<rootDir>/test/integration/global-teardown.ts",
|
|
"moduleNameMapper": {
|
|
"^@docmost/db/(.*)$": "<rootDir>/src/database/$1",
|
|
"^@docmost/transactional/(.*)$": "<rootDir>/src/integrations/transactional/$1",
|
|
"^@docmost/ee/(.*)$": "<rootDir>/src/ee/$1",
|
|
"^src/(.*)$": "<rootDir>/src/$1"
|
|
}
|
|
}
|