Skip to content

Converted to Vitest for all Unit Tests + Improved Error Handling for selectRelevantMemories#235

Merged
sfreeman422 merged 6 commits intomasterfrom
feature/fix-memories-vitest
Apr 9, 2026
Merged

Converted to Vitest for all Unit Tests + Improved Error Handling for selectRelevantMemories#235
sfreeman422 merged 6 commits intomasterfrom
feature/fix-memories-vitest

Conversation

@sfreeman422
Copy link
Copy Markdown
Collaborator

@sfreeman422 sfreeman422 commented Apr 9, 2026

This pull request migrates the backend testing framework from Jest to Vitest. The migration involves updating dependencies, test scripts, and test files to use Vitest APIs and conventions. Additionally, the build script is updated to use a new TypeScript configuration file. The most important changes are outlined below.

Testing Framework Migration:

  • Replaced all usage of Jest with Vitest in test files, including imports, mocks, spies, and utility functions in ai.controller.spec.ts and ai.service.spec.ts. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

  • Updated the coverage script in run-coverage-gate.js to use Vitest instead of Jest for collecting test coverage. [1] [2]

Configuration and Dependency Updates:

  • Removed Jest configuration file (jest.config.js) and references to Jest and its types from package.json. Added Vitest and related coverage dependencies. [1] [2] [3]

  • Updated test scripts in package.json to use Vitest commands instead of Jest.

  • Disabled the VSCode Jest extension in .vscode/settings.json to prevent conflicts with Vitest.

Build Process:

  • Changed the build script to use tsconfig.build.json instead of tsconfig.json for TypeScript compilation.

Copilot AI review requested due to automatic review settings April 9, 2026 20:52
@sfreeman422
Copy link
Copy Markdown
Collaborator Author

@copilot failing checks, please fix

Copy link
Copy Markdown

Copilot AI commented Apr 9, 2026

@copilot failing checks, please fix

Fixed in commit 809f1e0. The build was failing because tsconfig.build.json included test/mock files that use Vitest-specific types. Updated it to:

  1. Exclude src/**/*.mock.ts and src/test from the production build
  2. Override types to only include node (removing vitest/globals) for the production compilation

All 650 backend tests and 73 frontend tests still pass.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the codebase’s unit tests from Jest to Vitest (backend-wide, plus frontend test stabilization), and hardens AIService.selectRelevantMemories() against malformed JSON returned by the model.

Changes:

  • Replace backend Jest setup with Vitest configuration, TS configs, and coverage-gate updates.
  • Convert backend unit tests/mocks from jest.* to vi.* (including module mocking and fake timers).
  • Stabilize frontend tests around mount-time async fetches; add JSON.parse error handling for memory selection.

Reviewed changes

Copilot reviewed 95 out of 99 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/frontend/src/pages/HomePage.spec.tsx Await initial fetch before asserting UI
packages/frontend/src/hooks/useDashboard.spec.ts Use never-resolving fetch to assert loading
packages/frontend/src/components/AppShell.spec.tsx Avoid background fetch resolution in tests
packages/frontend/src/App.spec.tsx Add helper to wait for filter options
packages/frontend/eslint.config.js Expand react-refresh export allowlist
packages/backend/vitest.config.ts Add Vitest config + module aliases
packages/backend/tsconfig.json Include Vitest globals; include spec files
packages/backend/tsconfig.eslint.json ESLint TS config includes vitest config
packages/backend/tsconfig.build.json Build-only TS config excludes specs
packages/backend/src/walkie/walkie.service.spec.ts Migrate Walkie tests to Vitest
packages/backend/src/walkie/walkie.controller.spec.ts Migrate controller test mocking to Vitest
packages/backend/src/test/vitest.types.d.ts Add global Mock + classMock types
packages/backend/src/test/vitest.setup.ts Set test env vars for Vitest
packages/backend/src/test/vitest.after-env.ts Global mock/spies reset + classMock helper
packages/backend/src/test/mocks/typeorm.mock.ts Add TypeORM mock module for tests
packages/backend/src/test/mocks/typeorm-join-column.mock.ts Mock JoinColumn decorator import path
packages/backend/src/test/mocks/typeorm-bson-typings.mock.ts Mock UUID type import path
packages/backend/src/test/mocks/slack-web-api.mock.ts Switch Slack Web API mock to vi.fn()
packages/backend/src/test/mocks/logger.mock.ts Switch shared logger mock to vi.fn()
packages/backend/src/test/jest.after-env.ts Update legacy env hooks to Vitest APIs
packages/backend/src/store/store.service.spec.ts Migrate StoreService tests to Vitest
packages/backend/src/store/store.persistence.service.spec.ts Migrate persistence tests + TypeORM mocks
packages/backend/src/store/store.controller.spec.ts Migrate Store controller test mocks
packages/backend/src/store/item.service.spec.ts Migrate ItemService tests to Vitest
packages/backend/src/shared/utils/session-token.spec.ts Switch timers/modules reset to Vitest
packages/backend/src/shared/services/web/web.service.spec.ts Convert spies/mocks to Vitest types
packages/backend/src/shared/services/translation.service.spec.ts Convert Axios + random mocks to Vitest
packages/backend/src/shared/services/suppressor.service.spec.ts Convert deep dependency mocking to Vitest
packages/backend/src/shared/services/slack/slack.service.spec.ts Convert SlackService tests to Vitest
packages/backend/src/shared/services/slack/slack.persistence.service.spec.ts Convert persistence tests to Vitest mocks
packages/backend/src/shared/services/redis.persistence.service.spec.ts Update singleton/reset strategy for Vitest
packages/backend/src/shared/services/history.persistence.service.spec.ts Convert TypeORM mocking to Vitest
packages/backend/src/shared/mocks/web.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/translation.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/suppressor.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/slack.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/openai.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/muzzle.persistence.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/counter.persistence.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/backfire.persistence.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/mocks/ai.service.mock.ts Replace Jest mocks with Vitest mocks
packages/backend/src/shared/middleware/textMiddleware.spec.ts Convert middleware tests to Vitest
packages/backend/src/shared/middleware/suppression.spec.ts Convert middleware tests to Vitest + classMock
packages/backend/src/shared/middleware/signatureVerification.spec.ts Convert middleware tests to Vitest
packages/backend/src/shared/middleware/authMiddleware.spec.ts Convert middleware tests to Vitest
packages/backend/src/shared/logger/logger.mock.ts Convert logger mock typings to Vitest Mock
packages/backend/src/search/search.persistence.service.spec.ts Convert TypeORM mocking + assertions to Vitest
packages/backend/src/search/search.controller.spec.ts Convert controller mocking to Vitest + classMock
packages/backend/src/reaction/reaction.service.spec.ts Convert service tests to Vitest
packages/backend/src/reaction/reaction.report.service.spec.ts Convert report tests to Vitest
packages/backend/src/reaction/reaction.persistence.service.spec.ts Convert persistence tests to Vitest
packages/backend/src/reaction/reaction.controller.spec.ts Convert controller tests to Vitest + classMock
packages/backend/src/quote/quote.service.spec.ts Convert Axios/web mocks to Vitest
packages/backend/src/quote/quote.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/portfolio/portfolio.service.spec.ts Convert timers/spies to Vitest
packages/backend/src/portfolio/portfolio.persistence.service.spec.ts Convert TypeORM mocks to Vitest
packages/backend/src/portfolio/portfolio.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/muzzle/muzzle.service.spec.ts Convert extensive service tests to Vitest
packages/backend/src/muzzle/muzzle.report.service.spec.ts Convert report tests to Vitest
packages/backend/src/muzzle/muzzle.persistence.service.spec.ts Convert persistence tests to Vitest
packages/backend/src/muzzle/muzzle.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/muzzle/muzzle-utilities.spec.ts Convert random/process spies to Vitest
packages/backend/src/mock/mock.service.spec.ts Convert service tests to async + Vitest spies
packages/backend/src/mock/mock.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/memory/memory.controller.spec.ts Convert controller integration test lifecycle to async/await
packages/backend/src/list/list.service.spec.ts Convert service tests + TypeORM mocks to Vitest
packages/backend/src/list/list.persistence.service.spec.ts Convert persistence tests to Vitest
packages/backend/src/list/list.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/jobs/fun-fact.job.spec.ts Convert job tests + constants mocking to Vitest
packages/backend/src/hook/hook.controller.spec.ts Convert controller mocks using vi.hoisted
packages/backend/src/event/event.service.spec.ts Convert service tests to Vitest
packages/backend/src/event/event.persistence.service.spec.ts Convert persistence tests to Vitest
packages/backend/src/event/event.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/define/define.service.spec.ts Convert Axios/web mocks to Vitest
packages/backend/src/define/define.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/dashboard/dashboard.persistence.service.spec.ts Convert persistence tests to Vitest
packages/backend/src/counter/counter.service.spec.ts Convert service tests to Vitest
packages/backend/src/counter/counter.persistence.service.spec.ts Convert persistence tests + timers to Vitest
packages/backend/src/counter/counter.controller.spec.ts Convert controller mocks using vi.hoisted
packages/backend/src/confession/confession.service.spec.ts Convert service tests to Vitest
packages/backend/src/confession/confession.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/clap/clap.service.spec.ts Convert service tests to async + Vitest spies
packages/backend/src/clap/clap.controller.spec.ts Convert controller mocks to Vitest + classMock
packages/backend/src/backfire/backfire.service.spec.ts Convert service tests to Vitest
packages/backend/src/backfire/backfire.persistence.service.spec.ts Convert persistence tests to Vitest
packages/backend/src/auth/auth.controller.spec.ts Convert Axios + session-token mocks to Vitest
packages/backend/src/ai/mocks/mocks.ts Convert AI persistence mock factory to Vitest
packages/backend/src/ai/middleware/aiMiddleware.spec.ts Convert middleware tests/spies to Vitest
packages/backend/src/ai/memory/memory.persistence.service.spec.ts Convert persistence tests + logger mock to Vitest
packages/backend/src/ai/daily-memory.job.spec.ts Convert job tests + repo mock to Vitest
packages/backend/src/ai/ai.service.ts Add JSON.parse handling for memory selection
packages/backend/src/ai/ai.service.spec.ts Convert AIService unit tests to Vitest
packages/backend/src/ai/ai.controller.spec.ts Convert controller mocks to Vitest + vi.hoisted
packages/backend/scripts/run-coverage-gate.js Switch coverage gate runner from Jest to Vitest
packages/backend/package.json Switch test scripts/build config to Vitest/tsconfig.build
packages/backend/jest.config.js Remove Jest configuration
.vscode/settings.json Disable Jest VS Code integration

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/backend/src/ai/ai.service.ts
Comment thread packages/backend/src/test/jest.after-env.ts Outdated
@sfreeman422
Copy link
Copy Markdown
Collaborator Author

@copilot still got some failing checks dawg

Copy link
Copy Markdown

Copilot AI commented Apr 9, 2026

@copilot still got some failing checks dawg

Fixed in commit 098bc61. There were two failures:

  1. Docker build (tsconfig.prod.json) — the production TS config used by Docker wasn't excluding src/**/*.mock.ts and src/test or restricting types to ["node"], so Vitest-typed files were leaking into the build. Updated tsconfig.prod.json to match tsconfig.build.json's exclusions.

  2. Test coverage (slack.service.spec.ts) — the getAndSaveAllChannels test was using a done() callback, which is deprecated in Vitest and caused an unhandled error. Converted it to async/await.

@sfreeman422 sfreeman422 merged commit 7f9db07 into master Apr 9, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants