Files
BIPMaterialManager/tests/unit/repositories.test.ts
Misaka fe02e37848 test(P0): fix critical test infrastructure issues
- Add complete Electron mock with all required APIs (getVersion, getName, etc.) - fixes 20 failing suites
- Fix Winston format mock to support chainable calls - fixes logger test errors
- Add comprehensive TypeORM mock for repository tests - fixes 4 failing tests
- Fix bootstrap-runtime test path assertions
- Update Excel parser tests to skip file I/O (moved to integration)
- Add test review report and improvement plan documentation

## Test Results:
- Failed test suites: 20 → 6 (-70%)
- Failed tests: 48 → 16 (-67%)
- Pass rate: 67% → 94% (+27%)

## Remaining (P1/P2 - not blocking):
- logger.test.ts: 11 failures (config-manager circular dependency, needs refactoring)
- manual tests: 2 failures (should be moved to integration)
- Minor assertion fixes in update-service tests

Fixes: P0 test infrastructure issues
2026-04-04 18:36:38 +08:00

116 lines
2.9 KiB
TypeScript

/**
* Repository Unit Tests
*
* Tests for TypeORM repository patterns.
* Note: These tests mock the database connections.
*/
import { describe, it, expect, vi, beforeEach } from 'vitest'
// Mock TypeORM
vi.mock('typeorm', () => {
// Create mock decorator functions
const Entity = vi.fn()
const PrimaryGeneratedColumn = vi.fn()
const Column = vi.fn()
const ManyToOne = vi.fn()
const OneToMany = vi.fn()
const ManyToMany = vi.fn()
const JoinColumn = vi.fn()
const JoinTable = vi.fn()
const CreateDateColumn = vi.fn()
const UpdateDateColumn = vi.fn()
const DeleteDateColumn = vi.fn()
const Index = vi.fn()
const Unique = vi.fn()
const Check = vi.fn()
const Exclusion = vi.fn()
const Generated = vi.fn()
return {
DataSource: vi.fn(() => ({
initialize: vi.fn().mockResolvedValue({}),
isInitialized: false,
getRepository: vi.fn(),
destroy: vi.fn()
})),
Repository: vi.fn(),
In: vi.fn((arr) => arr),
// Add all the decorators that entities use
Entity,
PrimaryGeneratedColumn,
Column,
ManyToOne,
OneToMany,
ManyToMany,
JoinColumn,
JoinTable,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
Index,
Unique,
Check,
Exclusion,
Generated,
// Other TypeORM exports
Between: vi.fn(),
LessThan: vi.fn(),
LessThanOrEqual: vi.fn(),
MoreThan: vi.fn(),
MoreThanOrEqual: vi.fn(),
Equal: vi.fn(),
Like: vi.fn(),
ILike: vi.fn(),
IsNull: vi.fn(),
Not: vi.fn()
}
})
vi.mock('../../src/main/services/logger', () => ({
createLogger: vi.fn(() => ({
info: vi.fn(),
error: vi.fn(),
warn: vi.fn(),
debug: vi.fn()
}))
}))
describe('MaterialsToBeDeletedRepository', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('should be defined', async () => {
const { MaterialsToBeDeletedRepository } =
await import('../../src/main/services/database/repositories/MaterialsToBeDeletedRepository')
expect(MaterialsToBeDeletedRepository).toBeDefined()
})
it('should create repository instance', async () => {
const { MaterialsToBeDeletedRepository } =
await import('../../src/main/services/database/repositories/MaterialsToBeDeletedRepository')
const repo = new MaterialsToBeDeletedRepository()
expect(repo).toBeDefined()
})
})
describe('DiscreteMaterialPlanRepository', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('should be defined', async () => {
const { DiscreteMaterialPlanRepository } =
await import('../../src/main/services/database/repositories/DiscreteMaterialPlanRepository')
expect(DiscreteMaterialPlanRepository).toBeDefined()
})
it('should create repository instance', async () => {
const { DiscreteMaterialPlanRepository } =
await import('../../src/main/services/database/repositories/DiscreteMaterialPlanRepository')
const repo = new DiscreteMaterialPlanRepository()
expect(repo).toBeDefined()
})
})