Skip to content

Commit

Permalink
Add unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
machadoum committed Nov 13, 2024
1 parent b6c2437 commit 689a5f4
Showing 1 changed file with 131 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,21 @@
import React from 'react';
import { fireEvent, render, screen } from '@testing-library/react';
import { EntityStoreEnablementModal } from './enablement_modal';
import { useEntityEnginePrivileges } from '../hooks/use_entity_engine_privileges';
import { TestProviders } from '../../../../common/mock';
import type { EntityAnalyticsPrivileges } from '../../../../../common/api/entity_analytics';
import type { RiskEngineMissingPrivilegesResponse } from '../../../hooks/use_missing_risk_engine_privileges';

const mockToggle = jest.fn();
const mockEnableStore = jest.fn(() => jest.fn());

const mockUseEntityEnginePrivileges = jest.fn();
jest.mock('../hooks/use_entity_engine_privileges', () => ({
useEntityEnginePrivileges: jest.fn(),
useEntityEnginePrivileges: () => mockUseEntityEnginePrivileges(),
}));

const mockUseMissingRiskEnginePrivileges = jest.fn();
jest.mock('../../../hooks/use_missing_risk_engine_privileges', () => ({
useMissingRiskEnginePrivileges: () => mockUseMissingRiskEnginePrivileges(),
}));

const defaultProps = {
Expand All @@ -25,65 +33,144 @@ const defaultProps = {
entityStore: { disabled: false, checked: false },
};

const allEntityEnginePrivileges: EntityAnalyticsPrivileges = {
has_all_required: true,
privileges: {
elasticsearch: {
cluster: {
manage_enrich: true,
},
index: { 'logs-*': { read: false, view_index_metadata: true } },
},
kibana: {
'saved_object:entity-engine-status/all': true,
},
},
};

const missingEntityEnginePrivileges: EntityAnalyticsPrivileges = {
has_all_required: false,
privileges: {
elasticsearch: {
cluster: {
manage_enrich: false,
},
index: { 'logs-*': { read: false, view_index_metadata: false } },
},
kibana: {
'saved_object:entity-engine-status/all': false,
},
},
};

const allRiskEnginePrivileges: RiskEngineMissingPrivilegesResponse = {
hasAllRequiredPrivileges: true,
isLoading: false,
};

const missingRiskEnginePrivileges: RiskEngineMissingPrivilegesResponse = {
isLoading: false,
hasAllRequiredPrivileges: false,
missingPrivileges: {
clusterPrivileges: [],
indexPrivileges: [],
},
};

const renderComponent = (props = defaultProps) => {
return render(<EntityStoreEnablementModal {...props} />, { wrapper: TestProviders });
};

describe('EntityStoreEnablementModal', () => {
beforeEach(() => {
jest.clearAllMocks();
(useEntityEnginePrivileges as jest.Mock).mockReturnValue({
data: {
privileges: {
elasticsearch: {
index: {},
},
kibana: {},
},
},
isLoading: false,
});
});

it('should render the modal when visible is true', () => {
renderComponent();
expect(screen.getByRole('dialog')).toBeInTheDocument();
});
describe('with all privileges', () => {
beforeEach(() => {
mockUseEntityEnginePrivileges.mockReturnValue({
data: allEntityEnginePrivileges,
isLoading: false,
});

it('should not render the modal when visible is false', () => {
renderComponent({ ...defaultProps, visible: false });
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
});
mockUseMissingRiskEnginePrivileges.mockReturnValue(allRiskEnginePrivileges);
});

it('should call toggle function when cancel button is clicked', () => {
renderComponent();
fireEvent.click(screen.getByText('Cancel'));
expect(mockToggle).toHaveBeenCalledWith(false);
});
it('should render the modal when visible is true', () => {
renderComponent();
expect(screen.getByRole('dialog')).toBeInTheDocument();
});

it('should call enableStore function when enable button is clicked', () => {
renderComponent({
...defaultProps,
riskScore: { ...defaultProps.riskScore, checked: true },
entityStore: { ...defaultProps.entityStore, checked: true },
it('should not render the modal when visible is false', () => {
renderComponent({ ...defaultProps, visible: false });
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
});
fireEvent.click(screen.getByText('Enable'));
expect(mockEnableStore).toHaveBeenCalledWith({ riskScore: true, entityStore: true });
});

it('should display proceed warning when no enablement options are selected', () => {
renderComponent();
expect(screen.getByText('Please enable at least one option to proceed.')).toBeInTheDocument();
it('should call toggle function when cancel button is clicked', () => {
renderComponent();
fireEvent.click(screen.getByText('Cancel'));
expect(mockToggle).toHaveBeenCalledWith(false);
});

it('should call enableStore function when enable button is clicked', () => {
renderComponent({
...defaultProps,
riskScore: { ...defaultProps.riskScore, checked: true },
entityStore: { ...defaultProps.entityStore, checked: true },
});
fireEvent.click(screen.getByText('Enable'));
expect(mockEnableStore).toHaveBeenCalledWith({ riskScore: true, entityStore: true });
});

it('should display proceed warning when no enablement options are selected', () => {
renderComponent();
expect(screen.getByText('Please enable at least one option to proceed.')).toBeInTheDocument();
});

it('should disable the enable button when enablementOptions are false', () => {
renderComponent({
...defaultProps,
riskScore: { ...defaultProps.riskScore, checked: false },
entityStore: { ...defaultProps.entityStore, checked: false },
});

const enableButton = screen.getByRole('button', { name: /Enable/i });
expect(enableButton).toBeDisabled();
});

it('should not show entity engine missing privileges warning when no missing privileges', () => {
renderComponent();
expect(
screen.queryByTestId('callout-missing-entity-store-privileges')
).not.toBeInTheDocument();
});

it('should not show risk engine missing privileges warning when no missing privileges', () => {
renderComponent();
expect(
screen.queryByTestId('callout-missing-risk-engine-privileges')
).not.toBeInTheDocument();
});
});

it('should disable the enable button when enablementOptions are false', () => {
renderComponent({
...defaultProps,
riskScore: { ...defaultProps.riskScore, checked: false },
entityStore: { ...defaultProps.entityStore, checked: false },
describe('with no privileges', () => {
beforeEach(() => {
mockUseEntityEnginePrivileges.mockReturnValue({
data: missingEntityEnginePrivileges,
isLoading: false,
});

mockUseMissingRiskEnginePrivileges.mockReturnValue(missingRiskEnginePrivileges);
});

it('should show entity engine missing privileges warning when missing privileges', () => {
renderComponent();
expect(screen.getByTestId('callout-missing-entity-store-privileges')).toBeInTheDocument();
});

const enableButton = screen.getByRole('button', { name: /Enable/i });
expect(enableButton).toBeDisabled();
it('should show risk engine missing privileges warning when missing privileges', () => {
renderComponent();
expect(screen.getByTestId('callout-missing-risk-engine-privileges')).toBeInTheDocument();
});
});
});

0 comments on commit 689a5f4

Please sign in to comment.