import * as React from 'react'; import expect from 'expect'; import { waitFor, render, screen } from '@testing-library/react'; import { CoreAdminContext } from '../core/CoreAdminContext'; import usePermissions from './usePermissions'; const UsePermissions = ({ children }: any) => { const permissionQueryParams = { retry: false, }; const res = usePermissions({}, permissionQueryParams); return children(res); }; const stateInpector = state => (
{state.isLoading && 'LOADING'} {state.permissions && PERMISSIONS: {state.permissions}} {state.error && 'ERROR'}
); describe('usePermissions', () => { it('should return a loading state on mount', () => { render( {stateInpector} ); expect(screen.queryByText('LOADING')).not.toBeNull(); expect(screen.queryByText('AUTHENTICATED')).toBeNull(); }); it('should return nothing by default after a tick', async () => { render( {stateInpector} ); await waitFor(() => { expect(screen.queryByText('LOADING')).toBeNull(); }); }); it('should return the permissions after a tick', async () => { const authProvider = { login: () => Promise.reject('bad method'), logout: () => Promise.reject('bad method'), checkAuth: () => Promise.reject('bad method'), checkError: () => Promise.reject('bad method'), getPermissions: () => Promise.resolve('admin'), }; render( {stateInpector} ); await waitFor(() => { expect(screen.queryByText('LOADING')).toBeNull(); expect(screen.queryByText('PERMISSIONS: admin')).not.toBeNull(); }); }); it('should return an error after a tick if the auth call fails', async () => { const authProvider = { login: () => Promise.reject('bad method'), logout: () => Promise.reject('bad method'), checkAuth: () => Promise.reject('bad method'), checkError: () => Promise.reject('bad method'), getPermissions: () => Promise.reject('not good'), }; render( {stateInpector} ); await waitFor(() => { expect(screen.queryByText('LOADING')).toBeNull(); expect(screen.queryByText('ERROR')).not.toBeNull(); }); }); });