Files
workspace/code/fms/fms-vue/tests/views/user-power-drawer.spec.js
T
2026-09-21 17:33:45 +08:00

78 lines
2.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 分配权限抽屉(UserPowerDrawer):头部结构。
*
* 数据加载与保存由本组件负责(面板只读展示),测试只锁结构两件事:
* 1. 头部常规显示:左侧账号标识标题 + 右侧关闭按钮,页签在内容区顶部;
* 2. 三个页签对应三张权限表的内容面板(切换页签不销毁,用 v-show 承载)。
*
* 面板自身的规则由 user-power-panel.spec.js 覆盖(含「全授权 / 全禁用」),这里不重复。
*/
import { describe, it, expect, beforeEach, vi } from 'vitest'
import { mount, flushPromises } from '@vue/test-utils'
import UserPowerDrawer from '@/views/system/user/UserPowerDrawer.vue'
import { clearMessages } from '@/stores/i18n'
vi.mock('@/services/api', () => ({
loadDataApi: vi.fn(),
saveObjectApi: vi.fn(() => Promise.resolve({ code: 0, success: true })),
}))
import { loadDataApi } from '@/services/api'
beforeEach(() => {
localStorage.clear()
sessionStorage.clear()
clearMessages()
loadDataApi.mockReset()
loadDataApi.mockImplementation(() => Promise.resolve({ data: [] }))
})
async function mountDrawer() {
const wrapper = mount(UserPowerDrawer, {
props: { open: true, user: { b_id: '001', b_name: '张三' } },
// Drawer 用 Teleport 到 body;打桩后内容留在原地,选择器才能命中
global: { stubs: { teleport: true } },
})
await flushPromises()
return wrapper
}
describe('分配权限抽屉:头部', () => {
it('头部常规显示:账号标识标题 + 关闭按钮,页签在内容区', async () => {
const wrapper = await mountDrawer()
expect(wrapper.find('.fms-drawer-title').text()).toBe('分配权限 · 张三(001)')
expect(wrapper.find('.fms-drawer-close').exists()).toBe(true)
// header 让给账号标识:页签不在 header 里,在内容区顶部
expect(wrapper.find('.fms-drawer-header .tabs-nav').exists()).toBe(false)
expect(wrapper.find('.power-drawer__nav .tabs-nav').exists()).toBe(true)
// 账号级批量按钮不在头部(在功能权限面板的工具栏里)
expect(wrapper.find('.fms-drawer-header button.button').exists()).toBe(false)
})
it('账号缺名称时标题只回退到编码', async () => {
const wrapper = mount(UserPowerDrawer, {
props: { open: true, user: { b_id: '001' } },
global: { stubs: { teleport: true } },
})
await flushPromises()
expect(wrapper.find('.fms-drawer-title').text()).toBe('分配权限 · 001')
})
it('三个页签对应三张权限表的内容面板', async () => {
const wrapper = await mountDrawer()
expect(wrapper.findAll('.tabs-tab').map((el) => el.text())).toEqual([
'功能权限',
'字段权限',
'数据范围',
])
expect(wrapper.findAll('.power-pane').map((el) => el.attributes('data-pane'))).toEqual([
'power',
'field',
'data',
])
})
})