diff --git a/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.test.tsx b/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.test.tsx index af079083213..fa36b1f81b2 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.test.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.test.tsx @@ -1,5 +1,7 @@ import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; +import { openMenu } from 'react-select-event'; import { createMockDatasource } from '../__mocks__/cloudMonitoringDatasource'; import { createMockQuery } from '../__mocks__/cloudMonitoringQuery'; @@ -77,4 +79,33 @@ describe('MetricQueryEditor', () => { render(); await waitFor(() => expect(screen.getByLabelText('Alias by').closest('input')!.value).toEqual('AliasTest')); }); + + it('runs a timeSeriesList query if there are no filters', async () => { + const onRunQuery = jest.fn(); + const onChange = jest.fn(); + const query = createMockQuery(); + + render(); + + const groupBy = screen.getByLabelText('Group by'); + openMenu(groupBy); + const option = 'metadata.system_labels.cloud_account'; + await userEvent.click(screen.getByText(option)); + + expect(onRunQuery).toHaveBeenCalledTimes(1); + expect(onChange).toHaveBeenCalledTimes(1); + }); + + it('does not run a timeSeriesList query when filter is added', async () => { + const onRunQuery = jest.fn(); + const onChange = jest.fn(); + const query = createMockQuery(); + + render(); + + const addFilter = screen.getByLabelText('Add'); + await userEvent.click(addFilter); + expect(onRunQuery).toHaveBeenCalledTimes(0); + expect(onChange).toHaveBeenCalledTimes(1); + }); }); diff --git a/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx b/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx index ea3e20a3a79..94268d08450 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx @@ -48,8 +48,19 @@ function Editor({ }: React.PropsWithChildren) { const onChangeTimeSeriesList = useCallback( (timeSeriesList: TimeSeriesList) => { + let filtersComplete = true; + if (timeSeriesList?.filters && timeSeriesList.filters.length > 0) { + for (const filter of timeSeriesList.filters) { + if (filter === '') { + filtersComplete = false; + break; + } + } + } onQueryChange({ ...query, timeSeriesList }); - onRunQuery(); + if (filtersComplete) { + onRunQuery(); + } }, [onQueryChange, onRunQuery, query] );