From a421f55cd5ffd10d69ef0219dbedead3ef97c5e3 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Tue, 22 Jul 2025 17:47:52 +0200 Subject: [PATCH] Azure: Fix time management field (#107993) * Fix mode setting * Update selector * Add tests * Fix condition --- .../LogsQueryBuilder/LogsQueryBuilder.tsx | 2 +- .../QueryEditor/QueryEditor.test.tsx | 70 ++++++++++++++++++- .../components/QueryEditor/QueryHeader.tsx | 8 ++- .../datasource/azuremonitor/e2e/selectors.ts | 3 + 4 files changed, 80 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/azuremonitor/components/LogsQueryBuilder/LogsQueryBuilder.tsx b/public/app/plugins/datasource/azuremonitor/components/LogsQueryBuilder/LogsQueryBuilder.tsx index 3015fa4179b..c37ee551b18 100644 --- a/public/app/plugins/datasource/azuremonitor/components/LogsQueryBuilder/LogsQueryBuilder.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/LogsQueryBuilder/LogsQueryBuilder.tsx @@ -131,7 +131,7 @@ export const LogsQueryBuilder: React.FC = (props) => { ); return ( - + {schema && tables.length === 0 && ( ({ })); describe('Azure Monitor QueryEditor', () => { + beforeEach(() => { + config.featureToggles = {}; + }); + + afterEach(() => { + cleanup(); + jest.clearAllMocks(); + }); + it('renders the Metrics query editor when the query type is Metrics', async () => { const mockDatasource = createMockDatasource(); const mockQuery = { @@ -67,6 +76,65 @@ describe('Azure Monitor QueryEditor', () => { ); }); + it('renders the Logs code editor when there is an existing query and the builder is enabled', async () => { + config.featureToggles.azureMonitorLogsBuilderEditor = true; + const mockDatasource = createMockDatasource(); + const mockQuery = { + ...createMockQuery(), + queryType: AzureQueryType.LogAnalytics, + }; + + render( {}} onRunQuery={() => {}} />); + await waitFor(() => { + expect( + screen.queryByTestId(selectors.components.queryEditor.logsQueryEditor.container.input) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(selectors.components.queryEditor.logsQueryBuilder.container.input) + ).not.toBeInTheDocument(); + }); + }); + + it('renders the Logs code editor when there is no existing query and the builder is disabled', async () => { + config.featureToggles.azureMonitorLogsBuilderEditor = false; + const mockDatasource = createMockDatasource(); + const mockQuery = { + ...createMockQuery(), + queryType: AzureQueryType.LogAnalytics, + }; + delete mockQuery.azureLogAnalytics?.query; + + render( {}} onRunQuery={() => {}} />); + await waitFor(() => { + expect( + screen.queryByTestId(selectors.components.queryEditor.logsQueryEditor.container.input) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(selectors.components.queryEditor.logsQueryBuilder.container.input) + ).not.toBeInTheDocument(); + }); + }); + + it('renders the Logs builder when there is no existing query and the builder is enabled', async () => { + config.featureToggles.azureMonitorLogsBuilderEditor = true; + const mockDatasource = createMockDatasource(); + const mockQuery = { + ...createMockQuery(), + queryType: AzureQueryType.LogAnalytics, + }; + delete mockQuery.azureLogAnalytics?.query; + + render( {}} onRunQuery={() => {}} />); + await waitFor(() => { + expect( + screen.queryByTestId(selectors.components.queryEditor.logsQueryEditor.container.input) + ).toBeInTheDocument(); + expect( + screen.queryByTestId(selectors.components.queryEditor.logsQueryBuilder.container.input) + ).not.toBeInTheDocument(); + }); + }); + it('renders the ARG query editor when the query type is ARG', async () => { const mockDatasource = createMockDatasource(); const mockQuery = { diff --git a/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryHeader.tsx b/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryHeader.tsx index 035a918fc8d..75d89a8fc47 100644 --- a/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryHeader.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryHeader.tsx @@ -64,7 +64,13 @@ export const QueryHeader = ({ ...query, azureLogAnalytics: { ...query.azureLogAnalytics, - mode: LogsEditorMode.Builder, + // Builder mode is default unless there is an existing Log Analytics query + // that was not created with the builder + mode: + (query.azureLogAnalytics?.builderQuery === undefined && query.azureLogAnalytics?.query !== undefined) || + !config.featureToggles.azureMonitorLogsBuilderEditor + ? LogsEditorMode.Raw + : LogsEditorMode.Builder, dashboardTime: true, }, }; diff --git a/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts b/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts index 636d8dcac31..6f0b5ccedd0 100644 --- a/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts +++ b/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts @@ -80,6 +80,9 @@ export const components = { button: 'data-testid run-query', }, }, + logsQueryBuilder: { + container: { input: 'data-testid azure-monitor-logs-query-builder' }, + }, argsQueryEditor: { container: { input: 'data-testid azure-monitor-arg-query-editor',