78 lines
2.9 KiB
JavaScript
78 lines
2.9 KiB
JavaScript
/**
|
||
* 分配权限抽屉(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',
|
||
])
|
||
})
|
||
})
|