diff --git a/public/app/plugins/datasource/testdata/QueryEditor.test.tsx b/public/app/plugins/datasource/testdata/QueryEditor.test.tsx index 84e2dd4077c..dcc2bbb6438 100644 --- a/public/app/plugins/datasource/testdata/QueryEditor.test.tsx +++ b/public/app/plugins/datasource/testdata/QueryEditor.test.tsx @@ -4,6 +4,7 @@ import userEvent from '@testing-library/user-event'; import { defaultQuery } from './constants'; import { QueryEditor, Props } from './QueryEditor'; import { scenarios } from './__mocks__/scenarios'; +import { defaultStreamQuery } from './runStreams'; beforeEach(() => { jest.clearAllMocks(); @@ -67,9 +68,13 @@ describe('Test Datasource Query Editor', () => { await fireEvent.keyDown(select, { keyCode: 40 }); await userEvent.click(screen.getByText('Streaming Client')); expect(mockOnChange).toHaveBeenCalledWith( - expect.objectContaining({ scenarioId: 'streaming_client', stringInput: '' }) + expect.objectContaining({ scenarioId: 'streaming_client', stream: defaultStreamQuery }) ); - rerender(); + + const streamQuery = { ...defaultQuery, stream: defaultStreamQuery, scenarioId: 'streaming_client' }; + + rerender(); + expect(await screen.findByText('Streaming Client')).toBeInTheDocument(); expect(screen.getByText('Type')).toBeInTheDocument(); expect(screen.getByLabelText('Noise')).toHaveValue(2.2); diff --git a/public/app/plugins/datasource/testdata/QueryEditor.tsx b/public/app/plugins/datasource/testdata/QueryEditor.tsx index f0ef67aa79e..f91fdbfb372 100644 --- a/public/app/plugins/datasource/testdata/QueryEditor.tsx +++ b/public/app/plugins/datasource/testdata/QueryEditor.tsx @@ -13,9 +13,10 @@ import { TestDataDataSource } from './datasource'; import { TestDataQuery, Scenario, NodesQuery } from './types'; import { PredictablePulseEditor } from './components/PredictablePulseEditor'; import { CSVWaveEditor } from './components/CSVWaveEditor'; -import { defaultQuery } from './constants'; +import { defaultCSVWaveQuery, defaultPulseQuery, defaultQuery } from './constants'; import { GrafanaLiveEditor } from './components/GrafanaLiveEditor'; import { NodeGraphEditor } from './components/NodeGraphEditor'; +import { defaultStreamQuery } from './runStreams'; const showLabelsFor = ['random_walk', 'predictable_pulse', 'predictable_csv_wave']; const endpoints = [ @@ -58,20 +59,33 @@ export const QueryEditor = ({ query, datasource, onChange, onRunQuery }: Props) return; } - const update = { ...query, scenarioId: item.value! }; + // Clear model from existing props that belong to other scenarios + const update: TestDataQuery = { + scenarioId: item.value!, + refId: query.refId, + alias: query.alias, + }; if (scenario.stringInput) { update.stringInput = scenario.stringInput; } - if (scenario.id === 'grafana_api') { - update.stringInput = 'datasources'; - } else if (scenario.id === 'streaming_client') { - update.stringInput = ''; - } else if (scenario.id === 'live') { - if (!update.channel) { + switch (scenario.id) { + case 'grafana_api': + update.stringInput = 'datasources'; + break; + case 'streaming_client': + update.stream = defaultStreamQuery; + break; + case 'live': update.channel = 'random-2s-stream'; // default stream - } + break; + case 'predictable_pulse': + update.pulseWave = defaultPulseQuery; + break; + case 'predictable_csv_wave': + update.csvWave = defaultCSVWaveQuery; + break; } onUpdate(update); diff --git a/public/app/plugins/datasource/testdata/components/ManualEntryEditor.tsx b/public/app/plugins/datasource/testdata/components/ManualEntryEditor.tsx index bc904a355cd..83168856277 100644 --- a/public/app/plugins/datasource/testdata/components/ManualEntryEditor.tsx +++ b/public/app/plugins/datasource/testdata/components/ManualEntryEditor.tsx @@ -9,22 +9,24 @@ export interface Props extends EditorProps { } export const ManualEntryEditor = ({ onChange, query, onRunQuery }: Props) => { + const points = query.points ?? []; + const addPoint = (point: NewPoint) => { const newPointTime = dateMath.parse(point.newPointTime); - const points = [...query.points, [Number(point.newPointValue), newPointTime!.valueOf()]].sort( + const pointsUpdated = [...points, [Number(point.newPointValue), newPointTime!.valueOf()]].sort( (a, b) => a[1] - b[1] ); - onChange({ ...query, points }); + onChange({ ...query, points: pointsUpdated }); onRunQuery(); }; const deletePoint = (point: SelectableValue) => { - const points = query.points.filter((_, index) => index !== point.value); - onChange({ ...query, points }); + const pointsUpdated = points.filter((_, index) => index !== point.value); + onChange({ ...query, points: pointsUpdated }); onRunQuery(); }; - const points = query.points.map((point, index) => { + const pointOptions = points.map((point, index) => { return { label: dateTime(point[1]).format('MMMM Do YYYY, H:mm:ss') + ' : ' + point[0], value: index, @@ -64,7 +66,7 @@ export const ManualEntryEditor = ({ onChange, query, onRunQuery }: Props) => { value[0]} diff --git a/public/app/plugins/datasource/testdata/constants.ts b/public/app/plugins/datasource/testdata/constants.ts index e83d0db47be..e45a7f99a57 100644 --- a/public/app/plugins/datasource/testdata/constants.ts +++ b/public/app/plugins/datasource/testdata/constants.ts @@ -1,7 +1,6 @@ -import { defaultQuery as defaultStreamQuery } from './runStreams'; import { TestDataQuery } from './types'; -export const defaultPulse: any = { +export const defaultPulseQuery: any = { timeStep: 60, onCount: 3, onValue: 2, @@ -9,19 +8,12 @@ export const defaultPulse: any = { offValue: 1, }; -export const defaultCSVWave: any = { +export const defaultCSVWaveQuery: any = { timeStep: 60, valuesCSV: '0,0,2,2,1,1', }; export const defaultQuery: TestDataQuery = { - points: [], - stream: defaultStreamQuery, - pulseWave: defaultPulse, - csvWave: defaultCSVWave, - stringInput: '', scenarioId: 'random_walk', - lines: 10, refId: '', - alias: '', }; diff --git a/public/app/plugins/datasource/testdata/datasource.ts b/public/app/plugins/datasource/testdata/datasource.ts index 1677ce0f239..6e20f5cbbc3 100644 --- a/public/app/plugins/datasource/testdata/datasource.ts +++ b/public/app/plugins/datasource/testdata/datasource.ts @@ -146,7 +146,7 @@ export class TestDataDataSource extends DataSourceWithBackend { } variablesQuery(target: TestDataQuery, options: DataQueryRequest): Observable { - const query = target.stringInput; + const query = target.stringInput ?? ''; const interpolatedQuery = this.templateSrv.replace( query, getSearchFilterScopedVar({ query, wildcardChar: '*', options: options.scopedVars }) diff --git a/public/app/plugins/datasource/testdata/runStreams.ts b/public/app/plugins/datasource/testdata/runStreams.ts index a37d12fc530..89b0fdeea68 100644 --- a/public/app/plugins/datasource/testdata/runStreams.ts +++ b/public/app/plugins/datasource/testdata/runStreams.ts @@ -17,7 +17,7 @@ import { import { TestDataQuery, StreamingQuery } from './types'; import { getRandomLine } from './LogIpsum'; -export const defaultQuery: StreamingQuery = { +export const defaultStreamQuery: StreamingQuery = { type: 'signal', speed: 250, // ms spread: 3.5, @@ -26,7 +26,7 @@ export const defaultQuery: StreamingQuery = { }; export function runStream(target: TestDataQuery, req: DataQueryRequest): Observable { - const query = defaults(target.stream, defaultQuery); + const query = defaults(target.stream, defaultStreamQuery); if ('signal' === query.type) { return runSignalStream(target, query, req); } diff --git a/public/app/plugins/datasource/testdata/types.ts b/public/app/plugins/datasource/testdata/types.ts index 8621b9decba..8be83b5b047 100644 --- a/public/app/plugins/datasource/testdata/types.ts +++ b/public/app/plugins/datasource/testdata/types.ts @@ -17,11 +17,11 @@ export type Points = PointValue[][]; export interface TestDataQuery extends DataQuery { alias?: string; scenarioId: string; - stringInput: string; - points: Points; + stringInput?: string; + points?: Points; stream?: StreamingQuery; pulseWave?: PulseWaveQuery; - csvWave: any; + csvWave?: any; labels?: string; lines?: number; levelColumn?: boolean;