Files
grafana/packages/grafana-sql/src/components/SqlComponents.testHelpers.ts
T
Zoltán Bedi 85c696c4ad SQL: Add macro support in select case (#88514)
* Feat: timeGroup macro handling in VQB

* Add tests

* Add functions to SQL ds

* Fix lint errors

* Add feature toggle

* Add rendering based on object

* Fix lint

* Fix CI failures

* Fix tests

* Address review comments

* Add docs

* Fix JSX runtime warnings

* Remove docs part that mentions suggest more macros

* Update docs/sources/shared/datasources/sql-query-builder-macros.md

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>

* Add smoke test for this feature

* lint

* Add supported macros to influx

* Add setupTests.ts to include in tsconfig.json

* Import jest-dom instead of setupTests.ts

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2024-11-04 17:13:35 +01:00

96 lines
2.8 KiB
TypeScript

import { TimeRange, PluginType } from '@grafana/data';
import { DB, SQLQuery, SQLSelectableValue, ValidationResults } from '../types';
import { DatasetSelectorProps } from './DatasetSelector';
import { TableSelectorProps } from './TableSelector';
export const buildMockDB = (): DB => ({
datasets: jest.fn(() => Promise.resolve(['dataset1', 'dataset2'])),
tables: jest.fn((_ds: string | undefined) => Promise.resolve(['table1', 'table2'])),
fields: jest.fn((_query: SQLQuery, _order?: boolean) => Promise.resolve<SQLSelectableValue[]>([])),
validateQuery: jest.fn((_query: SQLQuery, _range?: TimeRange) =>
Promise.resolve<ValidationResults>({ query: { refId: '123' }, error: '', isError: false, isValid: true })
),
dsID: jest.fn(() => 1234),
functions: jest.fn(() => []),
getEditorLanguageDefinition: jest.fn(() => ({ id: '4567' })),
toRawSql: (_query: SQLQuery) => '',
});
// This data is of type `SqlDatasource`
export const buildMockDatasource = (hasDefaultDatabaseConfigured?: boolean) => {
return {
id: Infinity,
type: '',
name: '',
uid: '',
responseParser: { transformMetricFindResponse: jest.fn() },
interval: '',
db: buildMockDB(),
preconfiguredDatabase: hasDefaultDatabaseConfigured ? 'default database' : '',
getDB: () => buildMockDB(),
getQueryModel: jest.fn(),
getResponseParser: jest.fn(),
interpolateVariable: jest.fn(),
interpolateVariablesInQueries: jest.fn(),
filterQuery: jest.fn(),
applyTemplateVariables: jest.fn(),
metricFindQuery: jest.fn(),
templateSrv: {
getVariables: jest.fn(),
replace: jest.fn(),
containsTemplate: jest.fn(),
updateTimeRange: jest.fn(),
},
runSql: jest.fn(),
runMetaQuery: jest.fn(),
targetContainsTemplate: jest.fn(),
query: jest.fn(),
getRequestHeaders: jest.fn(),
streamOptionsProvider: jest.fn(),
getResource: jest.fn(),
postResource: jest.fn(),
callHealthCheck: jest.fn(),
testDatasource: jest.fn(),
getRef: jest.fn(),
meta: {
id: '',
name: '',
type: PluginType.panel,
info: {
author: { name: '' },
description: '',
links: [],
logos: { large: '', small: '' },
screenshots: [],
updated: '',
version: '',
},
module: '',
baseUrl: '',
},
};
};
export function buildMockDatasetSelectorProps(overrides?: Partial<DatasetSelectorProps>): DatasetSelectorProps {
return {
db: buildMockDB(),
dataset: '',
dialect: 'other',
onChange: jest.fn(),
preconfiguredDataset: '',
...overrides,
};
}
export function buildMockTableSelectorProps(overrides?: Partial<TableSelectorProps>): TableSelectorProps {
return {
db: buildMockDB(),
dataset: '',
table: '',
onChange: jest.fn(),
...overrides,
};
}