Files
stack/docs/scratchpads/182-fix-prisma-enum-tests.md
Jason Woltje f6d4e07d31 fix(#182): fix Prisma enum import in job-steps tests
Fixed failing tests in job-steps.service.spec.ts and job-steps.controller.spec.ts
caused by undefined Prisma enum imports in the test environment.

Root cause: When importing JobStepPhase, JobStepType, and JobStepStatus from
@prisma/client in the test environment with mocked Prisma, the enums were
undefined, causing "Cannot read properties of undefined" errors.

Solution: Used vi.mock() with importOriginal to mock the @prisma/client module
and explicitly provide enum values while preserving other exports like PrismaClient.

Changes:
- Added vi.mock() for @prisma/client in both test files
- Defined all three enums (JobStepPhase, JobStepType, JobStepStatus) with their values
- Moved imports after the mock setup to ensure proper initialization

Test results: All 16 job-steps tests now passing (13 service + 3 controller)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 11:41:11 -06:00

102 lines
3.2 KiB
Markdown

# Issue #182: [BLOCKER] Fix failing Prisma enum import tests in job-steps.service.spec.ts
## Objective
Fix Prisma enum import issues in job-steps.service.spec.ts that are causing test failures and blocking other work.
## Approach
1. Read the failing test file to understand the issue
2. Check the Prisma schema to understand the correct enum definitions
3. Fix the enum imports and usage in the test file
4. Run tests to verify the fix
5. Ensure 85% coverage is maintained
## Progress
- [x] Read job-steps.service.spec.ts
- [x] Read Prisma schema to verify enum definitions
- [x] Identify the root cause of the import failures
- [x] Fix enum imports and usage
- [x] Run tests to verify fix
- [x] Run full test suite to check for regressions
- [x] Verify test coverage (16/16 tests passing)
- [ ] Commit changes
## Root Cause Analysis
The test file imports `JobStepPhase`, `JobStepType`, and `JobStepStatus` from `@prisma/client`:
```typescript
import { JobStepPhase, JobStepType, JobStepStatus } from "@prisma/client";
```
However, in the test environment with mocked Prisma, these enum imports are undefined, causing errors like:
- `Cannot read properties of undefined (reading 'SETUP')`
- `Cannot read properties of undefined (reading 'COMPLETED')`
The Prisma schema defines these enums at lines 147-167:
- `JobStepPhase`: SETUP, EXECUTION, VALIDATION, CLEANUP
- `JobStepType`: COMMAND, AI_ACTION, GATE, ARTIFACT
- `JobStepStatus`: PENDING, RUNNING, COMPLETED, FAILED, SKIPPED
## Solution
Instead of importing from `@prisma/client`, we need to manually define these enums in the test file or import them from the DTOs which properly export the types. Since the DTOs already import from `@prisma/client`, we'll define the enum constants directly in the test file to avoid circular dependencies.
### Implementation
Used `vi.mock()` with `importOriginal` to mock the `@prisma/client` module and provide the enum values:
```typescript
vi.mock("@prisma/client", async (importOriginal) => {
const actual = await importOriginal<typeof import("@prisma/client")>();
return {
...actual,
JobStepPhase: {
SETUP: "SETUP",
EXECUTION: "EXECUTION",
VALIDATION: "VALIDATION",
CLEANUP: "CLEANUP",
},
JobStepType: {
COMMAND: "COMMAND",
AI_ACTION: "AI_ACTION",
GATE: "GATE",
ARTIFACT: "ARTIFACT",
},
JobStepStatus: {
PENDING: "PENDING",
RUNNING: "RUNNING",
COMPLETED: "COMPLETED",
FAILED: "FAILED",
SKIPPED: "SKIPPED",
},
};
});
```
This approach:
1. Imports the actual Prisma client using `importOriginal`
2. Spreads the actual exports to preserve PrismaClient and other types
3. Overrides only the enum values that were undefined in the test environment
4. Must be placed BEFORE importing any modules that depend on @prisma/client
### Files Modified
- `/home/localadmin/src/mosaic-stack/apps/api/src/job-steps/job-steps.service.spec.ts`
- `/home/localadmin/src/mosaic-stack/apps/api/src/job-steps/job-steps.controller.spec.ts`
## Testing
- Run unit tests: `pnpm test:api`
- Verify coverage: `pnpm test:coverage`
## Notes
- This is a BLOCKER issue - must be resolved before other work can proceed
- Need to maintain minimum 85% coverage