import { render } from 'test/test-utils'; import { byRole, byText } from 'testing-library-selector'; import { AccessControlAction } from 'app/types'; import { RuleGroupIdentifier } from 'app/types/unified-alerting'; import { setupMswServer } from '../../mockApi'; import { grantUserPermissions } from '../../mocks'; import { grafanaRulerGroupName, grafanaRulerGroupName2, grafanaRulerNamespace } from '../../mocks/grafanaRulerApi'; import { GROUP_1, NAMESPACE_1, NAMESPACE_2, namespace2 } from '../../mocks/mimirRulerApi'; import { mimirDataSource } from '../../mocks/server/configure'; import { MIMIR_DATASOURCE_UID } from '../../mocks/server/constants'; import { captureRequests, serializeRequests } from '../../mocks/server/events'; import { SwapOperation } from '../../reducers/ruler/ruleGroups'; import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; import { SerializeState } from '../useAsync'; import { useMoveRuleGroup, useRenameRuleGroup, useReorderRuleForRuleGroup, useUpdateRuleGroupConfiguration, } from './useUpdateRuleGroup'; setupMswServer(); beforeAll(() => { grantUserPermissions([AccessControlAction.AlertingRuleExternalRead, AccessControlAction.AlertingRuleRead]); }); describe('useUpdateRuleGroupConfiguration', () => { it('should update a rule group interval', async () => { const capture = captureRequests(); const { user } = render(); await user.click(byRole('button').get()); expect(await byText(/success/i).find()).toBeInTheDocument(); const requests = await capture; const serializedRequests = await serializeRequests(requests); expect(serializedRequests).toMatchSnapshot(); }); it('should rename a rule group', async () => { const capture = captureRequests(); const { user } = render(); await user.click(byRole('button').get()); expect(await byText(/success/i).find()).toBeInTheDocument(); const requests = await capture; const serializedRequests = await serializeRequests(requests); expect(serializedRequests).toMatchSnapshot(); }); it('should throw if we are trying to merge rule groups', async () => { const { user } = render(); await user.click(byRole('button').get()); expect(await byText(/error:.+not supported.+/i).find()).toBeInTheDocument(); }); it('should not be able to move a Grafana managed rule group', async () => { const { user } = render(); await user.click(byRole('button').get()); expect(await byText(/error:.+not supported.+/i).find()).toBeInTheDocument(); }); it('should be able to move a Data Source managed rule group', async () => { mimirDataSource(); const capture = captureRequests(); const { user } = render( ); await user.click(byRole('button').get()); expect(await byText(/success/i).find()).toBeInTheDocument(); const requests = await capture; const serializedRequests = await serializeRequests(requests); expect(serializedRequests).toMatchSnapshot(); }); it('should not move a Data Source managed rule group to namespace with existing target group name', async () => { mimirDataSource(); const { user } = render( ); await user.click(byRole('button').get()); expect(await byText(/error:.+not supported.+/i).find()).toBeInTheDocument(); }); }); describe('reorder rules for rule group', () => { it('should correctly reorder rules', async () => { mimirDataSource(); const capture = captureRequests(); const swaps: SwapOperation[] = [[1, 0]]; const { user } = render( ); await user.click(byRole('button').get()); expect(await byText(/success/i).find()).toBeInTheDocument(); const requests = await capture; const serializedRequests = await serializeRequests(requests); expect(serializedRequests).toMatchSnapshot(); }); }); const UpdateRuleGroupComponent = () => { const [updateRuleGroup, requestState] = useUpdateRuleGroupConfiguration(); const ruleGroupID: RuleGroupIdentifier = { dataSourceName: GRAFANA_RULES_SOURCE_NAME, groupName: grafanaRulerGroupName, namespaceName: grafanaRulerNamespace.uid, }; return ( <>