返回 oh-my-ppt
config-domain-boundaries.test.ts
根目录 / tests / unit / config / config-domain-boundaries.test.ts
1 import fs from 'fs'
2 import path from 'path'
3 import { describe, expect, it } from 'vitest'
4
5 const canonicalConfigFiles = [
6 'src/main/config/settings-handlers.ts',
7 'src/main/config/image-model-handlers.ts',
8 'src/main/config/locale-utils.ts',
9 'src/main/config/model-config-utils.ts',
10 'src/main/presentation/fonts/handlers.ts'
11 ]
12
13 const removedConfigPaths = [
14 'src/main/ipc/config/settings-handlers.ts',
15 'src/main/ipc/config/image-model-handlers.ts',
16 'src/main/ipc/config/locale-utils.ts',
17 'src/main/ipc/config/model-config-utils.ts',
18 'src/main/ipc/config/font-handlers.ts'
19 ]
20
21 const readTypeScriptSources = (directory: string): Array<{ filePath: string; source: string }> => {
22 const sources: Array<{ filePath: string; source: string }> = []
23 for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
24 const filePath = path.join(directory, entry.name)
25 if (entry.isDirectory()) {
26 sources.push(...readTypeScriptSources(filePath))
27 } else if (entry.isFile() && /\.tsx?$/.test(entry.name)) {
28 sources.push({ filePath, source: fs.readFileSync(filePath, 'utf8') })
29 }
30 }
31 return sources
32 }
33
34 describe('config domain boundaries', () => {
35 it('owns app configuration and font IPC registrations outside ipc/', () => {
36 expect(canonicalConfigFiles.filter((filePath) => !fs.existsSync(filePath))).toEqual([])
37 })
38
39 it('removes legacy IPC config paths after every caller migrates', () => {
40 expect(removedConfigPaths.filter((filePath) => fs.existsSync(filePath))).toEqual([])
41 })
42
43 it('does not let application code import an old config path', () => {
44 for (const { filePath, source } of readTypeScriptSources('src/main')) {
45 expect(source, filePath).not.toContain('ipc/config')
46 }
47 })
48
49 it('registers canonical config and font handlers from IPC setup', () => {
50 const setup = fs.readFileSync('src/main/ipc/index.ts', 'utf8')
51
52 expect(setup).toContain("from '../config/settings-handlers'")
53 expect(setup).toContain("from '../config/image-model-handlers'")
54 expect(setup).toContain("from '../presentation/fonts/handlers'")
55 expect(setup).not.toContain("from './config/settings-handlers'")
56 expect(setup).not.toContain("from './config/image-model-handlers'")
57 expect(setup).not.toContain("from './config/font-handlers'")
58 })
59 })
60
60 lines TYPESCRIPT