import {OrganizationFixture} from 'sentry-fixture/organization'; import {render, screen, userEvent, waitFor} from 'sentry-test/reactTestingLibrary'; import {DiscoverDatasets} from 'sentry/utils/discover/types'; import EAPField from 'sentry/views/alerts/rules/metric/eapField'; import {SpanTagsProvider} from 'sentry/views/explore/contexts/spanTagsContext'; describe('EAPField', () => { const organization = OrganizationFixture(); let fieldsMock; beforeEach(() => { fieldsMock = MockApiClient.addMockResponse({ url: `/organizations/${organization.slug}/spans/fields/`, method: 'GET', }); }); it('renders', () => { render( {}} /> ); expect(fieldsMock).toHaveBeenCalledWith( `/organizations/${organization.slug}/spans/fields/`, expect.objectContaining({ query: expect.objectContaining({type: 'number'}), }) ); expect(fieldsMock).toHaveBeenCalledWith( `/organizations/${organization.slug}/spans/fields/`, expect.objectContaining({ query: expect.objectContaining({type: 'string'}), }) ); screen.getByText('count'); screen.getByText('span.duration'); }); it('should call onChange with the new aggregate string when switching aggregates', async () => { const onChange = jest.fn(); render( ); expect(fieldsMock).toHaveBeenCalledWith( `/organizations/${organization.slug}/spans/fields/`, expect.objectContaining({ query: expect.objectContaining({type: 'number'}), }) ); expect(fieldsMock).toHaveBeenCalledWith( `/organizations/${organization.slug}/spans/fields/`, expect.objectContaining({ query: expect.objectContaining({type: 'string'}), }) ); await userEvent.click(screen.getByText('count')); await userEvent.click(await screen.findByText('max')); await waitFor(() => expect(onChange).toHaveBeenCalledWith('max(span.duration)', {})); }); });