Files
BIPMaterialManager/tests/unit/services/validation/validation-database.test.ts
Misaka fb3bdbc493 test: fix mock configuration and lint errors in unit tests
- Fix logger mock missing default export in extractor.test.ts
- Fix performance-monitor mock configuration
- Fix prefer-const in validation-database.test.ts
- Fix no-unsafe-function-type in cleaner-handler.test.ts
- Fix no-empty-function in cleaner-application-service.test.ts
- Run prettier format on test files

All 622 tests now passing (59 files, 3 skipped)
2026-04-05 22:04:32 +08:00

159 lines
5.0 KiB
TypeScript

import { describe, it, expect, beforeEach, vi } from 'vitest'
// Capture construction params and connect calls for each DB adapter
let lastMysqlOpts: any = null
let mysqlConnectCalled = false
let lastSqlServerOpts: any = null
let sqlServerConnectCalled = false
let lastPgOpts: any = null
let pgConnectCalled = false
let currentDbType: string = 'mysql'
const currentDbConfig: any = {
database: {
mysql: { host: 'db', port: 3306, username: 'user', password: 'pass', database: 'erp' },
sqlserver: {
server: 'srv',
port: 1433,
username: 'user',
password: 'pass',
database: 'erp',
trustServerCertificate: true
},
postgresql: {
host: 'localhost',
port: 5432,
username: 'user',
password: 'pass',
database: 'erp'
}
}
}
// mysql mock
vi.doMock('../../../../src/main/services/database/mysql', () => {
return {
MySqlService: class {
constructor(opts: any) {
lastMysqlOpts = opts
}
connect = vi.fn().mockImplementation(function () {
mysqlConnectCalled = true
return Promise.resolve(undefined)
})
}
}
})
// sqlserver mock
vi.doMock('../../../../src/main/services/database/sql-server', () => {
return {
SqlServerService: class {
constructor(opts: any) {
lastSqlServerOpts = opts
}
connect = vi.fn().mockImplementation(function () {
sqlServerConnectCalled = true
return Promise.resolve(undefined)
})
}
}
})
// postgresql mock
vi.doMock('../../../../src/main/services/database/postgresql', () => {
return {
PostgreSqlService: class {
constructor(opts: any) {
lastPgOpts = opts
}
connect = vi.fn().mockImplementation(function () {
pgConnectCalled = true
return Promise.resolve(undefined)
})
}
}
})
// Config mock to drive database type
vi.doMock('../../../../src/main/services/config/config-manager', () => {
return {
ConfigManager: {
getInstance: () => ({
getDatabaseType: () => currentDbType,
getConfig: () => currentDbConfig
})
}
}
})
describe('ValidationDatabaseService', () => {
beforeEach(() => {
lastMysqlOpts = null
mysqlConnectCalled = false
lastSqlServerOpts = null
sqlServerConnectCalled = false
lastPgOpts = null
pgConnectCalled = false
})
describe('createValidationDatabaseService', () => {
it('creates mysql service with correct config and connects', async () => {
currentDbType = 'mysql'
const mod = await import('../../../../src/main/services/validation/validation-database')
const svc = await mod.createValidationDatabaseService()
expect(svc).toBeDefined()
expect(lastMysqlOpts.host).toBe('db')
expect(mysqlConnectCalled).toBe(true)
})
it('creates sqlserver service when dbType is sqlserver', async () => {
currentDbType = 'sqlserver'
const mod = await import('../../../../src/main/services/validation/validation-database')
const svc = await mod.createValidationDatabaseService()
expect(lastSqlServerOpts.server).toBe('srv')
expect(sqlServerConnectCalled).toBe(true)
})
it('creates postgresql service when dbType is postgresql', async () => {
currentDbType = 'postgresql'
const mod = await import('../../../../src/main/services/validation/validation-database')
const svc = await mod.createValidationDatabaseService()
expect(lastPgOpts.host).toBe('localhost')
expect(pgConnectCalled).toBe(true)
})
})
describe('getValidationTableName', () => {
it('returns table name unchanged for mysql', async () => {
currentDbType = 'mysql'
const mod = await import('../../../../src/main/services/validation/validation-database')
expect(mod.getValidationTableName('MaterialsToBeDeleted')).toBe('MaterialsToBeDeleted')
})
it('converts schema_table to [schema].[table] for sqlserver', async () => {
currentDbType = 'sqlserver'
const mod = await import('../../../../src/main/services/validation/validation-database')
expect(mod.getValidationTableName('dbo_Materials')).toBe('[dbo].[Materials]')
})
it('wraps nameless table in [dbo].[name] for sqlserver', async () => {
currentDbType = 'sqlserver'
const mod = await import('../../../../src/main/services/validation/validation-database')
expect(mod.getValidationTableName('Materials')).toBe('[dbo].[Materials]')
})
it('converts schema_table to "schema"."table" for postgresql', async () => {
currentDbType = 'postgresql'
const mod = await import('../../../../src/main/services/validation/validation-database')
expect(mod.getValidationTableName('public_Materials')).toBe('"public"."Materials"')
})
it('wraps nameless table in "public"."name" for postgresql', async () => {
currentDbType = 'postgresql'
const mod = await import('../../../../src/main/services/validation/validation-database')
expect(mod.getValidationTableName('Materials')).toBe('"public"."Materials"')
})
})
})