import {OrganizationFixture} from 'sentry-fixture/organization';
import {render, screen} from 'sentry-test/reactTestingLibrary';
import * as metricsContext from 'sentry/views/metrics/context';
import {MetricsLayout} from 'sentry/views/metrics/layout';
const useMetricsContextReturnValueMock = {
addWidget: () => {},
duplicateWidget: () => {},
focusArea: {},
hasCustomMetrics: false,
hasPerformanceMetrics: false,
highlightedSampleId: undefined,
isDefaultQuery: false,
isMultiChartMode: false,
isHasMetricsLoading: true,
metricsSamples: [],
removeWidget: () => {},
selectedWidgetIndex: 0,
setDefaultQuery: () => {},
setHighlightedSampleId: () => {},
setIsMultiChartMode: () => {},
setMetricsSamples: () => {},
setSelectedWidgetIndex: () => {},
showQuerySymbols: false,
updateWidget: () => {},
widgets: [],
toggleWidgetVisibility: () => {},
};
jest.mock('sentry/views/metrics/useCreateDashboard');
jest.mock('sentry/views/metrics/scratchpad');
jest.mock('sentry/views/metrics/queries');
describe('Metrics Layout', function () {
const organization = OrganizationFixture({
features: ['custom-metrics'],
});
it("already using performance and don't have old custom metrics", async function () {
jest.spyOn(metricsContext, 'useMetricsContext').mockReturnValue({
...useMetricsContextReturnValueMock,
hasCustomMetrics: false,
hasPerformanceMetrics: true,
isHasMetricsLoading: false,
});
render(, {organization});
// Button: Set Up Custom Metric
expect(
await screen.findByRole('button', {name: 'Set Up Custom Metric'})
).toBeInTheDocument();
// Alert: Metrics beta experience ending soon.
expect(screen.getByText(/we are ending the beta/i)).toBeInTheDocument();
// Main View: Displays the empty state.
expect(screen.queryByText(/track and solve what matters/i)).toBeInTheDocument();
expect(
screen.getByRole('button', {name: 'View Performance Metrics'})
).toBeInTheDocument();
});
it("not using performance and doesn't have custom metrics", async function () {
jest.spyOn(metricsContext, 'useMetricsContext').mockReturnValue({
...useMetricsContextReturnValueMock,
hasCustomMetrics: false,
hasPerformanceMetrics: false,
isHasMetricsLoading: false,
});
render(, {organization});
// Main View: Empty State
expect(await screen.findByText(/track and solve what matters/i)).toBeInTheDocument();
// Button: Read Docs
expect(screen.getByRole('button', {name: 'Read Docs'})).toBeInTheDocument();
expect(
screen.queryByRole('button', {name: 'Set Up Custom Metric'})
).toBeInTheDocument();
});
it('not using performance and has custom metrics', async function () {
jest.spyOn(metricsContext, 'useMetricsContext').mockReturnValue({
...useMetricsContextReturnValueMock,
hasCustomMetrics: true,
hasPerformanceMetrics: false,
isHasMetricsLoading: false,
});
render(, {organization});
// Alert: Metrics beta experience ending soon.
expect(await screen.findByText(/we are ending the beta/i)).toBeInTheDocument();
// Button: Add Custom Metrics
expect(screen.getByRole('button', {name: 'Add Custom Metrics'})).toBeInTheDocument();
// Main View: Does not display the empty state.
expect(screen.queryByText(/track and solve what matters/i)).not.toBeInTheDocument();
});
});