From ea0e49a6e6c042aaabbf195a3cbf12563d160c8e Mon Sep 17 00:00:00 2001 From: Tom Ratcliffe Date: Wed, 28 May 2025 09:37:15 +0100 Subject: [PATCH] Chore: Restrict imports of test files to avoid test pollution (#106057) --- eslint.config.js | 5 + .../matchers/fieldTypeMatcher.test.ts | 10 +- .../src/transformations/matchers/mocks.ts | 10 ++ .../matchers/predicates.test.ts | 2 +- public/app/core/services/FetchQueue.test.ts | 17 +-- .../app/core/services/ResponseQueue.test.ts | 2 +- .../services/__mocks__/subscribeTester.ts | 16 +++ public/app/core/utils/query.test.ts | 2 +- .../app/features/explore/Logs/Logs.test.tsx | 2 +- .../features/explore/Logs/LogsTable.test.tsx | 2 +- .../explore/Logs/LogsTableWrap.test.tsx | 2 +- .../utils/{testMocks.test.ts => mocks.ts} | 10 -- .../TraceView/TraceViewContainer.test.tsx | 2 + .../SearchBar/NextPrevResult.test.tsx | 2 +- .../SearchBar/TracePageSearchBar.test.tsx | 2 +- .../TracePageHeader/TracePageHeader.test.tsx | 130 +----------------- .../components/TracePageHeader/mocks.ts | 128 +++++++++++++++++ .../query/state/updateQueries.test.ts | 5 +- .../LogsQueryEditor/LogsQueryEditor.test.tsx | 2 +- .../components/LogsQueryEditor/mocks.ts | 26 ++++ .../MetricsQueryEditor.test.tsx | 26 +--- .../QueryEditor/QueryEditor.test.tsx | 2 +- .../TracesQueryEditor.test.tsx | 2 +- .../QueryEditor/QueryEditor.test.tsx | 2 +- .../datasource.test.ts | 51 +------ .../grafana-pyroscope-datasource/mocks.ts | 41 ++++++ .../SearchTraceQLEditor/TagsInput.test.tsx | 2 +- .../tempo/SearchTraceQLEditor/mocks.ts | 24 ++++ .../tempo/SearchTraceQLEditor/utils.test.ts | 19 +-- .../tempo/language_provider.test.ts | 2 +- .../tempo/traceql/autocomplete.test.ts | 2 +- 31 files changed, 279 insertions(+), 271 deletions(-) create mode 100644 packages/grafana-data/src/transformations/matchers/mocks.ts create mode 100644 public/app/core/services/__mocks__/subscribeTester.ts rename public/app/features/explore/Logs/utils/{testMocks.test.ts => mocks.ts} (97%) create mode 100644 public/app/features/explore/TraceView/components/TracePageHeader/mocks.ts create mode 100644 public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/mocks.ts create mode 100644 public/app/plugins/datasource/grafana-pyroscope-datasource/mocks.ts create mode 100644 public/app/plugins/datasource/tempo/SearchTraceQLEditor/mocks.ts diff --git a/eslint.config.js b/eslint.config.js index 39937809dfc..884c6c27b8d 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -130,6 +130,11 @@ module.exports = [ importNames: ['Trans'], message: 'Please import from @grafana/i18n instead', }, + { + regex: '\\.test$', + message: + 'Do not import test files. If you require reuse of constants/mocks across files, create a separate file with no tests', + }, ], paths: [ { diff --git a/packages/grafana-data/src/transformations/matchers/fieldTypeMatcher.test.ts b/packages/grafana-data/src/transformations/matchers/fieldTypeMatcher.test.ts index af055205159..7b441e22b75 100644 --- a/packages/grafana-data/src/transformations/matchers/fieldTypeMatcher.test.ts +++ b/packages/grafana-data/src/transformations/matchers/fieldTypeMatcher.test.ts @@ -1,16 +1,8 @@ -import { toDataFrame } from '../../dataframe/processDataFrame'; import { FieldType } from '../../types/dataFrame'; import { fieldMatchers } from '../matchers'; import { FieldMatcherID } from './ids'; - -export const simpleSeriesWithTypes = toDataFrame({ - fields: [ - { name: 'A', type: FieldType.time }, - { name: 'B', type: FieldType.boolean }, - { name: 'C', type: FieldType.string }, - ], -}); +import { simpleSeriesWithTypes } from './mocks'; describe('Field Type Matcher', () => { const matcher = fieldMatchers.get(FieldMatcherID.byType); diff --git a/packages/grafana-data/src/transformations/matchers/mocks.ts b/packages/grafana-data/src/transformations/matchers/mocks.ts new file mode 100644 index 00000000000..e19bf68d7f0 --- /dev/null +++ b/packages/grafana-data/src/transformations/matchers/mocks.ts @@ -0,0 +1,10 @@ +import { toDataFrame } from '../../dataframe/processDataFrame'; +import { FieldType } from '../../types/dataFrame'; + +export const simpleSeriesWithTypes = toDataFrame({ + fields: [ + { name: 'A', type: FieldType.time }, + { name: 'B', type: FieldType.boolean }, + { name: 'C', type: FieldType.string }, + ], +}); diff --git a/packages/grafana-data/src/transformations/matchers/predicates.test.ts b/packages/grafana-data/src/transformations/matchers/predicates.test.ts index 708d9aa8b9f..c60497ef28f 100644 --- a/packages/grafana-data/src/transformations/matchers/predicates.test.ts +++ b/packages/grafana-data/src/transformations/matchers/predicates.test.ts @@ -2,8 +2,8 @@ import { FieldType } from '../../types/dataFrame'; import { MatcherConfig } from '../../types/transformations'; import { fieldMatchers } from '../matchers'; -import { simpleSeriesWithTypes } from './fieldTypeMatcher.test'; import { FieldMatcherID, MatcherID } from './ids'; +import { simpleSeriesWithTypes } from './mocks'; const matchesNumberConfig: MatcherConfig = { id: FieldMatcherID.byType, diff --git a/public/app/core/services/FetchQueue.test.ts b/public/app/core/services/FetchQueue.test.ts index 79c7aa4fa77..a7a93371e6d 100644 --- a/public/app/core/services/FetchQueue.test.ts +++ b/public/app/core/services/FetchQueue.test.ts @@ -1,24 +1,9 @@ -import { Observable } from 'rxjs'; import { take } from 'rxjs/operators'; import { BackendSrvRequest } from '@grafana/runtime'; import { FetchQueue, FetchQueueUpdate, FetchStatus } from './FetchQueue'; - -type SubscribeTesterArgs = { - observable: Observable; - expectCallback: (data: T) => void; - doneCallback: jest.DoneCallback; -}; - -export const subscribeTester = ({ observable, expectCallback, doneCallback }: SubscribeTesterArgs) => { - observable.subscribe({ - next: (data) => expectCallback(data), - complete: () => { - doneCallback(); - }, - }); -}; +import { subscribeTester } from './__mocks__/subscribeTester'; describe('FetchQueue', () => { describe('add', () => { diff --git a/public/app/core/services/ResponseQueue.test.ts b/public/app/core/services/ResponseQueue.test.ts index bfd254ab8c0..09a32847891 100644 --- a/public/app/core/services/ResponseQueue.test.ts +++ b/public/app/core/services/ResponseQueue.test.ts @@ -4,8 +4,8 @@ import { first } from 'rxjs/operators'; import { BackendSrvRequest } from '@grafana/runtime'; import { FetchQueue, FetchQueueUpdate } from './FetchQueue'; -import { subscribeTester } from './FetchQueue.test'; import { ResponseQueue } from './ResponseQueue'; +import { subscribeTester } from './__mocks__/subscribeTester'; const getTestContext = () => { const id = 'id'; diff --git a/public/app/core/services/__mocks__/subscribeTester.ts b/public/app/core/services/__mocks__/subscribeTester.ts new file mode 100644 index 00000000000..ce3bbedd752 --- /dev/null +++ b/public/app/core/services/__mocks__/subscribeTester.ts @@ -0,0 +1,16 @@ +import { Observable } from 'rxjs'; + +type SubscribeTesterArgs = { + observable: Observable; + expectCallback: (data: T) => void; + doneCallback: jest.DoneCallback; +}; + +export const subscribeTester = ({ observable, expectCallback, doneCallback }: SubscribeTesterArgs) => { + observable.subscribe({ + next: (data) => expectCallback(data), + complete: () => { + doneCallback(); + }, + }); +}; diff --git a/public/app/core/utils/query.test.ts b/public/app/core/utils/query.test.ts index 7347f870105..83fc61c94d7 100644 --- a/public/app/core/utils/query.test.ts +++ b/public/app/core/utils/query.test.ts @@ -2,7 +2,7 @@ import { DataQuery } from '@grafana/data'; import { queryIsEmpty } from './query'; -export interface TestQuery extends DataQuery { +interface TestQuery extends DataQuery { name?: string; } diff --git a/public/app/features/explore/Logs/Logs.test.tsx b/public/app/features/explore/Logs/Logs.test.tsx index 85b5906eef6..5135821c28f 100644 --- a/public/app/features/explore/Logs/Logs.test.tsx +++ b/public/app/features/explore/Logs/Logs.test.tsx @@ -27,7 +27,7 @@ import { makeExplorePaneState } from '../state/utils'; import { Logs } from './Logs'; import { visualisationTypeKey } from './utils/logs'; -import { getMockElasticFrame, getMockLokiFrame } from './utils/testMocks.test'; +import { getMockElasticFrame, getMockLokiFrame } from './utils/mocks'; const reportInteraction = jest.fn(); jest.mock('@grafana/runtime', () => ({ diff --git a/public/app/features/explore/Logs/LogsTable.test.tsx b/public/app/features/explore/Logs/LogsTable.test.tsx index a8fa211431e..373bd38504a 100644 --- a/public/app/features/explore/Logs/LogsTable.test.tsx +++ b/public/app/features/explore/Logs/LogsTable.test.tsx @@ -9,7 +9,7 @@ import { extractFieldsTransformer } from 'app/features/transformers/extractField import { parseLogsFrame } from '../../logs/logsFrame'; import { LogsTable } from './LogsTable'; -import { getMockElasticFrame, getMockLokiFrame, getMockLokiFrameDataPlane } from './utils/testMocks.test'; +import { getMockElasticFrame, getMockLokiFrame, getMockLokiFrameDataPlane } from './utils/mocks'; jest.mock('@grafana/runtime', () => { const actual = jest.requireActual('@grafana/runtime'); diff --git a/public/app/features/explore/Logs/LogsTableWrap.test.tsx b/public/app/features/explore/Logs/LogsTableWrap.test.tsx index 3fd2add101f..0698f141043 100644 --- a/public/app/features/explore/Logs/LogsTableWrap.test.tsx +++ b/public/app/features/explore/Logs/LogsTableWrap.test.tsx @@ -8,7 +8,7 @@ import { config } from '@grafana/runtime'; import { extractFieldsTransformer } from '../../transformers/extractFields/extractFields'; import { LogsTableWrap } from './LogsTableWrap'; -import { getMockLokiFrame, getMockLokiFrameDataPlane } from './utils/testMocks.test'; +import { getMockLokiFrame, getMockLokiFrameDataPlane } from './utils/mocks'; const getComponent = (partialProps?: Partial>) => { return ( diff --git a/public/app/features/explore/Logs/utils/testMocks.test.ts b/public/app/features/explore/Logs/utils/mocks.ts similarity index 97% rename from public/app/features/explore/Logs/utils/testMocks.test.ts rename to public/app/features/explore/Logs/utils/mocks.ts index 93ddc7b2eeb..3c97a669fb0 100644 --- a/public/app/features/explore/Logs/utils/testMocks.test.ts +++ b/public/app/features/explore/Logs/utils/mocks.ts @@ -179,13 +179,3 @@ export const getMockElasticFrame = (override?: Partial, timestamp = 1 }; return { ...testDataFrame, ...override }; }; - -it('should return a frame', () => { - expect( - getMockLokiFrame({ - name: 'test', - }) - ).toMatchObject({ - name: 'test', - }); -}); diff --git a/public/app/features/explore/TraceView/TraceViewContainer.test.tsx b/public/app/features/explore/TraceView/TraceViewContainer.test.tsx index dfc1a9607de..ca32e41af81 100644 --- a/public/app/features/explore/TraceView/TraceViewContainer.test.tsx +++ b/public/app/features/explore/TraceView/TraceViewContainer.test.tsx @@ -6,6 +6,8 @@ import { TimeRange } from '@grafana/data'; import { configureStore } from '../../../store/configureStore'; +// TODO: rebase after https://github.com/grafana/grafana/pull/105711, as this is already fixed +// eslint-disable-next-line no-restricted-imports import { frameOld } from './TraceView.test'; import { TraceViewContainer } from './TraceViewContainer'; diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx index 8c815ac8d11..7d4ab670e22 100644 --- a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx +++ b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.test.tsx @@ -19,7 +19,7 @@ import { useState } from 'react'; import { createTheme } from '@grafana/data'; import { defaultFilters } from '../../../useSearch'; -import { trace } from '../TracePageHeader.test'; +import { trace } from '../mocks'; import NextPrevResult, { getStyles } from './NextPrevResult'; diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/TracePageSearchBar.test.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/TracePageSearchBar.test.tsx index da85023411c..29368222e46 100644 --- a/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/TracePageSearchBar.test.tsx +++ b/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/TracePageSearchBar.test.tsx @@ -15,7 +15,7 @@ import { render, screen } from '@testing-library/react'; import { defaultFilters } from '../../../useSearch'; -import { trace } from '../TracePageHeader.test'; +import { trace } from '../mocks'; import TracePageSearchBar from './TracePageSearchBar'; diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.test.tsx b/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.test.tsx index 0896564ef5a..cf123bb85af 100644 --- a/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.test.tsx +++ b/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.test.tsx @@ -19,6 +19,7 @@ import { MutableDataFrame } from '@grafana/data'; import { defaultFilters } from '../../useSearch'; import { TracePageHeader } from './TracePageHeader'; +import { trace } from './mocks'; const setup = () => { const defaultProps = { @@ -61,132 +62,3 @@ describe('TracePageHeader test', () => { expect(timestampPart2).toBeInTheDocument(); }); }); - -export const trace = { - services: [{ name: 'serviceA', numberOfSpans: 1 }], - spans: [ - { - traceID: '164afda25df92413', - spanID: '264afda25df92413', - operationName: 'HTTP Client', - serviceName: 'serviceA', - subsidiarilyReferencedBy: [], - startTime: 1675602037286989, - duration: 5685, - logs: [], - references: [], - tags: [], - processID: '264afda25df92413', - flags: 0, - process: { - serviceName: 'lb', - tags: [], - }, - relativeStartTime: 0, - depth: 0, - hasChildren: false, - childSpanCount: 0, - warnings: [], - childSpanIds: [], - }, - { - traceID: '164afda25df92413', - spanID: '364afda25df92413', - operationName: 'HTTP Client', - serviceName: 'serviceB', - subsidiarilyReferencedBy: [], - startTime: 1675602037286989, - duration: 5685, - logs: [], - references: [], - tags: [ - { - key: 'http.url', - type: 'String', - value: `/v2/gamma/792edh2w897y2huehd2h89`, - }, - { - key: 'http.method', - type: 'String', - value: `POST`, - }, - { - key: 'http.status_code', - type: 'String', - value: `200`, - }, - ], - processID: '364afda25df92413', - flags: 0, - process: { - serviceName: 'lb', - tags: [], - }, - relativeStartTime: 0, - depth: 0, - hasChildren: false, - childSpanCount: 0, - warnings: [], - childSpanIds: [], - }, - { - traceID: '164afda25df92413', - spanID: '464afda25df92413', - operationName: 'HTTP Server', - serviceName: 'serviceC', - subsidiarilyReferencedBy: [], - startTime: 1675602037286989, - duration: 5685, - logs: [], - references: [], - tags: [ - { - key: 'http.url', - type: 'String', - value: `/v2/gamma/792edh2w897y2huehd2h89`, - }, - { - key: 'http.method', - type: 'String', - value: `POST`, - }, - { - key: 'http.status_code', - type: 'String', - value: `200`, - }, - ], - processID: '464afda25df92413', - flags: 0, - process: { - serviceName: 'db', - tags: [], - }, - relativeStartTime: 0, - depth: 0, - hasChildren: false, - childSpanCount: 0, - warnings: [], - childSpanIds: [], - }, - ], - traceID: '8bb35a31-eb64-512d-aaed-ddd61887bb2b', - traceName: 'serviceA: GET', - processes: { - '264afda25df92413': { - serviceName: 'serviceA', - tags: [], - }, - '364afda25df92413': { - serviceName: 'serviceB', - tags: [], - }, - '464afda25df92413': { - serviceName: 'serviceC', - tags: [], - }, - }, - duration: 2355515, - startTime: 1675605056289000, - endTime: 1675605058644515, -}; diff --git a/public/app/features/explore/TraceView/components/TracePageHeader/mocks.ts b/public/app/features/explore/TraceView/components/TracePageHeader/mocks.ts new file mode 100644 index 00000000000..337c1910e03 --- /dev/null +++ b/public/app/features/explore/TraceView/components/TracePageHeader/mocks.ts @@ -0,0 +1,128 @@ +export const trace = { + services: [{ name: 'serviceA', numberOfSpans: 1 }], + spans: [ + { + traceID: '164afda25df92413', + spanID: '264afda25df92413', + operationName: 'HTTP Client', + serviceName: 'serviceA', + subsidiarilyReferencedBy: [], + startTime: 1675602037286989, + duration: 5685, + logs: [], + references: [], + tags: [], + processID: '264afda25df92413', + flags: 0, + process: { + serviceName: 'lb', + tags: [], + }, + relativeStartTime: 0, + depth: 0, + hasChildren: false, + childSpanCount: 0, + warnings: [], + childSpanIds: [], + }, + { + traceID: '164afda25df92413', + spanID: '364afda25df92413', + operationName: 'HTTP Client', + serviceName: 'serviceB', + subsidiarilyReferencedBy: [], + startTime: 1675602037286989, + duration: 5685, + logs: [], + references: [], + tags: [ + { + key: 'http.url', + type: 'String', + value: `/v2/gamma/792edh2w897y2huehd2h89`, + }, + { + key: 'http.method', + type: 'String', + value: `POST`, + }, + { + key: 'http.status_code', + type: 'String', + value: `200`, + }, + ], + processID: '364afda25df92413', + flags: 0, + process: { + serviceName: 'lb', + tags: [], + }, + relativeStartTime: 0, + depth: 0, + hasChildren: false, + childSpanCount: 0, + warnings: [], + childSpanIds: [], + }, + { + traceID: '164afda25df92413', + spanID: '464afda25df92413', + operationName: 'HTTP Server', + serviceName: 'serviceC', + subsidiarilyReferencedBy: [], + startTime: 1675602037286989, + duration: 5685, + logs: [], + references: [], + tags: [ + { + key: 'http.url', + type: 'String', + value: `/v2/gamma/792edh2w897y2huehd2h89`, + }, + { + key: 'http.method', + type: 'String', + value: `POST`, + }, + { + key: 'http.status_code', + type: 'String', + value: `200`, + }, + ], + processID: '464afda25df92413', + flags: 0, + process: { + serviceName: 'db', + tags: [], + }, + relativeStartTime: 0, + depth: 0, + hasChildren: false, + childSpanCount: 0, + warnings: [], + childSpanIds: [], + }, + ], + traceID: '8bb35a31-eb64-512d-aaed-ddd61887bb2b', + traceName: 'serviceA: GET', + processes: { + '264afda25df92413': { + serviceName: 'serviceA', + tags: [], + }, + '364afda25df92413': { + serviceName: 'serviceB', + tags: [], + }, + '464afda25df92413': { + serviceName: 'serviceC', + tags: [], + }, + }, + duration: 2355515, + startTime: 1675605056289000, + endTime: 1675605058644515, +}; diff --git a/public/app/features/query/state/updateQueries.test.ts b/public/app/features/query/state/updateQueries.test.ts index 579a8c59ec2..b0c7e2de673 100644 --- a/public/app/features/query/state/updateQueries.test.ts +++ b/public/app/features/query/state/updateQueries.test.ts @@ -1,11 +1,14 @@ import { DataSourceApi, DataSourceWithQueryExportSupport, DataSourceWithQueryImportSupport } from '@grafana/data'; import { ExpressionDatasourceRef } from '@grafana/runtime/internal'; import { DataQuery } from '@grafana/schema'; -import { TestQuery } from 'app/core/utils/query.test'; import { TemplateSrv } from 'app/features/templating/template_srv'; import { updateQueries } from './updateQueries'; +interface TestQuery extends DataQuery { + name?: string; +} + const oldUidDS = { uid: 'old-uid', type: 'old-type', diff --git a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx index 9eadee09f48..106a7e4e66a 100644 --- a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx @@ -6,9 +6,9 @@ import { dateTime, LoadingState } from '@grafana/data'; import createMockDatasource from '../../__mocks__/datasource'; import createMockQuery from '../../__mocks__/query'; import { ResultFormat } from '../../dataquery.gen'; -import { createMockResourcePickerData } from '../MetricsQueryEditor/MetricsQueryEditor.test'; import LogsQueryEditor from './LogsQueryEditor'; +import { createMockResourcePickerData } from './mocks'; jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), diff --git a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/mocks.ts b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/mocks.ts new file mode 100644 index 00000000000..ecd27888afa --- /dev/null +++ b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/mocks.ts @@ -0,0 +1,26 @@ +import createMockDatasource from '../../__mocks__/datasource'; +import { createMockInstanceSetttings } from '../../__mocks__/instanceSettings'; +import { + createMockSubscriptions, + createMockResourceGroupsBySubscription, + mockResourcesByResourceGroup, +} from '../../__mocks__/resourcePickerRows'; +import ResourcePickerData from '../../resourcePicker/resourcePickerData'; + +export function createMockResourcePickerData() { + const mockDatasource = createMockDatasource(); + const mockResourcePicker = new ResourcePickerData( + createMockInstanceSetttings(), + mockDatasource.azureMonitorDatasource, + mockDatasource.azureResourceGraphDatasource + ); + + mockResourcePicker.getSubscriptions = jest.fn().mockResolvedValue(createMockSubscriptions()); + mockResourcePicker.getResourceGroupsBySubscriptionId = jest + .fn() + .mockResolvedValue(createMockResourceGroupsBySubscription()); + mockResourcePicker.getResourcesForResourceGroup = jest.fn().mockResolvedValue(mockResourcesByResourceGroup()); + mockResourcePicker.getResourceURIFromWorkspace = jest.fn().mockReturnValue(''); + mockResourcePicker.getResourceURIDisplayProperties = jest.fn().mockResolvedValue({}); + return mockResourcePicker; +} diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx index 3a129c12a70..cf92f83b896 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx @@ -2,17 +2,11 @@ import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import createMockDatasource from '../../__mocks__/datasource'; -import { createMockInstanceSetttings } from '../../__mocks__/instanceSettings'; import createMockPanelData from '../../__mocks__/panelData'; import createMockQuery from '../../__mocks__/query'; -import { - createMockResourceGroupsBySubscription, - createMockSubscriptions, - mockResourcesByResourceGroup, -} from '../../__mocks__/resourcePickerRows'; import { selectors } from '../../e2e/selectors'; -import ResourcePickerData from '../../resourcePicker/resourcePickerData'; import { selectOptionInTest } from '../../utils/testUtils'; +import { createMockResourcePickerData } from '../LogsQueryEditor/mocks'; import MetricsQueryEditor from './MetricsQueryEditor'; @@ -30,24 +24,6 @@ const variableOptionGroup = { options: [], }; -export function createMockResourcePickerData() { - const mockDatasource = createMockDatasource(); - const mockResourcePicker = new ResourcePickerData( - createMockInstanceSetttings(), - mockDatasource.azureMonitorDatasource, - mockDatasource.azureResourceGraphDatasource - ); - - mockResourcePicker.getSubscriptions = jest.fn().mockResolvedValue(createMockSubscriptions()); - mockResourcePicker.getResourceGroupsBySubscriptionId = jest - .fn() - .mockResolvedValue(createMockResourceGroupsBySubscription()); - mockResourcePicker.getResourcesForResourceGroup = jest.fn().mockResolvedValue(mockResourcesByResourceGroup()); - mockResourcePicker.getResourceURIFromWorkspace = jest.fn().mockReturnValue(''); - mockResourcePicker.getResourceURIDisplayProperties = jest.fn().mockResolvedValue({}); - return mockResourcePicker; -} - describe('MetricsQueryEditor', () => { const originalScrollIntoView = window.HTMLElement.prototype.scrollIntoView; const mockPanelData = createMockPanelData(); diff --git a/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.test.tsx b/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.test.tsx index 86c9e27dc7d..202e27e604b 100644 --- a/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.test.tsx @@ -10,7 +10,7 @@ import createMockQuery from '../../__mocks__/query'; import { selectors } from '../../e2e/selectors'; import { AzureQueryType, ResultFormat } from '../../types'; import { selectOptionInTest } from '../../utils/testUtils'; -import { createMockResourcePickerData } from '../MetricsQueryEditor/MetricsQueryEditor.test'; +import { createMockResourcePickerData } from '../LogsQueryEditor/mocks'; import QueryEditor from './QueryEditor'; diff --git a/public/app/plugins/datasource/azuremonitor/components/TracesQueryEditor/TracesQueryEditor.test.tsx b/public/app/plugins/datasource/azuremonitor/components/TracesQueryEditor/TracesQueryEditor.test.tsx index ce84d546d58..09f390aaa37 100644 --- a/public/app/plugins/datasource/azuremonitor/components/TracesQueryEditor/TracesQueryEditor.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/TracesQueryEditor/TracesQueryEditor.test.tsx @@ -3,7 +3,7 @@ import userEvent from '@testing-library/user-event'; import createMockDatasource from '../../__mocks__/datasource'; import createMockQuery from '../../__mocks__/query'; -import { createMockResourcePickerData } from '../MetricsQueryEditor/MetricsQueryEditor.test'; +import { createMockResourcePickerData } from '../LogsQueryEditor/mocks'; import TracesQueryEditor from './TracesQueryEditor'; diff --git a/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryEditor.test.tsx b/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryEditor.test.tsx index 5e7ed1e300d..779ffcbb497 100644 --- a/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryEditor.test.tsx +++ b/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryEditor.test.tsx @@ -4,7 +4,7 @@ import userEvent from '@testing-library/user-event'; import { CoreApp, PluginType } from '@grafana/data'; import { PyroscopeDataSource } from '../datasource'; -import { mockFetchPyroscopeDatasourceSettings } from '../datasource.test'; +import { mockFetchPyroscopeDatasourceSettings } from '../mocks'; import { ProfileTypeMessage } from '../types'; import { Props, QueryEditor } from './QueryEditor'; diff --git a/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts b/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts index 8eb122b9258..08c768d8c57 100644 --- a/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts +++ b/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts @@ -1,38 +1,11 @@ -import { - AbstractLabelOperator, - CoreApp, - DataSourceInstanceSettings, - PluginMetaInfo, - PluginType, - DataSourceJsonData, - makeTimeRange, -} from '@grafana/data'; -import { getBackendSrv, setBackendSrv, TemplateSrv } from '@grafana/runtime'; +import { AbstractLabelOperator, CoreApp, makeTimeRange } from '@grafana/data'; +import { TemplateSrv } from '@grafana/runtime'; import { defaultPyroscopeQueryType } from './dataquery.gen'; import { normalizeQuery, PyroscopeDataSource } from './datasource'; +import { defaultSettings, mockFetchPyroscopeDatasourceSettings } from './mocks'; import { Query } from './types'; -/** The datasource QueryEditor fetches datasource settings to send to the extension's `configure` method */ -export function mockFetchPyroscopeDatasourceSettings( - datasourceSettings?: Partial> -) { - const settings = { ...defaultSettings, ...datasourceSettings }; - const returnValues: Record = { - [`/api/datasources/uid/${settings.uid}`]: settings, - }; - setBackendSrv({ - ...getBackendSrv(), - get: function (path: string) { - const value = returnValues[path]; - if (value) { - return Promise.resolve(value as T); - } - return Promise.reject({ message: 'reject' }); - }, - }); -} - function setupDatasource() { mockFetchPyroscopeDatasourceSettings(); const templateSrv = { @@ -175,21 +148,3 @@ const defaultQuery = (query: Partial): Query => { ...query, }; }; - -const defaultSettings: DataSourceInstanceSettings = { - id: 0, - uid: 'pyroscope', - type: 'profiling', - name: 'pyroscope', - access: 'proxy', - meta: { - id: 'pyroscope', - name: 'pyroscope', - type: PluginType.datasource, - info: {} as PluginMetaInfo, - module: '', - baseUrl: '', - }, - jsonData: {}, - readOnly: false, -}; diff --git a/public/app/plugins/datasource/grafana-pyroscope-datasource/mocks.ts b/public/app/plugins/datasource/grafana-pyroscope-datasource/mocks.ts new file mode 100644 index 00000000000..4edd8433967 --- /dev/null +++ b/public/app/plugins/datasource/grafana-pyroscope-datasource/mocks.ts @@ -0,0 +1,41 @@ +import { DataSourceInstanceSettings, DataSourceJsonData, PluginMetaInfo, PluginType } from '@grafana/data'; +import { setBackendSrv, getBackendSrv } from '@grafana/runtime'; + +export const defaultSettings: DataSourceInstanceSettings = { + id: 0, + uid: 'pyroscope', + type: 'profiling', + name: 'pyroscope', + access: 'proxy', + meta: { + id: 'pyroscope', + name: 'pyroscope', + type: PluginType.datasource, + info: {} as PluginMetaInfo, + module: '', + baseUrl: '', + }, + jsonData: {}, + readOnly: false, +}; + +/** The datasource QueryEditor fetches datasource settings to send to the extension's `configure` method */ + +export function mockFetchPyroscopeDatasourceSettings( + datasourceSettings?: Partial> +) { + const settings = { ...defaultSettings, ...datasourceSettings }; + const returnValues: Record = { + [`/api/datasources/uid/${settings.uid}`]: settings, + }; + setBackendSrv({ + ...getBackendSrv(), + get: function (path: string) { + const value = returnValues[path]; + if (value) { + return Promise.resolve(value as T); + } + return Promise.reject({ message: 'reject' }); + }, + }); +} diff --git a/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TagsInput.test.tsx b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TagsInput.test.tsx index 60b5378ddd3..ac348dc8fe9 100644 --- a/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TagsInput.test.tsx +++ b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/TagsInput.test.tsx @@ -8,7 +8,7 @@ import { initTemplateSrv } from '../test/test_utils'; import { Scope } from '../types'; import TagsInput from './TagsInput'; -import { v1Tags, v2Tags } from './utils.test'; +import { v1Tags, v2Tags } from './mocks'; describe('TagsInput', () => { let user: ReturnType; diff --git a/public/app/plugins/datasource/tempo/SearchTraceQLEditor/mocks.ts b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/mocks.ts new file mode 100644 index 00000000000..547b50f8c4f --- /dev/null +++ b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/mocks.ts @@ -0,0 +1,24 @@ +import { uniq } from 'lodash'; + +import { intrinsics } from '../traceql/traceql'; + +export const testIntrinsics = uniq(['duration', 'kind', 'name', 'status'].concat(intrinsics)); + +export const v1Tags = ['bar', 'foo']; + +export const v2Tags = [ + { + name: 'resource', + tags: ['cluster', 'container'], + }, + { + name: 'span', + tags: ['db'], + }, + { + name: 'intrinsic', + tags: testIntrinsics, + }, +]; + +export const emptyTags = []; diff --git a/public/app/plugins/datasource/tempo/SearchTraceQLEditor/utils.test.ts b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/utils.test.ts index df4974921aa..3bdb9875635 100644 --- a/public/app/plugins/datasource/tempo/SearchTraceQLEditor/utils.test.ts +++ b/public/app/plugins/datasource/tempo/SearchTraceQLEditor/utils.test.ts @@ -5,6 +5,7 @@ import { TempoDatasource } from '../datasource'; import TempoLanguageProvider from '../language_provider'; import { intrinsics } from '../traceql/traceql'; +import { emptyTags, testIntrinsics, v1Tags, v2Tags } from './mocks'; import { filterToQuerySection, getAllTags, @@ -155,21 +156,3 @@ describe('filterToQuerySection returns the correct query section for a filter', expect(result).toBe('span.foo=~"bar|baz"'); }); }); - -export const emptyTags = []; -export const testIntrinsics = uniq(['duration', 'kind', 'name', 'status'].concat(intrinsics)); -export const v1Tags = ['bar', 'foo']; -export const v2Tags = [ - { - name: 'resource', - tags: ['cluster', 'container'], - }, - { - name: 'span', - tags: ['db'], - }, - { - name: 'intrinsic', - tags: testIntrinsics, - }, -]; diff --git a/public/app/plugins/datasource/tempo/language_provider.test.ts b/public/app/plugins/datasource/tempo/language_provider.test.ts index ca3c7c5e9d8..4a8a8bb1b83 100644 --- a/public/app/plugins/datasource/tempo/language_provider.test.ts +++ b/public/app/plugins/datasource/tempo/language_provider.test.ts @@ -1,6 +1,6 @@ import { uniq } from 'lodash'; -import { v1Tags, v2Tags } from './SearchTraceQLEditor/utils.test'; +import { v1Tags, v2Tags } from './SearchTraceQLEditor/mocks'; import { TraceqlSearchScope } from './dataquery.gen'; import { TempoDatasource } from './datasource'; import TempoLanguageProvider from './language_provider'; diff --git a/public/app/plugins/datasource/tempo/traceql/autocomplete.test.ts b/public/app/plugins/datasource/tempo/traceql/autocomplete.test.ts index d659ebc30e8..91b534f120c 100644 --- a/public/app/plugins/datasource/tempo/traceql/autocomplete.test.ts +++ b/public/app/plugins/datasource/tempo/traceql/autocomplete.test.ts @@ -1,7 +1,7 @@ import { DataSourceInstanceSettings, PluginMetaInfo, PluginType } from '@grafana/data'; import { monacoTypes } from '@grafana/ui'; -import { emptyTags, testIntrinsics, v1Tags, v2Tags } from '../SearchTraceQLEditor/utils.test'; +import { v1Tags, v2Tags, emptyTags, testIntrinsics } from '../SearchTraceQLEditor/mocks'; import { TempoDatasource } from '../datasource'; import TempoLanguageProvider from '../language_provider'; import { Scope, TempoJsonData } from '../types';