93 lines
3.5 KiB
TypeScript
93 lines
3.5 KiB
TypeScript
import { render, screen, waitFor } from '@testing-library/react'
|
|
import userEvent from '@testing-library/user-event'
|
|
import SuperAdminsTab from './SuperAdminsTab'
|
|
|
|
jest.mock('@/components/admin/NotificationCenterPanel', () => ({
|
|
__esModule: true,
|
|
default: () => <div>统一通知中心管理工作面</div>,
|
|
}))
|
|
|
|
describe('SuperAdminsTab workbench navigation', () => {
|
|
beforeEach(() => {
|
|
global.fetch = jest.fn((input: RequestInfo | URL) => {
|
|
const url = String(input)
|
|
if (url === '/api/admin/super-admins') {
|
|
return Promise.resolve({
|
|
ok: true,
|
|
json: async () => ({ superAdmins: [], count: 0, canAdd: true }),
|
|
} as Response)
|
|
}
|
|
return Promise.resolve({
|
|
ok: true,
|
|
json: async () => ({ data: [] }),
|
|
} as Response)
|
|
}) as jest.Mock
|
|
})
|
|
|
|
test('默认进入统一通知中心且三类能力互不混排', async () => {
|
|
const user = userEvent.setup()
|
|
render(<SuperAdminsTab showToast={jest.fn()} />)
|
|
|
|
expect(await screen.findByText('统一通知中心管理工作面')).toBeInTheDocument()
|
|
expect(screen.queryByText('素材平台 API Key')).not.toBeInTheDocument()
|
|
expect(screen.queryByText('素材外发目标')).not.toBeInTheDocument()
|
|
|
|
await user.click(screen.getByRole('button', { name: /权限与凭证/ }))
|
|
expect(screen.getByText('素材平台 API Key')).toBeInTheDocument()
|
|
expect(screen.queryByText('统一通知中心管理工作面')).not.toBeInTheDocument()
|
|
|
|
await user.click(screen.getByRole('button', { name: /素材外发/ }))
|
|
expect(screen.getByText('素材外发目标')).toBeInTheDocument()
|
|
expect(screen.queryByText('素材平台 API Key')).not.toBeInTheDocument()
|
|
|
|
await waitFor(() => expect(global.fetch).toHaveBeenCalledWith('/api/admin/super-admins'))
|
|
})
|
|
|
|
test('超级管理员可按需查看并再次隐藏完整 API Key', async () => {
|
|
const user = userEvent.setup()
|
|
;(global.fetch as jest.Mock).mockImplementation((input: RequestInfo | URL) => {
|
|
const url = String(input)
|
|
if (url === '/api/admin/super-admins') {
|
|
return Promise.resolve({
|
|
ok: true,
|
|
json: async () => ({ superAdmins: [], count: 0, canAdd: true }),
|
|
} as Response)
|
|
}
|
|
if (url === '/api/admin/api-keys/key-1/reveal') {
|
|
return Promise.resolve({
|
|
ok: true,
|
|
json: async () => ({ data: { key: '1234567890abcdef1234567890abcdef' } }),
|
|
} as Response)
|
|
}
|
|
if (url.includes('/api/admin/api-keys')) {
|
|
return Promise.resolve({
|
|
ok: true,
|
|
json: async () => ({
|
|
data: [{
|
|
id: 'key-1',
|
|
name: '外部任务系统',
|
|
key: '12345678...',
|
|
canReveal: true,
|
|
isActive: true,
|
|
createdBy: 'admin-1',
|
|
lastUsedAt: null,
|
|
createdAt: '2026-08-29T00:00:00.000Z',
|
|
}],
|
|
}),
|
|
} as Response)
|
|
}
|
|
return Promise.resolve({ ok: true, json: async () => ({ data: [] }) } as Response)
|
|
})
|
|
|
|
render(<SuperAdminsTab showToast={jest.fn()} />)
|
|
await user.click(await screen.findByRole('button', { name: /权限与凭证/ }))
|
|
await screen.findByText('外部任务系统')
|
|
const revealButton = screen.getByTitle('查看完整 Key')
|
|
await user.click(revealButton)
|
|
|
|
expect(await screen.findByText('1234567890abcdef1234567890abcdef')).toBeInTheDocument()
|
|
await user.click(screen.getByTitle('隐藏完整 Key'))
|
|
expect(screen.queryByText('1234567890abcdef1234567890abcdef')).not.toBeInTheDocument()
|
|
})
|
|
})
|