import React from 'react'; import { renderHook, act } from '@testing-library/react-hooks'; import * as hooks from '../RBAC.hooks'; import { RBACProvider } from '../RBACContext'; describe('RBAC hooks', () => { describe('useGetRolesState', () => { it('Should check if has roles', () => { const { result } = renderHook((props) => hooks.useGetRolesState(props), { initialProps: ['admin'], wrapper: ({ children }) => ( {children} ), }); act(() => { expect(result.current).toHaveLength(1); expect(result.current).toMatchInlineSnapshot(` Array [ Object { "added": false, "blocked": false, "existing": true, }, ] `); }); }); }); describe('useGetPermissionsState', () => { it('Should check if has permissions', () => { const { result } = renderHook( (props) => hooks.useGetPermissionsState(props), { initialProps: ['add_credit'], wrapper: ({ children }) => ( {children} ), } ); act(() => { expect(result.current).toHaveLength(1); expect(result.current).toMatchInlineSnapshot(` Array [ Object { "added": false, "blocked": false, "existing": true, }, ] `); }); }); }); describe('Context functionality test', () => { it('Should be able to modify permissions', () => { const { result } = renderHook(hooks.useRBACContext, { initialProps: { permissions: ['add_credit'] }, wrapper: ({ children, permissions }) => ( {children} ), }); act(() => { result.current.addPermissions(['something']); }); expect(result.current.addedPermissions).toEqual({ something: 'something', }); act(() => { result.current.blockPermissions(['something']); }); expect(result.current.addedPermissions).toEqual({}); expect(result.current.blockedPermissions).toEqual({ something: 'something', }); act(() => { result.current.addPermissions(['something2']); }); expect(result.current.addedPermissions).toEqual({ something2: 'something2', }); expect(result.current.blockedPermissions).toEqual({ something: 'something', }); }); it('Should be able to modify roles', () => { const { result } = renderHook(hooks.useRBACContext, { initialProps: { permissions: ['add_credit'] }, wrapper: ({ children, permissions }) => ( {children} ), }); act(() => { result.current.addRoles(['something']); }); expect(result.current.addedRoles).toEqual({ something: 'something', }); act(() => { result.current.blockRoles(['something']); }); expect(result.current.addedRoles).toEqual({}); expect(result.current.blockedRoles).toEqual({ something: 'something', }); act(() => { result.current.addRoles(['something2']); }); expect(result.current.addedRoles).toEqual({ something2: 'something2', }); expect(result.current.blockedRoles).toEqual({ something: 'something', }); }); it('Should be able to reset all modifications', () => { const { result } = renderHook(hooks.useRBACContext, { initialProps: { permissions: ['add_credit'] }, wrapper: ({ children, permissions }) => ( {children} ), }); act(() => { result.current.addRoles(['something']); result.current.addPermissions(['something']); }); expect(result.current.addedRoles).toEqual({ something: 'something', }); expect(result.current.addedPermissions).toEqual({ something: 'something', }); act(() => { result.current.blockRoles(['something2']); result.current.blockPermissions(['something2']); }); expect(result.current.blockedRoles).toEqual({ something2: 'something2', }); expect(result.current.blockedPermissions).toEqual({ something2: 'something2', }); act(() => { result.current.resetAll(); }); expect(result.current.addedRoles).toEqual({}); expect(result.current.addedPermissions).toEqual({}); expect(result.current.blockedRoles).toEqual({}); expect(result.current.blockedPermissions).toEqual({}); }); }); });