From 53b5cf52880d3d365b0e4a17fa7c74679661dd96 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Mon, 27 Feb 2023 11:56:15 +0100 Subject: [PATCH] [v9.4.x] AzureMonitor: Fix template variables in ARG subscription field (#63758) AzureMonitor: Fix template variables in ARG subscription field (#63731) Add support for template variables in sub field (cherry picked from commit 823aaaeb7c7e91378994fc7910f3f94783a20f2e) Co-authored-by: Andreas Christou --- .../ArgQueryEditor/ArgQueryEditor.test.tsx | 26 +++++++++++++++++++ .../ArgQueryEditor/ArgQueryEditor.tsx | 4 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.test.tsx b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.test.tsx index d9d223a69e9..318fa67d1fa 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.test.tsx +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.test.tsx @@ -92,4 +92,30 @@ describe('ArgQueryEditor', () => { expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['foo', 'bar'] })); expect(onChange).not.toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['foo', 'bar', 'foobar'] })); }); + + it('should keep a template variable if used in the subscription field', async () => { + const onChange = jest.fn(); + const datasource = createMockDatasource({ + getSubscriptions: jest.fn().mockResolvedValue([{ value: 'foo' }]), + }); + const query = createMockQuery({ + subscriptions: ['$test'], + }); + render( + + ); + expect( + await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.container.input) + ).toBeInTheDocument(); + expect( + await screen.findByTestId(selectors.components.queryEditor.argsQueryEditor.subscriptions.input) + ).toHaveTextContent('$test'); + expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ subscriptions: ['$test'] })); + }); }); diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.tsx b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.tsx index 79aaec260f1..49fcfa9b33f 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.tsx +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ArgQueryEditor/ArgQueryEditor.tsx @@ -33,7 +33,9 @@ function selectSubscriptions( if (querySubscriptions.length === 0 && fetchedSubscriptions.length) { querySubscriptions = [fetchedSubscriptions[0]]; } - const commonSubscriptions = intersection(querySubscriptions, fetchedSubscriptions); + + const templateVars = querySubscriptions.filter((sub) => sub.includes('$')); + const commonSubscriptions = intersection(querySubscriptions, fetchedSubscriptions).concat(templateVars); if (fetchedSubscriptions.length && querySubscriptions.length > commonSubscriptions.length) { // If not all of the query subscriptions are in the list of fetched subscriptions, then // select only the ones present (or the first one if none is present)