import React from 'react'; import { Router } from 'react-router-dom'; import { render, screen, waitFor } from '@testing-library/react'; import { within } from '@testing-library/dom'; import '@testing-library/jest-dom'; import userEvent from '@testing-library/user-event'; import { createMemoryHistory } from 'history'; import OvalPoliciesShow from '../index'; import { ovalPoliciesShowPath, resolvePath, } from '../../../../helpers/pathsHelper'; import { withRedux, withMockedProvider, tick, withRouter, } from '../../../../testHelper'; import { policyDetailMock, historyMock, historyWithSearch, pushMock, policyCvesMock, policyHostgroupsMock, policyHostgroupsDeniedMock, ovalPolicyId, policyUnauthorizedMock, } from './OvalPoliciesShow.fixtures'; const TestComponent = withRedux( withRouter(withMockedProvider(OvalPoliciesShow)) ); describe('OvalPoliciesShow', () => { it('should load details by default and handle tab change', async () => { const { container } = render( ); expect(screen.getByText('Loading')).toBeInTheDocument(); await waitFor(tick); expect(screen.queryByText('Loading')).not.toBeInTheDocument(); expect(screen.getAllByText('Third policy').pop()).toBeInTheDocument(); expect(screen.getByText('Weekly, on tuesday')).toBeInTheDocument(); expect(screen.getByText('A very strict policy')).toBeInTheDocument(); const activeTabHeader = container.querySelector( '.pf-c-tabs__item.pf-m-current' ); expect(within(activeTabHeader).getByText('Details')).toBeInTheDocument(); userEvent.click(screen.getByRole('tab', { name: 'CVEs' })); expect(pushMock).toHaveBeenCalledWith( resolvePath(ovalPoliciesShowPath, { ':id': ovalPolicyId, ':tab?': 'cves', }) ); }); it('should load details tab when specified in URL', async () => { render( ); expect(screen.getByText('Loading')).toBeInTheDocument(); await waitFor(tick); expect(screen.queryByText('Loading')).not.toBeInTheDocument(); expect(screen.getByText('Weekly, on tuesday')).toBeInTheDocument(); }); it('should not load the page when user does not have permissions', async () => { render( ); await waitFor(tick); expect(screen.queryByText('Loading')).not.toBeInTheDocument(); expect( screen.getByText( 'You are not authorized to view the page. Request the following permissions from administrator: view_oval_policies.' ) ).toBeInTheDocument(); }); it('should load CVEs tab when specified in URL', async () => { const mocks = policyDetailMock.concat(policyCvesMock); render( ); expect(screen.getByText('Loading')).toBeInTheDocument(); await waitFor(tick); await waitFor(tick); expect(screen.queryByText('Loading')).not.toBeInTheDocument(); expect(screen.getByText('CVE-2020-14365')).toBeInTheDocument(); }); it('should have button for scanning all hostgroups', async () => { const btnText = 'Scan All Hostgroups'; const WithProvider = withRedux(withMockedProvider(OvalPoliciesShow)); const history = createMemoryHistory(); history.push = jest.fn(); render( ); await waitFor(tick); expect(screen.queryByText('Loading')).not.toBeInTheDocument(); expect(screen.getByText(btnText)).toBeInTheDocument(); userEvent.click(screen.getByRole('button', { name: btnText })); expect(history.push).toHaveBeenCalledWith( '/job_invocations/new?feature=foreman_openscap_run_oval_scans&host_ids=hostgroup_id+%5E+%284+10+12+11%29&inputs%5Boval_policies%5D=3' ); }); it('should load hostgroups tab when specified in URL', async () => { const mocks = policyDetailMock.concat(policyHostgroupsMock); render( ); expect(screen.getByText('Loading')).toBeInTheDocument(); await waitFor(tick); await waitFor(tick); expect(screen.queryByText('Loading')).not.toBeInTheDocument(); expect(screen.getByText('first hostgroup')).toBeInTheDocument(); }); it('should not show hostgroups for a user without permissions', async () => { const mocks = policyDetailMock.concat(policyHostgroupsDeniedMock); render( ); await waitFor(tick); await waitFor(tick); expect(screen.getByText('Permission denied')).toBeInTheDocument(); }); });