Skip to content

Commit 7d3cb88

Browse files
committed
add tests and update API to switch on type
1 parent 4ee4d22 commit 7d3cb88

File tree

7 files changed

+303
-51
lines changed

7 files changed

+303
-51
lines changed

static/app/views/explore/metrics/metricQuery.spec.tsx

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1+
import {EQUATION_PREFIX} from 'sentry/utils/discover/fields';
12
import {Mode} from 'sentry/views/explore/contexts/pageParamsContext/mode';
23
import {
34
decodeMetricsQueryParams,
5+
defaultMetricQuery,
46
encodeMetricQueryParams,
57
} from 'sentry/views/explore/metrics/metricQuery';
68
import {ReadableQueryParams} from 'sentry/views/explore/queryParams/readableQueryParams';
7-
import {VisualizeFunction} from 'sentry/views/explore/queryParams/visualize';
9+
import {
10+
VisualizeEquation,
11+
VisualizeFunction,
12+
} from 'sentry/views/explore/queryParams/visualize';
813

914
describe('decodeMetricsQueryParams', () => {
1015
it('parses all visualizes', () => {
@@ -114,3 +119,41 @@ describe('decodeMetricsQueryParams', () => {
114119
);
115120
});
116121
});
122+
123+
describe('defaultMetricQuery', () => {
124+
it('returns a default metric query', () => {
125+
const result = defaultMetricQuery();
126+
expect(result).toEqual({
127+
metric: {name: '', type: ''},
128+
queryParams: new ReadableQueryParams({
129+
extrapolate: true,
130+
mode: Mode.SAMPLES,
131+
query: '',
132+
cursor: '',
133+
fields: ['id', 'timestamp'],
134+
sortBys: [{field: 'timestamp', kind: 'desc'}],
135+
aggregateCursor: '',
136+
aggregateFields: [new VisualizeFunction('sum(value)')],
137+
aggregateSortBys: [{field: 'sum(value)', kind: 'desc'}],
138+
}),
139+
});
140+
});
141+
142+
it('returns a default metric query with an equation', () => {
143+
const result = defaultMetricQuery({type: 'equation'});
144+
expect(result).toEqual({
145+
metric: {name: '', type: ''},
146+
queryParams: new ReadableQueryParams({
147+
extrapolate: true,
148+
mode: Mode.SAMPLES,
149+
query: '',
150+
cursor: '',
151+
fields: ['id', 'timestamp'],
152+
sortBys: [{field: 'timestamp', kind: 'desc'}],
153+
aggregateCursor: '',
154+
aggregateFields: [new VisualizeEquation(EQUATION_PREFIX)],
155+
aggregateSortBys: [{field: EQUATION_PREFIX, kind: 'desc'}],
156+
}),
157+
});
158+
});
159+
});

static/app/views/explore/metrics/metricQuery.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ export function encodeMetricQueryParams(metricQuery: BaseMetricQuery): string {
105105
}
106106

107107
export function defaultMetricQuery({
108-
equation,
109-
}: {equation?: boolean} = {}): BaseMetricQuery {
108+
type = 'aggregate',
109+
}: {type?: 'aggregate' | 'equation'} = {}): BaseMetricQuery {
110110
return {
111111
metric: {name: '', type: ''},
112112
queryParams: new ReadableQueryParams({
@@ -119,9 +119,10 @@ export function defaultMetricQuery({
119119
sortBys: defaultSortBys(defaultFields()),
120120

121121
aggregateCursor: '',
122-
aggregateFields: equation ? [defaultAggregateEquation()] : defaultAggregateFields(),
122+
aggregateFields:
123+
type === 'equation' ? [defaultAggregateEquation()] : defaultAggregateFields(),
123124
aggregateSortBys: defaultAggregateSortBys(
124-
equation ? [defaultAggregateEquation()] : defaultAggregateFields()
125+
type === 'equation' ? [defaultAggregateEquation()] : defaultAggregateFields()
125126
),
126127
}),
127128
};

static/app/views/explore/metrics/metricToolbar/aggregateDropdown.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ import {
2020
useSetMetricVisualizes,
2121
} from 'sentry/views/explore/metrics/metricsQueryParams';
2222
import {updateVisualizeYAxis} from 'sentry/views/explore/metrics/utils';
23-
import {
24-
isVisualizeFunction,
25-
VisualizeFunction,
26-
} from 'sentry/views/explore/queryParams/visualize';
23+
import {isVisualizeFunction} from 'sentry/views/explore/queryParams/visualize';
2724

2825
const MULTI_SELECT_GROUP_KEYS = new Set(['percentiles', 'stats']);
2926

@@ -36,6 +33,7 @@ export function AggregateDropdown({traceMetric}: {traceMetric: TraceMetric}) {
3633
return null;
3734
}
3835

36+
const narrowedVisualize = visualize;
3937
const groups = GROUPED_OPTIONS_BY_TYPE[traceMetric.type] ?? [];
4038
const selectedNames = new Set(
4139
visualizes.map(v => (isVisualizeFunction(v) ? (v.parsedFunction?.name ?? '') : ''))
@@ -45,15 +43,15 @@ export function AggregateDropdown({traceMetric}: {traceMetric: TraceMetric}) {
4543
if (selectedOptions.length === 0) {
4644
setMetricVisualizes([
4745
updateVisualizeYAxis(
48-
visualize as VisualizeFunction,
46+
narrowedVisualize,
4947
DEFAULT_YAXIS_BY_TYPE[traceMetric.type]!,
5048
traceMetric
5149
),
5250
]);
5351
} else {
5452
setMetricVisualizes(
5553
selectedOptions.map(o =>
56-
updateVisualizeYAxis(visualize as VisualizeFunction, o.value, traceMetric)
54+
updateVisualizeYAxis(narrowedVisualize, o.value, traceMetric)
5755
)
5856
);
5957
}

static/app/views/explore/metrics/metricsTab.spec.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import {OrganizationFixture} from 'sentry-fixture/organization';
12
import {TimeSeriesFixture} from 'sentry-fixture/timeSeries';
23
import {
34
createTraceMetricFixtures,
@@ -582,6 +583,35 @@ describe('MetricsTabContent', () => {
582583
});
583584
expect(parsedQuery.aggregateFields).toContainEqual({groupBy: 'test.region'});
584585
});
586+
587+
it('does not show the Add Equation button when the feature flag is disabled', async () => {
588+
render(
589+
<ProviderWrapper>
590+
<MetricsTabContent datePageFilterProps={datePageFilterProps} />
591+
</ProviderWrapper>,
592+
{
593+
organization,
594+
}
595+
);
596+
expect(await screen.findByText('Add Metric')).toBeInTheDocument();
597+
expect(screen.queryByText('Add Equation')).not.toBeInTheDocument();
598+
});
599+
600+
it('shows the Add Equation button when the feature flag is enabled', async () => {
601+
const orgWithFeature = OrganizationFixture({
602+
features: ['tracemetrics-enabled', 'tracemetrics-equations-in-explore'],
603+
});
604+
render(
605+
<ProviderWrapper>
606+
<MetricsTabContent datePageFilterProps={datePageFilterProps} />
607+
</ProviderWrapper>,
608+
{
609+
organization: orgWithFeature,
610+
}
611+
);
612+
expect(await screen.findByText('Add Metric')).toBeInTheDocument();
613+
expect(screen.getByText('Add Equation')).toBeInTheDocument();
614+
});
585615
});
586616

587617
describe('MetricsTabContent (tracemetrics-ui-refresh)', () => {

static/app/views/explore/metrics/metricsTab.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import {MetricToolbar} from 'sentry/views/explore/metrics/metricToolbar';
3434
import {MetricSaveAs} from 'sentry/views/explore/metrics/metricToolbar/metricSaveAs';
3535
import {
3636
MultiMetricsQueryParamsProvider,
37-
useAddEquationQuery,
3837
useAddMetricQuery,
3938
useMultiMetricsQueryParams,
4039
} from 'sentry/views/explore/metrics/multiMetricsQueryParams';
@@ -121,17 +120,19 @@ function MetricsQueryBuilderSection({
121120
const organization = useOrganization();
122121
const metricQueries = useMultiMetricsQueryParams();
123122
const addMetricQuery = useAddMetricQuery();
124-
const addEquationQuery = useAddEquationQuery();
123+
const addEquationQuery = useAddMetricQuery({type: 'equation'});
125124
const hasEquations = useHasMetricEquations();
126125
const references = useMemo(() => {
127126
return new Set(
128127
metricQueries
129-
.filter(metricQuery =>
128+
.map((metricQuery, queryIndex) => ({metricQuery, queryIndex}))
129+
.filter(({metricQuery}) =>
130130
metricQuery.queryParams.visualizes.some(isVisualizeFunction)
131131
)
132-
.map((_metricQuery, index) => getVisualizeLabel(index))
132+
.map(({queryIndex}) => getVisualizeLabel(queryIndex))
133133
);
134134
}, [metricQueries]);
135+
135136
if (canUseMetricsUIRefresh(organization)) {
136137
return (
137138
<ExploreControlSection expanded={controlSectionExpanded ?? true}>

0 commit comments

Comments
 (0)