55 lines
2.6 KiB
React
55 lines
2.6 KiB
React
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react'
|
|
import { CoreAdminContext } from 'ra-core'
|
|
import { GatewayList } from './GatewayList'
|
|
|
|
afterEach(cleanup)
|
|
|
|
const gateways = [{ id: 'gw-1', name: 'gw-1', endpoint: 'http://docker-gateway:8081', token: 'unit-test-gateway-token' }]
|
|
|
|
function provider(overrides = {}) {
|
|
return {
|
|
getList: vi.fn(() => Promise.resolve({ data: gateways, total: gateways.length })),
|
|
create: vi.fn().mockResolvedValue({ data: { name: 'gw-2', endpoint: 'http://gw2:8081', token: 'generated-token-abcdef' } }),
|
|
delete: vi.fn().mockResolvedValue({ data: { id: 'gw-1' } }),
|
|
getOne: vi.fn(), getMany: vi.fn(), getManyReference: vi.fn(), update: vi.fn(), updateMany: vi.fn(), deleteMany: vi.fn(), browserAction: vi.fn(),
|
|
...overrides,
|
|
}
|
|
}
|
|
|
|
describe('GatewayList', () => {
|
|
it('registers a gateway and reveals the generated token', async () => {
|
|
const dataProvider = provider()
|
|
render(<CoreAdminContext dataProvider={dataProvider}><GatewayList /></CoreAdminContext>)
|
|
|
|
await screen.findAllByText('gw-1')
|
|
fireEvent.change(screen.getByRole('textbox', { name: '网关名称' }), { target: { value: 'gw-2' } })
|
|
fireEvent.change(screen.getByRole('textbox', { name: 'Endpoint' }), { target: { value: 'http://gw2:8081' } })
|
|
fireEvent.click(screen.getByRole('button', { name: '注册网关' }))
|
|
|
|
await waitFor(() => expect(dataProvider.create).toHaveBeenCalledWith('gateways', { data: { name: 'gw-2', endpoint: 'http://gw2:8081', token: '' } }))
|
|
expect((await screen.findByRole('alert')).textContent).toContain('generated-token-abcdef')
|
|
})
|
|
|
|
it('rejects an invalid endpoint before submit', async () => {
|
|
const dataProvider = provider()
|
|
render(<CoreAdminContext dataProvider={dataProvider}><GatewayList /></CoreAdminContext>)
|
|
|
|
await screen.findAllByText('gw-1')
|
|
fireEvent.change(screen.getByRole('textbox', { name: '网关名称' }), { target: { value: 'gw-2' } })
|
|
fireEvent.change(screen.getByRole('textbox', { name: 'Endpoint' }), { target: { value: 'ftp://gw2:8081' } })
|
|
expect(screen.getByRole('button', { name: '注册网关' }).disabled).toBe(true)
|
|
expect(dataProvider.create).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('deletes a gateway after confirm', async () => {
|
|
const dataProvider = provider()
|
|
window.confirm = vi.fn(() => true)
|
|
render(<CoreAdminContext dataProvider={dataProvider}><GatewayList /></CoreAdminContext>)
|
|
|
|
fireEvent.click(await screen.findByLabelText('删除 gw-1'))
|
|
|
|
await waitFor(() => expect(dataProvider.delete).toHaveBeenCalledWith('gateways', { id: 'gw-1' }))
|
|
})
|
|
})
|