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', 'custom-metrics-extraction-rule', 'custom-metrics-extraction-rule-ui', ], }); 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: Add New Metric expect( await screen.findByRole('button', {name: 'Add New Metric'}) ).toBeInTheDocument(); // Alert: No alert shall be rendered expect( screen.queryByText(/there are upcoming changes to the Metrics API/i) ).not.toBeInTheDocument(); expect( screen.queryByText(/Metrics using with the old API will stop being ingested/i) ).not.toBeInTheDocument(); // Main View: Does not display the empty state. expect(screen.queryByText(/track and solve what matters/i)).not.toBeInTheDocument(); }); it("not using performance and don't have old 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: Set Up Tracing expect(screen.getByRole('button', {name: 'Set Up Tracing'})).toBeInTheDocument(); // Not in the page: Add New Metric expect( screen.queryByRole('button', {name: 'Add New Metric'}) ).not.toBeInTheDocument(); }); it('not using performance and have old custom metrics', async function () { jest.spyOn(metricsContext, 'useMetricsContext').mockReturnValue({ ...useMetricsContextReturnValueMock, hasCustomMetrics: true, hasPerformanceMetrics: false, isHasMetricsLoading: false, }); render(, {organization}); // Alert: Old API metrics ingestion ending soon. expect( await screen.findByText(/Metrics using with the old API will stop being ingested/i) ).toBeInTheDocument(); // Button: Add New Metric expect(screen.getByRole('button', {name: 'Add New Metric'})).toBeInTheDocument(); // Main View: Does not display the empty state. expect(screen.queryByText(/track and solve what matters/i)).not.toBeInTheDocument(); }); });