-
-
Notifications
You must be signed in to change notification settings - Fork 66
Open
Labels
Description
Priority: P0 - Critical
Effort: Medium (4-6 hours)
File: src/lib/certificates.test.ts
Description
Develop comprehensive test suite for certificate generation and validation system. This is mission-critical functionality that directly impacts veteran certifications and must be thoroughly tested to ensure accurate, sequential certificate issuance and proper eligibility verification.
Test Cases
- ✅
generateCertificateNumber()- format VWC-YYYY-XXXXXX - ✅
generateCertificateNumber()- sequential numbering - ✅
generateCertificateNumber()- year rollover scenario - ✅
hasCompletedCourse()- completed, not completed, not enrolled - ✅
checkCertificateEligibility()- all eligibility criteria - ✅
checkCertificateEligibility()- course not found - ✅
checkCertificateEligibility()- duplicate certificate check - ✅
getCertificateByNumber()- valid/invalid numbers - ✅
formatCertificateData()- data transformation - ✅ Mock Prisma queries
Acceptance Criteria
- 100% code coverage for
certificates.ts - Prisma client mocked correctly for all database operations
- Date handling tested properly (timezone-aware, year boundaries)
- Certificate number uniqueness guaranteed
- All eligibility rules validated
- Edge cases covered (concurrent requests, race conditions)
- Tests run in <2 seconds
- No duplicate certificate numbers generated
Technical Notes
- Use
jest.mock('@prisma/client')orvitestmocking - Test certificate number format:
VWC-YYYY-XXXXXXwhere XXXXXX is zero-padded sequential - Mock
Date.now()for consistent year rollover testing - Verify sequential numbering under concurrent operations
- Test eligibility criteria: course completion, enrollment status, no existing certificate
Data Integrity Considerations
- Ensure certificate numbers are globally unique
- Test transaction rollback scenarios
- Verify no certificates issued to ineligible users
- Test database constraint violations
- Mock realistic course completion data
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
No status