mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* add support for code editor and builder * refactor cloudwatch migration * Add tooltip to editor field (#56) * add tooltip * add old tooltips * Bug bash feedback fixes (#58) * make ASC the default option * update sql preview whenever sql changes * don't allow queries without aggregation * set default value for aggregation * use new input field * cleanup * pr feedback * prevent unnecessary rerenders * use frame error instead of main error * remove not used snapshot * Use dimension filter in schema picker (#63) * use dimension key filter in group by and schema labels * add dimension filter also to code editor * add tests * fix build error * fix strict error * remove debug code * fix annotation editor (#64) * fix annotation editor * fix broken test * revert annotation backend change * PR feedback (#67) * pr feedback * removed dimension filter from group by * add spacing between common fields and rest * do not generate deep link for metric queries (#70) * update docs (#69) Co-authored-by: Erik Sundell <erik.sundell87@gmail.com> * fix lint problem caused by merge conflict Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com>
134 lines
3.9 KiB
TypeScript
134 lines
3.9 KiB
TypeScript
import React from 'react';
|
|
import { render, screen } from '@testing-library/react';
|
|
import { act } from 'react-dom/test-utils';
|
|
import { CloudWatchMetricsQuery, MetricEditorMode, MetricQueryType } from '../types';
|
|
import { setupMockedDataSource } from '../__mocks__/CloudWatchDataSource';
|
|
import QueryHeader from './QueryHeader';
|
|
|
|
const ds = setupMockedDataSource({
|
|
variables: [],
|
|
});
|
|
ds.datasource.getRegions = jest.fn().mockResolvedValue([]);
|
|
const query: CloudWatchMetricsQuery = {
|
|
id: '',
|
|
region: 'us-east-2',
|
|
namespace: '',
|
|
period: '',
|
|
alias: '',
|
|
metricName: '',
|
|
dimensions: {},
|
|
matchExact: true,
|
|
statistic: '',
|
|
expression: '',
|
|
refId: '',
|
|
};
|
|
|
|
describe('QueryHeader', () => {
|
|
describe('confirm modal', () => {
|
|
it('should be shown when moving from code editor to builder when in sql mode', async () => {
|
|
const onChange = jest.fn();
|
|
const onRunQuery = jest.fn();
|
|
query.metricEditorMode = MetricEditorMode.Code;
|
|
query.metricQueryType = MetricQueryType.Query;
|
|
|
|
render(
|
|
<QueryHeader
|
|
sqlCodeEditorIsDirty={true}
|
|
datasource={ds.datasource}
|
|
query={query}
|
|
onChange={onChange}
|
|
onRunQuery={onRunQuery}
|
|
/>
|
|
);
|
|
|
|
const builderElement = screen.getByLabelText('Builder');
|
|
expect(builderElement).toBeInTheDocument();
|
|
await act(async () => {
|
|
await builderElement.click();
|
|
});
|
|
|
|
const modalTitleElem = screen.getByText('Are you sure?');
|
|
expect(modalTitleElem).toBeInTheDocument();
|
|
expect(onChange).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('should not be shown when moving from builder to code when in sql mode', async () => {
|
|
const onChange = jest.fn();
|
|
const onRunQuery = jest.fn();
|
|
query.metricEditorMode = MetricEditorMode.Builder;
|
|
query.metricQueryType = MetricQueryType.Query;
|
|
|
|
render(
|
|
<QueryHeader
|
|
sqlCodeEditorIsDirty={true}
|
|
datasource={ds.datasource}
|
|
query={query}
|
|
onChange={onChange}
|
|
onRunQuery={onRunQuery}
|
|
/>
|
|
);
|
|
|
|
const builderElement = screen.getByLabelText('Code');
|
|
expect(builderElement).toBeInTheDocument();
|
|
await act(async () => {
|
|
await builderElement.click();
|
|
});
|
|
|
|
const modalTitleElem = screen.queryByText('Are you sure?');
|
|
expect(modalTitleElem).toBeNull();
|
|
expect(onChange).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should not be shown when moving from code to builder when in standard mode', async () => {
|
|
const onChange = jest.fn();
|
|
const onRunQuery = jest.fn();
|
|
query.metricEditorMode = MetricEditorMode.Code;
|
|
query.metricQueryType = MetricQueryType.Search;
|
|
|
|
render(
|
|
<QueryHeader
|
|
sqlCodeEditorIsDirty={true}
|
|
datasource={ds.datasource}
|
|
query={query}
|
|
onChange={onChange}
|
|
onRunQuery={onRunQuery}
|
|
/>
|
|
);
|
|
|
|
const builderElement = screen.getByLabelText('Builder');
|
|
expect(builderElement).toBeInTheDocument();
|
|
await act(async () => {
|
|
await builderElement.click();
|
|
});
|
|
|
|
const modalTitleElem = screen.queryByText('Are you sure?');
|
|
expect(modalTitleElem).toBeNull();
|
|
expect(onChange).toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
it('run button should be displayed in code editor in metric query mode', async () => {
|
|
const onChange = jest.fn();
|
|
const onRunQuery = jest.fn();
|
|
query.metricEditorMode = MetricEditorMode.Code;
|
|
query.metricQueryType = MetricQueryType.Query;
|
|
|
|
render(
|
|
<QueryHeader
|
|
sqlCodeEditorIsDirty={true}
|
|
datasource={ds.datasource}
|
|
query={query}
|
|
onChange={onChange}
|
|
onRunQuery={onRunQuery}
|
|
/>
|
|
);
|
|
|
|
const runQueryButton = screen.getByText('Run query');
|
|
expect(runQueryButton).toBeInTheDocument();
|
|
await act(async () => {
|
|
await runQueryButton.click();
|
|
});
|
|
expect(onRunQuery).toHaveBeenCalled();
|
|
});
|
|
});
|