diff --git a/static/app/components/metrics/equationSymbol.spec.tsx b/static/app/components/metrics/equationSymbol.spec.tsx new file mode 100644 index 00000000000000..dfdcf74cba24b1 --- /dev/null +++ b/static/app/components/metrics/equationSymbol.spec.tsx @@ -0,0 +1,24 @@ +import {render, screen} from 'sentry-test/reactTestingLibrary'; +import {textWithMarkupMatcher} from 'sentry-test/utils'; + +import { + EquationSymbol, + getEquationSymbol, +} from 'sentry/components/metrics/equationSymbol'; + +describe('getEquationSymbol', () => { + it('should return the correct symbol', () => { + expect(getEquationSymbol(0)).toBe('ƒ1'); + expect(getEquationSymbol(1)).toBe('ƒ2'); + }); +}); + +describe('EquationSymbol', () => { + it('renders', () => { + render(); + expect(screen.getByText(textWithMarkupMatcher('ƒ1'))).toBeInTheDocument(); + + render(); + expect(screen.getByText(textWithMarkupMatcher('ƒ6'))).toBeInTheDocument(); + }); +}); diff --git a/static/app/views/metrics/equationSymbol.tsx b/static/app/components/metrics/equationSymbol.tsx similarity index 100% rename from static/app/views/metrics/equationSymbol.tsx rename to static/app/components/metrics/equationSymbol.tsx diff --git a/static/app/components/metrics/querySymbol.spec.tsx b/static/app/components/metrics/querySymbol.spec.tsx new file mode 100644 index 00000000000000..b47735bfd7a5c8 --- /dev/null +++ b/static/app/components/metrics/querySymbol.spec.tsx @@ -0,0 +1,33 @@ +import {render, screen} from 'sentry-test/reactTestingLibrary'; + +import {getQuerySymbol, QuerySymbol} from 'sentry/components/metrics/querySymbol'; + +describe('getQuerySymbol', () => { + it('should return the correct symbol', () => { + expect(getQuerySymbol(0)).toBe('a'); + expect(getQuerySymbol(1)).toBe('b'); + expect(getQuerySymbol(25)).toBe('z'); + expect(getQuerySymbol(26)).toBe('aa'); + expect(getQuerySymbol(27)).toBe('ab'); + expect(getQuerySymbol(52)).toBe('ba'); + expect(getQuerySymbol(53)).toBe('bb'); + expect(getQuerySymbol(77)).toBe('bz'); + expect(getQuerySymbol(78)).toBe('ca'); + expect(getQuerySymbol(702)).toBe('aaa'); + }); +}); + +describe('QuerySymbol', () => { + it('renders', () => { + render(); + expect(screen.getByText('a')).toBeInTheDocument(); + + render(); + expect(screen.getByText('ab')).toBeInTheDocument(); + }); + + it('does not render for negative query ids', () => { + const {container} = render(); + expect(container).toBeEmptyDOMElement(); + }); +}); diff --git a/static/app/views/metrics/querySymbol.tsx b/static/app/components/metrics/querySymbol.tsx similarity index 100% rename from static/app/views/metrics/querySymbol.tsx rename to static/app/components/metrics/querySymbol.tsx diff --git a/static/app/components/modals/metricWidgetViewerModal/queries.tsx b/static/app/components/modals/metricWidgetViewerModal/queries.tsx index 459da23f8f070c..ffbaa2e370c81e 100644 --- a/static/app/components/modals/metricWidgetViewerModal/queries.tsx +++ b/static/app/components/modals/metricWidgetViewerModal/queries.tsx @@ -8,7 +8,9 @@ import type {MenuItemProps} from 'sentry/components/dropdownMenu'; import {DropdownMenu} from 'sentry/components/dropdownMenu'; import Input, {type InputProps} from 'sentry/components/input'; import {CreateMetricAlertFeature} from 'sentry/components/metrics/createMetricAlertFeature'; +import {EquationSymbol} from 'sentry/components/metrics/equationSymbol'; import {QueryBuilder} from 'sentry/components/metrics/queryBuilder'; +import {getQuerySymbol, QuerySymbol} from 'sentry/components/metrics/querySymbol'; import {Tooltip} from 'sentry/components/tooltip'; import {DEFAULT_DEBOUNCE_DURATION, SLOW_TOOLTIP_DELAY} from 'sentry/constants'; import { @@ -36,10 +38,8 @@ import type { } from 'sentry/views/dashboards/metrics/types'; import {getMetricQueryName} from 'sentry/views/dashboards/metrics/utils'; import {DisplayType} from 'sentry/views/dashboards/types'; -import {EquationSymbol} from 'sentry/views/metrics/equationSymbol'; import {EquationInput} from 'sentry/views/metrics/formulaInput'; import {getCreateAlert} from 'sentry/views/metrics/metricQueryContextMenu'; -import {getQuerySymbol, QuerySymbol} from 'sentry/views/metrics/querySymbol'; interface Props { addEquation: () => void; diff --git a/static/app/utils/metrics/dashboardImport.tsx b/static/app/utils/metrics/dashboardImport.tsx index dd19db003c0547..0f42059a824afe 100644 --- a/static/app/utils/metrics/dashboardImport.tsx +++ b/static/app/utils/metrics/dashboardImport.tsx @@ -1,10 +1,10 @@ import {Client} from 'sentry/api'; +import {getQuerySymbol} from 'sentry/components/metrics/querySymbol'; import type {MetricMeta, MRI} from 'sentry/types/metrics'; import {convertToDashboardWidget} from 'sentry/utils/metrics/dashboard'; import type {MetricsQuery} from 'sentry/utils/metrics/types'; import {MetricDisplayType} from 'sentry/utils/metrics/types'; import type {Widget} from 'sentry/views/dashboards/types'; -import {getQuerySymbol} from 'sentry/views/metrics/querySymbol'; // import types export type ImportDashboard = { description: string; diff --git a/static/app/views/dashboards/metrics/utils.tsx b/static/app/views/dashboards/metrics/utils.tsx index 23624c9345992a..525dda15213840 100644 --- a/static/app/views/dashboards/metrics/utils.tsx +++ b/static/app/views/dashboards/metrics/utils.tsx @@ -1,5 +1,7 @@ import {useMemo} from 'react'; +import {getEquationSymbol} from 'sentry/components/metrics/equationSymbol'; +import {getQuerySymbol} from 'sentry/components/metrics/querySymbol'; import type {MRI} from 'sentry/types/metrics'; import {unescapeMetricsFormula} from 'sentry/utils/metrics'; import {NO_QUERY_ID} from 'sentry/utils/metrics/constants'; @@ -18,8 +20,6 @@ import { type WidgetQuery, WidgetType, } from 'sentry/views/dashboards/types'; -import {getEquationSymbol} from 'sentry/views/metrics/equationSymbol'; -import {getQuerySymbol} from 'sentry/views/metrics/querySymbol'; import {getUniqueQueryIdGenerator} from 'sentry/views/metrics/utils/uniqueQueryId'; function extendQuery(query = '', dashboardFilters?: DashboardFilters) { diff --git a/static/app/views/metrics/pageHeaderActions.tsx b/static/app/views/metrics/pageHeaderActions.tsx index 6db1f0f86ea297..16a44e9d13d876 100644 --- a/static/app/views/metrics/pageHeaderActions.tsx +++ b/static/app/views/metrics/pageHeaderActions.tsx @@ -8,6 +8,7 @@ import {Button} from 'sentry/components/button'; import ButtonBar from 'sentry/components/buttonBar'; import {DropdownMenu} from 'sentry/components/dropdownMenu'; import {CreateMetricAlertFeature} from 'sentry/components/metrics/createMetricAlertFeature'; +import {QuerySymbol} from 'sentry/components/metrics/querySymbol'; import { IconBookmark, IconDashboard, @@ -25,7 +26,6 @@ import useOrganization from 'sentry/utils/useOrganization'; import useRouter from 'sentry/utils/useRouter'; import {useMetricsContext} from 'sentry/views/metrics/context'; import {getCreateAlert} from 'sentry/views/metrics/metricQueryContextMenu'; -import {QuerySymbol} from 'sentry/views/metrics/querySymbol'; import {useCreateDashboard} from 'sentry/views/metrics/useCreateDashboard'; import {useFormulaDependencies} from 'sentry/views/metrics/utils/useFormulaDependencies'; diff --git a/static/app/views/metrics/queries.tsx b/static/app/views/metrics/queries.tsx index 209042305cbd33..e371e31f83b54c 100644 --- a/static/app/views/metrics/queries.tsx +++ b/static/app/views/metrics/queries.tsx @@ -4,7 +4,9 @@ import * as echarts from 'echarts/core'; import GuideAnchor from 'sentry/components/assistant/guideAnchor'; import {Button} from 'sentry/components/button'; +import {EquationSymbol} from 'sentry/components/metrics/equationSymbol'; import {QueryBuilder} from 'sentry/components/metrics/queryBuilder'; +import {getQuerySymbol, QuerySymbol} from 'sentry/components/metrics/querySymbol'; import SwitchButton from 'sentry/components/switchButton'; import {Tooltip} from 'sentry/components/tooltip'; import {IconAdd} from 'sentry/icons'; @@ -23,11 +25,9 @@ import useOrganization from 'sentry/utils/useOrganization'; import usePageFilters from 'sentry/utils/usePageFilters'; import {METRIC_CHART_GROUP} from 'sentry/views/metrics/constants'; import {useMetricsContext} from 'sentry/views/metrics/context'; -import {EquationSymbol} from 'sentry/views/metrics/equationSymbol'; import {EquationInput} from 'sentry/views/metrics/formulaInput'; import {MetricFormulaContextMenu} from 'sentry/views/metrics/metricFormulaContextMenu'; import {MetricQueryContextMenu} from 'sentry/views/metrics/metricQueryContextMenu'; -import {getQuerySymbol, QuerySymbol} from 'sentry/views/metrics/querySymbol'; import {useFormulaDependencies} from 'sentry/views/metrics/utils/useFormulaDependencies'; export function Queries() { diff --git a/static/app/views/metrics/querySymbol.spec.tsx b/static/app/views/metrics/querySymbol.spec.tsx deleted file mode 100644 index a97387286dac36..00000000000000 --- a/static/app/views/metrics/querySymbol.spec.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import {getQuerySymbol} from 'sentry/views/metrics/querySymbol'; - -describe('getQuerySymbol', () => { - it('should return the correct symbol', () => { - expect(getQuerySymbol(0)).toBe('a'); - expect(getQuerySymbol(1)).toBe('b'); - expect(getQuerySymbol(25)).toBe('z'); - expect(getQuerySymbol(26)).toBe('aa'); - expect(getQuerySymbol(27)).toBe('ab'); - expect(getQuerySymbol(52)).toBe('ba'); - expect(getQuerySymbol(53)).toBe('bb'); - expect(getQuerySymbol(77)).toBe('bz'); - expect(getQuerySymbol(78)).toBe('ca'); - expect(getQuerySymbol(702)).toBe('aaa'); - }); -}); diff --git a/static/app/views/metrics/utils/useFormulaDependencies.tsx b/static/app/views/metrics/utils/useFormulaDependencies.tsx index 90b55447a89e0b..b09d60add69172 100644 --- a/static/app/views/metrics/utils/useFormulaDependencies.tsx +++ b/static/app/views/metrics/utils/useFormulaDependencies.tsx @@ -1,5 +1,6 @@ import {useCallback, useMemo} from 'react'; +import {getQuerySymbol} from 'sentry/components/metrics/querySymbol'; import {unescapeMetricsFormula} from 'sentry/utils/metrics'; import { isMetricsEquationWidget, @@ -9,7 +10,6 @@ import { import {useMetricsContext} from 'sentry/views/metrics/context'; import {parseFormula} from 'sentry/views/metrics/formulaParser/parser'; import {type TokenList, TokenType} from 'sentry/views/metrics/formulaParser/types'; -import {getQuerySymbol} from 'sentry/views/metrics/querySymbol'; interface FormulaDependencies { dependencies: MetricsQueryWidget[]; diff --git a/static/app/views/metrics/utils/widgetToQuery.tsx b/static/app/views/metrics/utils/widgetToQuery.tsx index ed9738f0018c8c..23bf9a87b3f1f4 100644 --- a/static/app/views/metrics/utils/widgetToQuery.tsx +++ b/static/app/views/metrics/utils/widgetToQuery.tsx @@ -1,7 +1,7 @@ +import {getEquationSymbol} from 'sentry/components/metrics/equationSymbol'; +import {getQuerySymbol} from 'sentry/components/metrics/querySymbol'; import {isMetricsEquationWidget, type MetricsWidget} from 'sentry/utils/metrics/types'; import type {MetricsQueryApiQueryParams} from 'sentry/utils/metrics/useMetricsQuery'; -import {getEquationSymbol} from 'sentry/views/metrics/equationSymbol'; -import {getQuerySymbol} from 'sentry/views/metrics/querySymbol'; export function widgetToQuery( widget: MetricsWidget,