import type { IPermission, IRole } from '@rocket.chat/core-typings'; import { mockAppRoot } from '@rocket.chat/mock-providers'; import { composeStories } from '@storybook/react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { axe } from 'jest-axe'; import PermissionsTable from './PermissionsTable'; import * as stories from './PermissionsTable.stories'; import { createMockedPagination } from '../../../../../tests/mocks/data'; const testCases = Object.values(composeStories(stories)).map((Story) => [Story.storyName || 'Story', Story]); test.each(testCases)(`renders %s without crashing`, async (_storyname, Story) => { const { baseElement } = render(, { wrapper: mockAppRoot().build() }); expect(baseElement).toMatchSnapshot(); }); test.each(testCases)('%s should have no a11y violations', async (_storyname, Story) => { const { container } = render(, { wrapper: mockAppRoot().build() }); // TODO: Needed to skip `label` because fuselage‘s `CheckBox` has a a11y empty label issue // TODO: Needed to skip `button-name` because fuselage‘s `Pagination` buttons are missing names const results = await axe(container, { rules: { 'label': { enabled: false }, 'button-name': { enabled: false } } }); expect(results).toHaveNoViolations(); }); const paginationData = createMockedPagination(); const defaultPermissions: IPermission[] = [ { _id: 'access-permissions', _updatedAt: new Date('2023-01-01'), roles: ['admin'], }, ]; const roles: IRole[] = [ { description: 'Owner of the workspace', name: 'owner', protected: true, scope: 'Users', _id: 'owner', _updatedAt: new Date(), }, { description: 'Administrator', name: 'admin', protected: true, scope: 'Users', _id: 'admin', _updatedAt: new Date(), }, ]; test('should display modal if the permission is access-permissions and has only one granted role', async () => { render( undefined} roleList={roles} paginationData={paginationData} />, { wrapper: mockAppRoot().build(), }, ); await userEvent.click(screen.getByRole('checkbox', { name: 'access-permissions - Administrator' })); expect(screen.getByRole('dialog')).toBeInTheDocument(); }); test('should NOT display modal if the permission is access-permissions and has more than one granted role', async () => { const morePermissions: IPermission[] = [ { _id: 'access-permissions', _updatedAt: new Date('2023-01-01'), roles: ['admin', 'owner'], }, ]; render( undefined} roleList={roles} paginationData={paginationData} />, { wrapper: mockAppRoot().build(), }, ); await userEvent.click(screen.getByRole('checkbox', { name: 'access-permissions - Administrator' })); expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); });