import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary'; import selectEvent from 'sentry-test/selectEvent'; import {textWithMarkupMatcher} from 'sentry-test/utils'; import {INITIAL_DATA} from 'sentry/views/settings/projectMetrics/metricsExtractionRuleCreateModal'; import {MetricsExtractionRuleForm} from 'sentry/views/settings/projectMetrics/metricsExtractionRuleForm'; function renderMockRequests({orgSlug, projectId}: {orgSlug: string; projectId: string}) { MockApiClient.addMockResponse({ url: `/organizations/${orgSlug}/spans/fields/`, body: [], }); MockApiClient.addMockResponse({ url: `/projects/${orgSlug}/${projectId}/metrics/extraction-rules/`, method: 'GET', body: [ { aggregates: ['count'], conditions: [{id: 102, value: '', mris: ['c:custom/span_attribute_102@none']}], createdById: 3142223, dateAdded: '2024-07-29T12:04:23.196785Z', dateUpdated: '2024-07-29T12:04:23.197008Z', projectId, spanAttribute: 'A', tags: ['release', 'environment'], unit: 'none', }, ], }); } describe('Metrics Extraction Rule Form', function () { it('by focusing on the "select span attribute" field, the UI shall display a hint about custom attribute', async function () { const {project} = initializeOrg(); renderMockRequests({orgSlug: project.organization.slug, projectId: project.id}); render( ); await userEvent.click(screen.getByText('Select span attribute')); expect(screen.getByText(/See how to instrument a custom attribute/)).toHaveAttribute( 'href', 'https://docs.sentry.io/product/explore/metrics/metrics-set-up/' ); }); it('by focusing on the "group and filter by" field, the UI shall display a hint about custom attribute', async function () { const {project} = initializeOrg(); renderMockRequests({orgSlug: project.organization.slug, projectId: project.id}); render( ); await userEvent.click(screen.getByLabelText('Select tags')); expect(screen.getByText(/See how to instrument a custom tag/)).toHaveAttribute( 'href', 'https://docs.sentry.io/product/explore/metrics/metrics-set-up/' ); }); it('by selecting a custom attribute the alert about delay in ingestion shall render different info', async function () { const {project} = initializeOrg(); renderMockRequests({orgSlug: project.organization.slug, projectId: project.id}); render( ); await userEvent.type(screen.getByText('Select span attribute'), 'new-metric'); await userEvent.click( // the dom renders 2x of this text because of aria screen.getAllByText(textWithMarkupMatcher('Create "new-metric"'))[1] ); await userEvent.click(screen.getByText(/we’ll need a moment/)); expect( screen.getByText( /collect data from spans sent after you created the metric and not before/ ) ).toBeInTheDocument(); expect(screen.getByText(/instrument your custom attribute/)).toHaveAttribute( 'href', 'https://docs.sentry.io/product/explore/metrics/metrics-set-up/' ); await selectEvent.select(screen.getByText('new-metric'), 'browser.name'); expect( screen.getByText( /if you deleted an existing metric, then we’ll stop collecting data/ ) ).toBeInTheDocument(); }); });