diff --git a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx index 5855aa1a6a5b5f1..adaad246118db0c 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx @@ -5,27 +5,28 @@ * 2.0. */ +import { fireEvent, waitFor } from '@testing-library/dom'; +import { cleanup } from '@testing-library/react'; +import { createBrowserHistory } from 'history'; import React from 'react'; import Router from 'react-router-dom'; -import { createBrowserHistory } from 'history'; -import { waitFor, fireEvent, screen } from '@testing-library/dom'; -import { cleanup } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { render } from '../../utils/test_helper'; -import { useKibana } from '../../utils/kibana_react'; -import { useLicense } from '../../hooks/use_license'; -import { useFetchIndices } from '../../hooks/use_fetch_indices'; -import { useFetchDataViews } from '../../hooks/use_fetch_data_views'; -import { useFetchSloDetails } from '../../hooks/slo/use_fetch_slo_details'; +import { paths } from '../../../common/locators/paths'; +import { buildSlo } from '../../data/slo/slo'; +import { useCapabilities } from '../../hooks/slo/use_capabilities'; import { useCreateSlo } from '../../hooks/slo/use_create_slo'; -import { useUpdateSlo } from '../../hooks/slo/use_update_slo'; import { useFetchApmSuggestions } from '../../hooks/slo/use_fetch_apm_suggestions'; +import { useFetchIndexPatternFields } from '../../hooks/slo/use_fetch_index_pattern_fields'; +import { useFetchSloDetails } from '../../hooks/slo/use_fetch_slo_details'; +import { useUpdateSlo } from '../../hooks/slo/use_update_slo'; +import { useFetchDataViews } from '../../hooks/use_fetch_data_views'; +import { useFetchIndices } from '../../hooks/use_fetch_indices'; +import { useLicense } from '../../hooks/use_license'; +import { useKibana } from '../../utils/kibana_react'; import { kibanaStartMock } from '../../utils/kibana_react.mock'; -import { buildSlo } from '../../data/slo/slo'; -import { paths } from '../../../common/locators/paths'; +import { render } from '../../utils/test_helper'; +import { SLO_EDIT_FORM_DEFAULT_VALUES } from './constants'; import { SloEditPage } from './slo_edit'; -import { useCapabilities } from '../../hooks/slo/use_capabilities'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -41,6 +42,7 @@ jest.mock('../../hooks/slo/use_create_slo'); jest.mock('../../hooks/slo/use_update_slo'); jest.mock('../../hooks/slo/use_fetch_apm_suggestions'); jest.mock('../../hooks/slo/use_capabilities'); +jest.mock('../../hooks/slo/use_fetch_index_pattern_fields'); const mockUseKibanaReturnValue = kibanaStartMock.startContract(); @@ -56,6 +58,7 @@ const useFetchSloMock = useFetchSloDetails as jest.Mock; const useCreateSloMock = useCreateSlo as jest.Mock; const useUpdateSloMock = useUpdateSlo as jest.Mock; const useFetchApmSuggestionsMock = useFetchApmSuggestions as jest.Mock; +const useFetchIndexPatternFieldsMock = useFetchIndexPatternFields as jest.Mock; const useCapabilitiesMock = useCapabilities as jest.Mock; const mockAddSuccess = jest.fn(); @@ -122,12 +125,48 @@ const mockKibana = () => { }; describe('SLO Edit Page', () => { + const mockCreate = jest.fn(); + const mockUpdate = jest.fn(); + beforeEach(() => { jest.clearAllMocks(); mockKibana(); // Silence all the ref errors in Eui components. + jest.spyOn(console, 'warn').mockImplementation(() => {}); jest.spyOn(console, 'error').mockImplementation(() => {}); + + jest.spyOn(Router, 'useHistory').mockReturnValue(createBrowserHistory()); + + useFetchDataViewsMock.mockReturnValue({ + isLoading: false, + data: [{ getName: () => 'dataview', getIndexPattern: () => '.dataview-index' }], + }); + useFetchIndicesMock.mockReturnValue({ + isLoading: false, + data: ['some-index', 'index-2'], + }); + useFetchIndexPatternFieldsMock.mockReturnValue({ + isLoading: false, + data: [ + { name: 'field', type: 'date', aggregatable: false, searchable: false }, + { name: 'field_text', type: 'text', aggregatable: true, searchable: true }, + ], + }); + + useCreateSloMock.mockReturnValue({ + isLoading: false, + isSuccess: false, + isError: false, + mutateAsync: mockCreate, + }); + + useUpdateSloMock.mockReturnValue({ + isLoading: false, + isSuccess: false, + isError: false, + mutateAsync: mockUpdate, + }); }); afterEach(cleanup); @@ -149,28 +188,6 @@ describe('SLO Edit Page', () => { useFetchSloMock.mockReturnValue({ isLoading: false, slo: undefined }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - useFetchDataViewsMock.mockReturnValue({ isLoading: false, data: [] }); - - useCreateSloMock.mockReturnValue({ - isLoading: false, - isSuccess: false, - isError: false, - mutate: jest.fn(), - mutateAsync: jest.fn(), - }); - - useUpdateSloMock.mockReturnValue({ - isLoading: false, - isSuccess: false, - isError: false, - mutate: jest.fn(), - mutateAsync: jest.fn(), - }); - render(); expect(mockNavigate).toBeCalledWith(mockBasePathPrepend(paths.observability.slos)); @@ -184,7 +201,6 @@ describe('SLO Edit Page', () => { hasReadCapabilities: true, }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); - useFetchDataViewsMock.mockReturnValue({ isLoading: false, data: [] }); }); describe('with no write permission', () => { @@ -203,27 +219,6 @@ describe('SLO Edit Page', () => { useFetchSloMock.mockReturnValue({ isLoading: false, slo: undefined }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - - useCreateSloMock.mockReturnValue({ - isLoading: false, - isSuccess: false, - isError: false, - mutate: jest.fn(), - mutateAsync: jest.fn(), - }); - - useUpdateSloMock.mockReturnValue({ - isLoading: false, - isSuccess: false, - isError: false, - mutate: jest.fn(), - mutateAsync: jest.fn(), - }); - render(); expect(mockNavigate).toBeCalledWith(mockBasePathPrepend(paths.observability.slos)); @@ -231,141 +226,32 @@ describe('SLO Edit Page', () => { }); describe('when no sloId route param is provided', () => { - it('renders the SLO Edit page in pristine state', async () => { - jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: undefined }); - jest - .spyOn(Router, 'useLocation') - .mockReturnValue({ pathname: 'foo', search: '', state: '', hash: '' }); - + beforeEach(() => { useFetchSloMock.mockReturnValue({ isLoading: false, slo: undefined }); - - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - - useCreateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - render(); - - expect(screen.queryByTestId('slosEditPage')).toBeTruthy(); - expect(screen.queryByTestId('sloForm')).toBeTruthy(); - - expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); - // Show default values from the kql indicator - expect(screen.queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue('sli.kql.custom'); - expect(screen.queryByTestId('indexSelectionSelectedValue')).toBeNull(); - expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue(''); - expect(screen.queryByTestId('customKqlIndicatorFormGoodQueryInput')).toHaveValue(''); - expect(screen.queryByTestId('customKqlIndicatorFormTotalQueryInput')).toHaveValue(''); - - // other sections are hidden - expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeNull(); - expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeNull(); }); - it.skip('calls the createSlo hook if all required values are filled in', async () => { + it('renders the SLO Edit page in pristine state', async () => { jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: undefined }); jest .spyOn(Router, 'useLocation') .mockReturnValue({ pathname: 'foo', search: '', state: '', hash: '' }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - - useFetchSloMock.mockReturnValue({ isLoading: false, slo: undefined }); - - const mockCreate = jest.fn(); - const mockUpdate = jest.fn(); - - useCreateSloMock.mockReturnValue({ - mutateAsync: mockCreate, - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: mockUpdate, - isLoading: false, - isSuccess: false, - isError: false, - }); + const { queryByTestId } = render(); - render(); + expect(queryByTestId('slosEditPage')).toBeTruthy(); + expect(queryByTestId('sloForm')).toBeTruthy(); - userEvent.type(screen.getByTestId('indexSelection'), 'some-index'); - userEvent.type(screen.getByTestId('customKqlIndicatorFormQueryFilterInput'), 'irrelevant'); - userEvent.type(screen.getByTestId('customKqlIndicatorFormGoodQueryInput'), 'irrelevant'); - userEvent.type(screen.getByTestId('customKqlIndicatorFormTotalQueryInput'), 'irrelevant'); - userEvent.selectOptions(screen.getByTestId('sloFormBudgetingMethodSelect'), 'occurrences'); - userEvent.selectOptions(screen.getByTestId('sloFormTimeWindowDurationSelect'), '7d'); - userEvent.clear(screen.getByTestId('sloFormObjectiveTargetInput')); - userEvent.type(screen.getByTestId('sloFormObjectiveTargetInput'), '98.5'); - userEvent.type(screen.getByTestId('sloFormNameInput'), 'irrelevant'); - userEvent.type(screen.getByTestId('sloFormDescriptionTextArea'), 'irrelevant'); + expect(queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); + // Show default values from the kql indicator + expect(queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue('sli.kql.custom'); + expect(queryByTestId('indexSelectionSelectedValue')).toBeNull(); - // all sections are visible - expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); - expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeTruthy(); - expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeTruthy(); - - expect(screen.getByTestId('sloFormSubmitButton')).toBeEnabled(); - - fireEvent.click(screen.getByTestId('sloFormSubmitButton')!); - - expect(mockCreate).toMatchInlineSnapshot(` - [MockFunction] { - "calls": Array [ - Array [ - Object { - "budgetingMethod": "occurrences", - "description": "irrelevant", - "indicator": Object { - "params": Object { - "filter": "irrelevant", - "good": "irrelevant", - "index": "some-index", - "total": "irrelevant", - }, - "type": "sli.kql.custom", - }, - "name": "irrelevant", - "objective": Object { - "target": 0.985, - }, - "timeWindow": Object { - "duration": "7d", - "type": "rolling", - }, - }, - ], - ], - "results": Array [ - Object { - "type": "return", - "value": undefined, - }, - ], - } - `); + // other sections are hidden + expect(queryByTestId('sloEditFormObjectiveSection')).toBeNull(); + expect(queryByTestId('sloEditFormDescriptionSection')).toBeNull(); }); - it('prefills the form with values when URL Search parameters are passed', () => { + it('prefills the form with values from URL', () => { jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: undefined }); const history = createBrowserHistory(); @@ -377,160 +263,80 @@ describe('SLO Edit Page', () => { .spyOn(Router, 'useLocation') .mockReturnValue({ pathname: 'foo', search: '', state: '', hash: '' }); - useFetchSloMock.mockReturnValue({ isLoading: false, slo: undefined }); - useFetchApmSuggestionsMock.mockReturnValue({ suggestions: ['cartService'], isLoading: false, }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); + const { queryByTestId } = render(); - useCreateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - render(); - - expect(screen.queryByTestId('slosEditPage')).toBeTruthy(); - expect(screen.queryByTestId('sloForm')).toBeTruthy(); + expect(queryByTestId('slosEditPage')).toBeTruthy(); + expect(queryByTestId('sloForm')).toBeTruthy(); - expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); - expect(screen.queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue( + expect(queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); + expect(queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue( 'sli.apm.transactionDuration' ); - expect(screen.queryByTestId('apmLatencyServiceSelector')).toHaveTextContent('cartService'); - expect(screen.queryByTestId('apmLatencyEnvironmentSelector')).toHaveTextContent('prod'); + expect(queryByTestId('apmLatencyServiceSelector')).toHaveTextContent('cartService'); + expect(queryByTestId('apmLatencyEnvironmentSelector')).toHaveTextContent('prod'); - expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeFalsy(); - expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeFalsy(); + expect(queryByTestId('sloEditFormObjectiveSection')).toBeFalsy(); + expect(queryByTestId('sloEditFormDescriptionSection')).toBeFalsy(); }); }); describe('when a sloId route param is provided', () => { - it.only('prefills the form SLO with the SLO values', async () => { - const slo = buildSlo({ id: '123' }); + it('prefills the form with the SLO values', async () => { + const slo = buildSlo({ id: '123Foo' }); + useFetchSloMock.mockReturnValue({ isLoading: false, isInitialLoading: false, slo }); jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); + jest.spyOn(Router, 'useHistory').mockReturnValue(createBrowserHistory()); jest .spyOn(Router, 'useLocation') .mockReturnValue({ pathname: 'foo', search: '', state: '', hash: '' }); - useFetchSloMock.mockReturnValue({ isLoading: false, isInitialLoading: false, slo }); + const { queryByTestId } = render(); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - - useCreateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - render(); - - expect(screen.queryByTestId('slosEditPage')).toBeTruthy(); - expect(screen.queryByTestId('sloForm')).toBeTruthy(); + expect(queryByTestId('slosEditPage')).toBeTruthy(); + expect(queryByTestId('sloForm')).toBeTruthy(); // all sections are visible - expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); - expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeTruthy(); - expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeTruthy(); + expect(queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); + expect(queryByTestId('sloEditFormObjectiveSection')).toBeTruthy(); + expect(queryByTestId('sloEditFormDescriptionSection')).toBeTruthy(); - expect(screen.queryByTestId('indexSelectionSelectedValue')).toHaveTextContent( - slo.indicator.params.index! - ); - expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue( - slo.indicator.params.filter ?? '' - ); - expect(screen.queryByTestId('customKqlIndicatorFormGoodQueryInput')).toHaveValue( - slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.good : '' - ); - expect(screen.queryByTestId('customKqlIndicatorFormTotalQueryInput')).toHaveValue( - slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.total : '' - ); - - expect(screen.queryByTestId('sloFormBudgetingMethodSelect')).toHaveValue( - slo.budgetingMethod - ); - expect(screen.queryByTestId('sloFormTimeWindowDurationSelect')).toHaveValue( + expect(queryByTestId('sloFormBudgetingMethodSelect')).toHaveValue(slo.budgetingMethod); + expect(queryByTestId('sloFormTimeWindowDurationSelect')).toHaveValue( slo.timeWindow.duration ); - expect(screen.queryByTestId('sloFormObjectiveTargetInput')).toHaveValue( + expect(queryByTestId('sloFormObjectiveTargetInput')).toHaveValue( slo.objective.target * 100 ); - expect(screen.queryByTestId('sloFormNameInput')).toHaveValue(slo.name); - expect(screen.queryByTestId('sloFormDescriptionTextArea')).toHaveValue(slo.description); + expect(queryByTestId('sloFormNameInput')).toHaveValue(slo.name); + expect(queryByTestId('sloFormDescriptionTextArea')).toHaveValue(slo.description); }); it('calls the updateSlo hook if all required values are filled in', async () => { const slo = buildSlo({ id: '123' }); - jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); - - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - useFetchSloMock.mockReturnValue({ isLoading: false, slo }); - const mockCreate = jest.fn(); - const mockUpdate = jest.fn(); - - useCreateSloMock.mockReturnValue({ - mutateAsync: mockCreate, - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: mockUpdate, - isLoading: false, - isSuccess: false, - isError: false, - }); + const { queryByTestId } = render(); - render(); - - expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); - fireEvent.click(screen.queryByTestId('sloFormSubmitButton')!); + expect(queryByTestId('sloFormSubmitButton')).toBeEnabled(); + fireEvent.click(queryByTestId('sloFormSubmitButton')!); expect(mockUpdate).toMatchInlineSnapshot(`[MockFunction]`); }); - it('prefills the form with the SLO values merged with the URL state', () => { + it('prefills the form with the provided URL values and the default values', () => { const slo = buildSlo({ id: '123' }); - jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); const history = createBrowserHistory(); history.push( - '/slos/create?_a=(name:%updated-name%27,indicator:(params:(environment:prod,service:cartService),type:sli.apm.transactionDuration))' + '/slos/123/edit?_a=(name:%27updated-name%27,indicator:(params:(environment:prod,service:cartService),type:sli.apm.transactionDuration),objective:(target:0.92))' ); jest.spyOn(Router, 'useHistory').mockReturnValue(history); jest @@ -544,57 +350,24 @@ describe('SLO Edit Page', () => { isLoading: false, }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - - useCreateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - render(); + const { queryByTestId } = render(); // all sections are visible - expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); - expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeTruthy(); - expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeTruthy(); + expect(queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); + expect(queryByTestId('sloEditFormObjectiveSection')).toBeTruthy(); + expect(queryByTestId('sloEditFormDescriptionSection')).toBeTruthy(); - expect(screen.queryByTestId('indexSelectionSelectedValue')).toHaveTextContent( - slo.indicator.params.index! - ); - expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue( - slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.filter : '' - ); - expect(screen.queryByTestId('customKqlIndicatorFormGoodQueryInput')).toHaveValue( - slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.good : '' + expect(queryByTestId('indexSelectionSelectedValue')).toBeNull(); + expect(queryByTestId('sloFormBudgetingMethodSelect')).toHaveValue( + SLO_EDIT_FORM_DEFAULT_VALUES.budgetingMethod ); - expect(screen.queryByTestId('customKqlIndicatorFormTotalQueryInput')).toHaveValue( - slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.total : '' + expect(queryByTestId('sloFormTimeWindowDurationSelect')).toHaveValue( + SLO_EDIT_FORM_DEFAULT_VALUES.timeWindow.duration ); + expect(queryByTestId('sloFormObjectiveTargetInput')).toHaveValue(92); - expect(screen.queryByTestId('sloFormBudgetingMethodSelect')).toHaveValue( - slo.budgetingMethod - ); - expect(screen.queryByTestId('sloFormTimeWindowDurationSelect')).toHaveValue( - slo.timeWindow.duration - ); - expect(screen.queryByTestId('sloFormObjectiveTargetInput')).toHaveValue( - slo.objective.target * 100 - ); - - expect(screen.queryByTestId('sloFormNameInput')).toHaveValue(slo.name); - expect(screen.queryByTestId('sloFormDescriptionTextArea')).toHaveValue(slo.description); + expect(queryByTestId('sloFormNameInput')).toHaveValue('updated-name'); + expect(queryByTestId('sloFormDescriptionTextArea')).toHaveValue(''); }); }); @@ -609,31 +382,12 @@ describe('SLO Edit Page', () => { useFetchSloMock.mockReturnValue({ isLoading: false, slo }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); + const { getByTestId } = render(); - useCreateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - render(); - - expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); + expect(getByTestId('sloFormSubmitButton')).toBeEnabled(); await waitFor(() => { - fireEvent.click(screen.getByTestId('sloFormSubmitButton')); + fireEvent.click(getByTestId('sloFormSubmitButton')); }); await waitFor(() => { expect(mockNavigate).toBeCalledWith(mockBasePathPrepend(paths.observability.slos)); @@ -650,32 +404,13 @@ describe('SLO Edit Page', () => { useFetchSloMock.mockReturnValue({ isLoading: false, slo }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - - useCreateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - render(); + const { getByTestId } = render(); - expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); + expect(getByTestId('sloFormSubmitButton')).toBeEnabled(); await waitFor(() => { - fireEvent.click(screen.getByTestId('createNewRuleCheckbox')); - fireEvent.click(screen.getByTestId('sloFormSubmitButton')); + fireEvent.click(getByTestId('createNewRuleCheckbox')); + fireEvent.click(getByTestId('sloFormSubmitButton')); }); await waitFor(() => { @@ -695,29 +430,10 @@ describe('SLO Edit Page', () => { useFetchSloMock.mockReturnValue({ isLoading: false, slo }); - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - data: ['some-index'], - }); - - useCreateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - useUpdateSloMock.mockReturnValue({ - mutateAsync: jest.fn(), - isLoading: false, - isSuccess: false, - isError: false, - }); - - render(); + const { getByTestId } = render(); await waitFor(() => { - expect(screen.getByTestId('add-rule-flyout')).toBeTruthy(); + expect(getByTestId('add-rule-flyout')).toBeTruthy(); }); }); });