zhou zhou
12 小时以前 40905cbd04c2e332cd4bc2b9e0c5b3e1da9cccfa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import test from 'node:test'
 
const menuPageSource = readFileSync(
  new URL('../src/views/system/menu/index.vue', import.meta.url),
  'utf8'
)
 
const menuDialogSource = readFileSync(
  new URL('../src/views/system/menu/modules/menu-dialog.vue', import.meta.url),
  'utf8'
)
 
const routerSource = readFileSync(new URL('../src/utils/router.js', import.meta.url), 'utf8')
const zhLocale = JSON.parse(readFileSync(new URL('../src/locales/langs/zh.json', import.meta.url), 'utf8'))
const enLocale = JSON.parse(readFileSync(new URL('../src/locales/langs/en.json', import.meta.url), 'utf8'))
 
test('menu page submit and delete handlers call the real backend menu APIs', () => {
  assert.match(menuPageSource, /fetchSaveMenu/)
  assert.match(menuPageSource, /fetchUpdateMenu/)
  assert.match(menuPageSource, /fetchDeleteMenu/)
  assert.doesNotMatch(menuPageSource, /console\.log\('提交数据:'/)
  assert.match(menuPageSource, /const handleAddAuth = \(row\) =>/)
  assert.match(menuPageSource, /const handleDeleteMenu = async \(row\) =>/)
  assert.match(menuPageSource, /const handleDeleteAuth = async \(row\) =>/)
  assert.match(menuPageSource, /await fetchDeleteMenu\(row\.id\)/)
})
 
test('menu dialog accepts edit data and parent menu options from the page', () => {
  assert.match(menuDialogSource, /editData:/)
  assert.match(menuDialogSource, /menuTreeOptions:/)
  assert.match(menuDialogSource, /key: 'parentId'/)
  assert.match(menuDialogSource, /type: 'treeselect'/)
})
 
test('menu page renders Iconify preview and current-system translated menu names', () => {
  assert.ok(
    menuPageSource.indexOf("label: '菜单名称'") < menuPageSource.indexOf("label: '图标预览'"),
    '菜单名称列应保持在图标预览列之前,避免树形展开箭头跑到图标列'
  )
  assert.match(menuPageSource, /label:\s*'图标预览'/)
  assert.match(menuPageSource, /ArtSvgIcon/)
  assert.match(menuPageSource, /rounded-md/)
  assert.match(menuPageSource, /row\.meta\?\.title\s*\|\|\s*row\.name/)
  assert.match(routerSource, /startsWith\('menu\.'\)|startsWith\("menu\."\)/)
  assert.match(routerSource, /const fallbackTitle =/)
  assert.match(routerSource, /title\.startsWith\('menus\.'\)/)
  assert.match(routerSource, /i18n\.global\.te\(fallbackTitle\)/)
  assert.equal(zhLocale.menu?.system, '系统设置')
  assert.equal(zhLocale.menu?.basicInfo, '基础信息')
  assert.equal(zhLocale.menu?.aiParam, 'AI 参数')
  assert.equal(enLocale.menu?.system, 'System')
  assert.equal(enLocale.menu?.basicInfo, 'BasicInfo')
  assert.equal(enLocale.menu?.aiParam, 'AI Params')
})