feat: expand EasyCode software factory workflows
This commit is contained in:
@@ -60,21 +60,75 @@ test('diagram center promotes the three-line table tab and removes overview', ()
|
||||
const menu = source.slice(menuStart, menuEnd)
|
||||
const labels = [...menu.matchAll(/<el-radio-button label="([^"]+)"/g)].map((match) => match[1])
|
||||
|
||||
assert.deepEqual(labels, ['three_line_table', 'er', 'module', 'architecture', 'flowchart', 'use_case', 'sequence', 'ai'])
|
||||
assert.deepEqual(labels, ['three_line_table', 'er', 'module', 'architecture', 'flowchart', 'use_case', 'sequence'])
|
||||
assert.match(menu, />生成 ER 图<\/el-radio-button>/)
|
||||
assert.match(menu, />生成功能模块图<\/el-radio-button>/)
|
||||
assert.match(menu, />生成系统架构图<\/el-radio-button>/)
|
||||
assert.match(menu, />生成流程图<\/el-radio-button>/)
|
||||
assert.match(menu, />生成用例图<\/el-radio-button>/)
|
||||
assert.match(menu, />生成时序图<\/el-radio-button>/)
|
||||
assert.doesNotMatch(source, /overview:\s*'overview'/)
|
||||
assert.doesNotMatch(source, /activeDiagram\.value === 'overview'/)
|
||||
assert.doesNotMatch(source, /function buildOverviewGraph/)
|
||||
})
|
||||
|
||||
test('diagram center groups secondary diagrams in a more charts dropdown', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.match(source, /<el-dropdown[^>]+class="more-diagram-dropdown"[^>]+@command="handleMoreDiagramCommand"/)
|
||||
assert.match(source, /<el-dropdown-item command="class_diagram"[^>]*>生成 UML 类图<\/el-dropdown-item>/)
|
||||
assert.doesNotMatch(source, /<el-dropdown-item command="use_case">/)
|
||||
assert.doesNotMatch(source, /<el-dropdown-item command="sequence">/)
|
||||
assert.match(source, /<el-dropdown-item command="activity">生成 UML 活动图<\/el-dropdown-item>/)
|
||||
assert.match(source, /<el-dropdown-item command="state">生成 UML 状态图<\/el-dropdown-item>/)
|
||||
assert.match(source, /<el-dropdown-item command="organization">生成组织结构图<\/el-dropdown-item>/)
|
||||
assert.match(source, /<el-dropdown-item command="data_flow">生成数据流图<\/el-dropdown-item>/)
|
||||
assert.match(source, /<el-dropdown-item command="ai">生成 AI 图<\/el-dropdown-item>/)
|
||||
assert.equal(source.includes('moreDiagramLabel'), true)
|
||||
})
|
||||
|
||||
test('diagram center opens UML class diagram editor directly from the more charts dropdown', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.doesNotMatch(source, /if \(command === 'class_diagram'\)/)
|
||||
assert.match(source, /function handleMoreDiagramCommand\(command\) \{[\s\S]*activeDiagram\.value = command[\s\S]*\}/)
|
||||
})
|
||||
|
||||
test('diagram center lets users rename and delete saved diagram drafts', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.equal(source.includes("import { ElMessage, ElMessageBox } from 'element-plus'"), true)
|
||||
assert.equal(source.includes('deleteProjectDiagram'), true)
|
||||
assert.equal(source.includes('@click.stop="renameSavedDiagram(diagram)"'), true)
|
||||
assert.equal(source.includes('@click.stop="removeSavedDiagram(diagram)"'), true)
|
||||
assert.equal(source.includes('function renameSavedDiagram'), true)
|
||||
assert.equal(source.includes('function removeSavedDiagram'), true)
|
||||
})
|
||||
|
||||
test('diagram center centralizes saved diagram lookup for current payloads', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.equal(source.includes('function findSavedDiagram(diagramType)'), true)
|
||||
assert.equal(source.includes("findSavedDiagram('er')"), true)
|
||||
assert.equal(source.includes("findSavedDiagram('class_diagram')"), true)
|
||||
assert.equal(source.includes('findSavedDiagram(activeDiagram.value)'), true)
|
||||
})
|
||||
|
||||
test('diagram center exposes a dedicated use case diagram tab and direct route', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.equal(source.includes('label="use_case"'), true)
|
||||
assert.match(source, />用例图</)
|
||||
assert.equal(source.includes('<el-radio-button label="use_case">生成用例图</el-radio-button>'), true)
|
||||
assert.match(source, /use_case:\s*'use_case'/)
|
||||
assert.equal(source.includes("const useCaseDsl = ref('')"), true)
|
||||
})
|
||||
|
||||
test('diagram center removes the edit project action from the page header', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.doesNotMatch(source, />编辑项目<\/el-button>/)
|
||||
assert.doesNotMatch(source, /router\.push\(\{ path: '\/generate', query: \{ projectId, mode: 'expert' \} \}\)/)
|
||||
})
|
||||
|
||||
test('diagram center saves and restores use case diagram DSL payloads', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
@@ -94,3 +148,31 @@ test('diagram center wires use case SVG and PNG export handlers', () => {
|
||||
assert.equal(source.includes('downloadUseCasePng'), true)
|
||||
assert.equal(source.includes('useCaseRelationPath'), true)
|
||||
})
|
||||
|
||||
test('diagram center exposes UML class diagram in the more charts dropdown and direct route', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.equal(source.includes('<el-dropdown-item command="class_diagram" aria-label="生成 UML 类图">生成 UML 类图</el-dropdown-item>'), true)
|
||||
assert.match(source, /class_diagram:\s*'class_diagram'/)
|
||||
assert.equal(source.includes("const classDiagramDsl = ref('')"), true)
|
||||
assert.equal(source.includes("v-else-if=\"activeDiagram === 'class_diagram'\""), true)
|
||||
assert.equal(source.includes('UML 类图 DSL'), true)
|
||||
assert.equal(source.includes('v-model="classDiagramDsl"'), true)
|
||||
})
|
||||
|
||||
test('diagram center wires UML class diagram parsing, saving, restoring, and exports', () => {
|
||||
const source = readView('DiagramCenterView.vue')
|
||||
|
||||
assert.equal(source.includes("from '@/utils/classDiagram'"), true)
|
||||
assert.equal(source.includes('const parsedClassDiagram = computed(() => parseClassDiagramDsl(classDiagramDsl.value))'), true)
|
||||
assert.equal(source.includes('const classDiagram = computed(() => buildClassDiagram(parsedClassDiagram.value'), true)
|
||||
assert.equal(source.includes('const classDiagramStatsText = computed'), true)
|
||||
assert.equal(source.includes('function applySavedClassDiagram'), true)
|
||||
assert.equal(source.includes("savedDiagrams.value.find((item) => item.diagramType === 'class_diagram')"), true)
|
||||
assert.equal(source.includes("diagramType: 'class_diagram'"), true)
|
||||
assert.equal(source.includes('dsl: classDiagramDsl.value'), true)
|
||||
assert.equal(source.includes('graph: classDiagram.value'), true)
|
||||
assert.equal(source.includes('function classDiagramSvgText'), true)
|
||||
assert.equal(source.includes('downloadClassDiagramSvg'), true)
|
||||
assert.equal(source.includes('downloadClassDiagramPng'), true)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user