From eca7ce8659e6a56d6f1bcf0b1efc5e3c3189c19e Mon Sep 17 00:00:00 2001 From: "grafana-delivery-bot[bot]" <132647405+grafana-delivery-bot[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 19:21:05 +0200 Subject: [PATCH] [v10.3.x] CloudMonitoring: Only run query if filters are complete (#85015) CloudMonitoring: Only run query if filters are complete (#85004) * Only run query if filters are complete - Update tests * Fix tests (cherry picked from commit 4855751d0dee06cbf23696cc6104f55a6c03bd03) Co-authored-by: Andreas Christou --- .../components/MetricQueryEditor.test.tsx | 31 +++++++++++++++++++ .../components/MetricQueryEditor.tsx | 13 +++++++- 2 files changed, 43 insertions(+), 1 deletion(-) 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 ad2f975ba20..b3975ad9438 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 { getDefaultTimeRange } from '@grafana/data'; @@ -80,4 +82,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 432b5429e91..846ee57fb08 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx @@ -50,8 +50,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] );