From d4d306d825f2c194b19eb0535a953a89f6a1fb57 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Wed, 19 Jan 2022 13:04:35 +0000 Subject: [PATCH] Dashboard: Prevent Mixed datasources using the test datasource crashing (#44128) * Special case mixed datasources... :/ * Revert "Special case mixed datasources... :/" This reverts commit dd0e3ea4a8f67786ba369050ff3a571c7b0378b3. * Ensure testdata persists datasource when switching scenario * Add a unit test to prevent regressions * kick drone --- .../datasource/testdata/QueryEditor.test.tsx | 17 +++++++++++++++++ .../plugins/datasource/testdata/QueryEditor.tsx | 1 + 2 files changed, 18 insertions(+) diff --git a/public/app/plugins/datasource/testdata/QueryEditor.test.tsx b/public/app/plugins/datasource/testdata/QueryEditor.test.tsx index 86921d98762..8060ffae023 100644 --- a/public/app/plugins/datasource/testdata/QueryEditor.test.tsx +++ b/public/app/plugins/datasource/testdata/QueryEditor.test.tsx @@ -82,4 +82,21 @@ describe('Test Datasource Query Editor', () => { expect(screen.getByLabelText('Spread')).toHaveValue(3.5); expect(screen.getByLabelText('Bands')).toHaveValue(1); }); + + it('persists the datasource from the query when switching scenario', async () => { + const mockDatasource = { + type: 'test', + uid: 'foo', + }; + setup({ + query: { + ...defaultQuery, + datasource: mockDatasource, + }, + }); + let select = (await screen.findByText('Scenario')).nextSibling!.firstChild!; + await fireEvent.keyDown(select, { keyCode: 40 }); + await userEvent.click(screen.getByText('Grafana API')); + expect(mockOnChange).toHaveBeenCalledWith(expect.objectContaining({ datasource: mockDatasource })); + }); }); diff --git a/public/app/plugins/datasource/testdata/QueryEditor.tsx b/public/app/plugins/datasource/testdata/QueryEditor.tsx index e851ce4d9af..4fb6a95d343 100644 --- a/public/app/plugins/datasource/testdata/QueryEditor.tsx +++ b/public/app/plugins/datasource/testdata/QueryEditor.tsx @@ -82,6 +82,7 @@ export const QueryEditor = ({ query, datasource, onChange, onRunQuery }: Props) scenarioId: item.value!, refId: query.refId, alias: query.alias, + datasource: query.datasource, }; if (scenario.stringInput) {