dify/web/service/access-control/__tests__/index.spec.tsx

60 lines
1.8 KiB
TypeScript

import type { ReactNode } from 'react'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { renderHook, waitFor } from '@testing-library/react'
import { AccessMode, SubjectType } from '@/models/access-control'
import { post } from '@/service/base'
import { useUpdateAccessMode } from '..'
vi.mock('@/service/base', () => ({
post: vi.fn(),
}))
const createWrapper = () => {
const queryClient = new QueryClient({
defaultOptions: {
queries: { retry: false },
mutations: { retry: false },
},
})
return ({ children }: { children: ReactNode }) => (
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
)
}
describe('access-control service', () => {
beforeEach(() => {
vi.clearAllMocks()
vi.mocked(post).mockResolvedValue({})
})
// Access mode updates keep the legacy webapp whitelist payload contract.
describe('Mutations', () => {
it('should update access mode with legacy subject type values', async () => {
const { result } = renderHook(() => useUpdateAccessMode(), { wrapper: createWrapper() })
result.current.mutate({
appId: 'app-1',
accessMode: AccessMode.SPECIFIC_GROUPS_MEMBERS,
subjects: [
{ subjectId: 'group-1', subjectType: SubjectType.GROUP },
{ subjectId: 'account-1', subjectType: SubjectType.ACCOUNT },
],
})
await waitFor(() => {
expect(post).toHaveBeenCalledWith('/enterprise/webapp/app/access-mode', {
body: {
appId: 'app-1',
accessMode: AccessMode.SPECIFIC_GROUPS_MEMBERS,
subjects: [
{ subjectId: 'group-1', subjectType: SubjectType.GROUP },
{ subjectId: 'account-1', subjectType: SubjectType.ACCOUNT },
],
},
})
})
})
})
})