import React from 'react'; import { RBACWrapper } from '../RBACWrapper'; import { render, screen } from '@testing-library/react'; import { RBACProvider } from '../RBACContext'; describe('RBAC Component', () => { it('Should throw error when component not wrapped with RBAC context', () => { const s = jest.spyOn(console, 'error').mockImplementation(() => jest.fn()); expect(() => render( hi ) ).toThrow('Please connect RBAC context'); s.mockRestore(); }); it('Should display component when all roles valid', () => { render( test ); expect(screen.getByText('test')).toBeInTheDocument(); }); it('Should display component when all permissions valid', () => { render( test ); expect(screen.getByText('test')).toBeInTheDocument(); }); it('Should hide component when roles not valid', () => { render( test ); expect(screen.queryByText('test')).toBeNull(); }); it('Should hide component when permissions not valid', () => { render( test ); expect(screen.queryByText('test')).toBeNull(); }); it('Should replace component', () => { render( fallback} > test ); expect(screen.getByText('fallback')).toBeInTheDocument(); }); it('Should change styled to blocked component', () => { render( test ); expect(screen.getByText('test')).toHaveStyle({ color: 'green' }); }); it('Children should be able to receive state', () => { render( {({ hasRequiredPermissions }) => ( {hasRequiredPermissions ? 'test' : 'blocked'} )} ); expect(screen.getByText('blocked')).toBeInTheDocument(); }); it('Should display component when oneOf roles satisfied', () => { render( test ); expect(screen.getByText('test')).toBeInTheDocument(); }); it('Should display component when oneOf permissions satisfied', () => { render( test ); expect(screen.getByText('test')).toBeInTheDocument(); }); it('On of for roles + permissions', () => { render( test ); expect(screen.getByText('test')).toBeInTheDocument(); }); it("Has permissions but don't have roles ", () => { render( test ); expect(screen.queryByText('test')).toBeNull(); }); it("Has roles but don't have permissions ", () => { render( test ); expect(screen.queryByText('test')).toBeNull(); }); it('Required permissions on roles ', () => { render( test ); expect(screen.getByText('test')).toBeInTheDocument(); }); });