refactor: enforce 800 line source limits
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import { readdirSync, readFileSync } from 'node:fs'
|
||||
import test from 'node:test'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
@@ -19,6 +19,17 @@ const aiMode = readFileSync(
|
||||
fileURLToPath(new URL('../src/components/business/PersonalWorkbenchAiMode.vue', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const aiModeTemplate = readFileSync(
|
||||
fileURLToPath(new URL('../src/components/business/PersonalWorkbenchAiMode.template.html', import.meta.url)),
|
||||
'utf8'
|
||||
)
|
||||
const aiModeRuntimeDir = fileURLToPath(new URL('../src/composables/workbenchAiMode/', import.meta.url))
|
||||
const aiModeRuntime = readdirSync(aiModeRuntimeDir)
|
||||
.filter((file) => file.endsWith('.js'))
|
||||
.sort()
|
||||
.map((file) => readFileSync(new URL(`../src/composables/workbenchAiMode/${file}`, import.meta.url), 'utf8'))
|
||||
.join('\n')
|
||||
const aiModeSurface = `${aiMode}\n${aiModeTemplate}\n${aiModeRuntime}`
|
||||
const aiDetailReference = readFileSync(
|
||||
fileURLToPath(new URL('../src/utils/aiDocumentDetailReference.js', import.meta.url)),
|
||||
'utf8'
|
||||
@@ -28,21 +39,43 @@ test('workbench document detail keeps workbench as the return target', () => {
|
||||
assert.match(workbench, /source:\s*'workbench'/)
|
||||
assert.match(workbench, /returnTo:\s*'workbench'/)
|
||||
assert.match(appShell, /:back-label="detailBackLabel"/)
|
||||
assert.match(appShell, /String\(payload\.returnTo \|\| ''\)\.trim\(\) === 'workbench'/)
|
||||
assert.match(appShell, /const explicitReturnTo = resolveDocumentDetailReturnTarget\(payload\.returnTo\)/)
|
||||
assert.match(appShell, /const fallbackToWorkbench = \(/)
|
||||
assert.match(appShell, /String\(payload\.source \|\| ''\)\.trim\(\) === 'workbench'/)
|
||||
assert.match(appShell, /const returnTo = explicitReturnTo \|\| \(fallbackToWorkbench \? 'workbench' : ''\)/)
|
||||
assert.match(appShell, /const detailPayload = request \|\| \{[\s\S]*detailLookupOnly:\s*true[\s\S]*\}/)
|
||||
assert.match(appShell, /openRequestDetail\(detailPayload,\s*\{ returnTo \}\)/)
|
||||
assert.match(appShellComposable, /const detailReturnTarget = computed/)
|
||||
assert.match(appShellComposable, /detailReturnTarget\.value === 'workbench' \? '返回首页' : '返回单据中心'/)
|
||||
assert.match(appShellComposable, /nextQuery\.returnTo = 'workbench'/)
|
||||
assert.match(appShellComposable, /const returnTo = resolveDocumentDetailReturnTarget\(options\.returnTo\)/)
|
||||
assert.match(appShellComposable, /nextQuery\.returnTo = returnTo/)
|
||||
assert.match(appShellComposable, /router\.push\(\{ name: 'app-workbench' \}\)/)
|
||||
assert.match(appShellComposable, /router\.push\(\{ name: 'app-documents', query: buildDocumentReturnQuery\(\) \}\)/)
|
||||
})
|
||||
|
||||
test('AI conversation document detail returns to the active conversation content', () => {
|
||||
assert.match(aiDetailReference, /source:\s*'ai-conversation'/)
|
||||
assert.match(aiDetailReference, /returnTo:\s*'conversation'/)
|
||||
assert.match(appShell, /@back-to-requests="handleDocumentDetailBack"/)
|
||||
assert.match(appShell, /const DOCUMENT_DETAIL_RETURN_TARGETS = new Set\(\['workbench', 'conversation'\]\)/)
|
||||
assert.match(
|
||||
appShell,
|
||||
/function handleDocumentDetailBack\(\) \{[\s\S]*detailReturnTarget\.value === 'conversation'[\s\S]*dispatchAiSidebarCommand\('open-recent', activeConversation\)/
|
||||
)
|
||||
assert.match(
|
||||
appShellComposable,
|
||||
/if \(detailReturnTarget\.value === 'conversation'\) \{[\s\S]*return '返回对话'/
|
||||
)
|
||||
assert.match(
|
||||
appShellComposable,
|
||||
/if \(detailReturnTarget\.value === 'conversation'\) \{[\s\S]*return router\.push\(\{ name: 'app-workbench' \}\)/
|
||||
)
|
||||
})
|
||||
|
||||
test('AI detail links resolve real claim identity before opening document detail', () => {
|
||||
assert.match(aiMode, /buildAiDocumentDetailRequest/)
|
||||
assert.match(aiMode, /parseAiApplicationDetailHref/)
|
||||
assert.match(aiMode, /parseAiDocumentDetailHref/)
|
||||
assert.match(aiModeSurface, /buildAiDocumentDetailRequest/)
|
||||
assert.match(aiModeSurface, /parseAiApplicationDetailHref/)
|
||||
assert.match(aiModeSurface, /parseAiDocumentDetailHref/)
|
||||
assert.match(aiDetailReference, /detailLookupOnly:\s*true/)
|
||||
assert.match(aiDetailReference, /params\.get\('claim_id'\)/)
|
||||
assert.match(aiDetailReference, /params\.get\('claim_no'\)/)
|
||||
|
||||
Reference in New Issue
Block a user