123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import {initializeOrg} from 'sentry-test/initializeOrg';
- import {render, screen} from 'sentry-test/reactTestingLibrary';
- import type {PageFilters} from 'sentry/types/core';
- import {useLocation} from 'sentry/utils/useLocation';
- import importedUsePageFilters from 'sentry/utils/usePageFilters';
- import {MetricsContextProvider} from 'sentry/views/metrics/context';
- import {Queries} from 'sentry/views/metrics/queries';
- jest.mock('sentry/utils/useLocation');
- jest.mock('echarts/core', () => {
- return {
- connect: jest.fn(),
- use: jest.fn(),
- };
- });
- jest.mock('sentry/utils/usePageFilters');
- const usePageFilters = jest.mocked(importedUsePageFilters);
- const makeFilterProps = (
- filters: Partial<PageFilters>
- ): ReturnType<typeof importedUsePageFilters> => {
- return {
- isReady: true,
- shouldPersist: true,
- desyncedFilters: new Set(),
- pinnedFilters: new Set(),
- selection: {
- projects: [1],
- environments: ['prod'],
- datetime: {start: new Date(), end: new Date(), period: '14d', utc: true},
- ...filters,
- },
- };
- };
- function renderMockRequests({orgSlug, projectId}: {orgSlug: string; projectId: string}) {
- MockApiClient.addMockResponse({
- url: `/organizations/${orgSlug}/metrics/meta/`,
- body: [
- {
- type: 'd',
- name: 'duration',
- unit: 'millisecond',
- mri: 'd:transactions/duration@millisecond',
- operations: ['avg', 'count'],
- projectIds: [projectId],
- blockingStatus: [],
- },
- {
- type: 'd',
- name: 'duration',
- unit: 'millisecond',
- mri: 'd:spans/duration@millisecond',
- operations: ['avg', 'count'],
- projectIds: [projectId],
- blockingStatus: [],
- },
- ],
- });
- MockApiClient.addMockResponse({
- url: `/organizations/${orgSlug}/metrics/tags/`,
- method: 'GET',
- body: [],
- });
- MockApiClient.addMockResponse({
- method: 'GET',
- url: `/organizations/${orgSlug}/recent-searches/`,
- body: [],
- });
- }
- describe('Queries', function () {
- it('span.duration shall be the default value in the "visualization" field', async function () {
- const {organization, project, router} = initializeOrg();
- jest.mocked(useLocation).mockReturnValue(router.location);
- usePageFilters.mockImplementation(() =>
- makeFilterProps({projects: [Number(project.id)]})
- );
- renderMockRequests({orgSlug: organization.slug, projectId: project.slug});
- render(
- <MetricsContextProvider>
- <Queries />
- </MetricsContextProvider>
- );
- const visualizeInputField = await screen.findByPlaceholderText('Select a metric');
- expect(visualizeInputField).toHaveValue('span.duration');
- });
- it('span.duration shall NOT be the default value in the "visualization" field if query params', async function () {
- const {organization, project, router} = initializeOrg();
- jest.mocked(useLocation).mockReturnValue({
- ...router.location,
- query: {
- widgets: JSON.stringify([
- {
- aggregation: 'avg',
- condition: undefined,
- displayType: 'line',
- focusedSeries: undefined,
- groupBy: undefined,
- id: 0,
- isHidden: false,
- mri: 'd:transactions/duration@millisecond',
- overlays: ['samples'],
- powerUserMode: false,
- query: '',
- sort: {name: undefined, order: 'asc'},
- type: 1,
- },
- ]),
- },
- });
- renderMockRequests({orgSlug: organization.slug, projectId: project.slug});
- render(
- <MetricsContextProvider>
- <Queries />
- </MetricsContextProvider>
- );
- const visualizeInputField = await screen.findByPlaceholderText('Select a metric');
- expect(visualizeInputField).toHaveValue('transaction.duration');
- });
- });
|