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>
3.2 KiB
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
- Read the failing test file to understand the issue
- Check the Prisma schema to understand the correct enum definitions
- Fix the enum imports and usage in the test file
- Run tests to verify the fix
- Ensure 85% coverage is maintained
Progress
- Read job-steps.service.spec.ts
- Read Prisma schema to verify enum definitions
- Identify the root cause of the import failures
- Fix enum imports and usage
- Run tests to verify fix
- Run full test suite to check for regressions
- Verify test coverage (16/16 tests passing)
- Commit changes
Root Cause Analysis
The test file imports JobStepPhase, JobStepType, and JobStepStatus from @prisma/client:
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, CLEANUPJobStepType: COMMAND, AI_ACTION, GATE, ARTIFACTJobStepStatus: 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:
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:
- Imports the actual Prisma client using
importOriginal - Spreads the actual exports to preserve PrismaClient and other types
- Overrides only the enum values that were undefined in the test environment
- 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