20260914223013
This commit is contained in:
1 parent
549c8bd2eb
commit
63514476d7
60 files changed
+6478
-2004
No files matched your search
@@ -10,9 +10,8 @@
|
||||
* 3) 分类编码 b_id 是主键,修改时只提交名称与排序号,不能改编码。
|
||||
*/
|
||||
import { describe, it, expect, beforeEach, vi } from 'vitest'
|
||||
import { flushPromises, mount } from '@vue/test-utils'
|
||||
import { flushPromises } from '@vue/test-utils'
|
||||
import Othercompany from '@/views/base/othercompany/index.vue'
|
||||
import CategoryTreePanel from '@/views/base/othercompany/CategoryTreePanel.vue'
|
||||
import { mountPage } from '../helpers/app.js'
|
||||
|
||||
vi.mock('@/services/api', () => ({
|
||||
@@ -28,8 +27,14 @@ vi.mock('@/components/ui/message/message-manager.js', () => {
|
||||
return { Message: m, default: m }
|
||||
})
|
||||
|
||||
// Modal.confirm 是命令式对话框:mock 掉后由用例手动触发 onOk,模拟用户点「确定」
|
||||
vi.mock('@/components/ui/modal/modal-confirm.js', () => ({
|
||||
confirm: vi.fn(),
|
||||
}))
|
||||
|
||||
import { loadDataApi, pageDataApi, saveObjectApi } from '@/services/api'
|
||||
import { Message } from '@/components/ui/message/message-manager.js'
|
||||
import { confirm as modalConfirm } from '@/components/ui/modal/modal-confirm.js'
|
||||
|
||||
const ROOT1 = {
|
||||
b_id: 'root1',
|
||||
@@ -70,6 +75,7 @@ beforeEach(() => {
|
||||
Message.success.mockClear()
|
||||
Message.error.mockClear()
|
||||
Message.warning.mockClear()
|
||||
modalConfirm.mockReset()
|
||||
loadDataApi.mockImplementation((view) => {
|
||||
if (view === 'b_othercompany_bmfl')
|
||||
return Promise.resolve({ data: CATEGORIES.map((row) => ({ ...row })) })
|
||||
@@ -157,8 +163,8 @@ describe('往来单位:删除分类的两条守卫', () => {
|
||||
|
||||
expect(Message.warning).toHaveBeenCalledWith('该分类下还有子分类,请先删除子分类')
|
||||
expect(pageDataApi).not.toHaveBeenCalled()
|
||||
expect(modalConfirm).not.toHaveBeenCalled()
|
||||
expect(saveObjectApi).not.toHaveBeenCalled()
|
||||
expect(wrapper.vm.categoryDeleteTarget).toBe(null)
|
||||
})
|
||||
|
||||
it('分类下还有往来单位时拦下,不发删除请求', async () => {
|
||||
@@ -168,18 +174,20 @@ describe('往来单位:删除分类的两条守卫', () => {
|
||||
await wrapper.vm.onCategoryDelete({ b_id: 'child1' })
|
||||
|
||||
expect(Message.warning).toHaveBeenCalledWith('该分类下还有往来单位数据,不能删除')
|
||||
expect(modalConfirm).not.toHaveBeenCalled()
|
||||
expect(saveObjectApi).not.toHaveBeenCalled()
|
||||
expect(wrapper.vm.categoryDeleteTarget).toBe(null)
|
||||
})
|
||||
|
||||
it('守卫通过后弹确认,确认才落库删除', async () => {
|
||||
const wrapper = await mountOthercompany()
|
||||
|
||||
await wrapper.vm.onCategoryDelete({ b_id: 'child1' })
|
||||
expect(wrapper.vm.categoryDeleteTarget?.b_id).toBe('child1')
|
||||
|
||||
expect(modalConfirm).toHaveBeenCalledTimes(1)
|
||||
expect(saveObjectApi).not.toHaveBeenCalled()
|
||||
|
||||
await wrapper.vm.confirmCategoryDelete()
|
||||
// 模拟用户点「删除」
|
||||
await modalConfirm.mock.calls[0][0].onOk()
|
||||
await flushPromises()
|
||||
|
||||
const request = lastRequestOf('b_othercompany_bmfl')
|
||||
@@ -221,36 +229,30 @@ describe('往来单位:拖拽分类', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('往来单位分类树面板:搜索', () => {
|
||||
describe('往来单位分类树:搜索', () => {
|
||||
it('按名称与编码过滤,并把命中的层级展开', async () => {
|
||||
// 面板收到的是已经建好的树(页面的 categoryTree)。这里整树真实渲染:
|
||||
// Input / Button 与保留字同名,shallowMount 打桩会触发 Vue 保留名告警。
|
||||
const treeData = [{ ...ROOT1, children: [{ ...CHILD1 }] }, { ...ROOT2 }]
|
||||
const wrapper = mount(CategoryTreePanel, { props: { treeData } })
|
||||
const wrapper = await mountOthercompany()
|
||||
|
||||
expect(wrapper.vm.filteredTree).toHaveLength(2)
|
||||
expect(wrapper.emitted('update:expandedKeys')).toBeUndefined()
|
||||
// 初始:整树两棵根(root1 带子节点 child1、root2),含子节点的分类保持展开
|
||||
expect(wrapper.vm.filteredCategoryTree.map((node) => node.b_id)).toEqual(['root1', 'root2'])
|
||||
expect(wrapper.vm.expandedCategoryKeys).toEqual(['root1'])
|
||||
|
||||
// 命中子分类的编码:保留其祖先,保证命中节点可见
|
||||
wrapper.vm.keyword = 'child1'
|
||||
wrapper.vm.categoryKeyword = 'child1'
|
||||
await flushPromises()
|
||||
expect(wrapper.vm.filteredTree.map((node) => node.b_id)).toEqual(['root1'])
|
||||
expect(wrapper.vm.filteredTree[0].children.map((node) => node.b_id)).toEqual(['child1'])
|
||||
expect(wrapper.vm.filteredCategoryTree.map((node) => node.b_id)).toEqual(['root1'])
|
||||
expect(wrapper.vm.filteredCategoryTree[0].children.map((node) => node.b_id)).toEqual(['child1'])
|
||||
// 搜索中展开全部,保证命中节点可见
|
||||
expect(wrapper.emitted('update:expandedKeys')?.at(-1)?.[0]).toEqual([
|
||||
'root1',
|
||||
'child1',
|
||||
'root2',
|
||||
])
|
||||
expect(wrapper.vm.expandedCategoryKeys).toEqual(['root1', 'child1', 'root2'])
|
||||
|
||||
// 命中根分类的名称
|
||||
wrapper.vm.keyword = '另一个'
|
||||
wrapper.vm.categoryKeyword = '另一个'
|
||||
await flushPromises()
|
||||
expect(wrapper.vm.filteredTree.map((node) => node.b_id)).toEqual(['root2'])
|
||||
expect(wrapper.vm.filteredCategoryTree.map((node) => node.b_id)).toEqual(['root2'])
|
||||
|
||||
// 清空搜索后收起
|
||||
wrapper.vm.keyword = ''
|
||||
wrapper.vm.categoryKeyword = ''
|
||||
await flushPromises()
|
||||
expect(wrapper.emitted('update:expandedKeys')?.at(-1)?.[0]).toEqual([])
|
||||
expect(wrapper.vm.expandedCategoryKeys).toEqual([])
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user