import {Fragment} from 'react'; import {mountWithTheme} from 'sentry-test/enzyme'; import {Client} from 'sentry/api'; import QuickTraceQuery from 'sentry/utils/performance/quickTrace/quickTraceQuery'; const traceId = 'abcdef1234567890'; const eventId = '0987654321fedcba'; function renderQuickTrace({isLoading, error, trace, type}) { if (isLoading) { return 'loading'; } if (error !== null) { return error; } return (
{type}
{trace.length}
); } describe('TraceLiteQuery', function () { let api, location, event, traceLiteMock, traceFullMock, traceMetaMock; beforeEach(function () { api = new Client(); location = { pathname: '/', query: {}, }; event = { id: eventId, contexts: { trace: { trace_id: traceId, }, }, type: 'transaction', }; traceLiteMock = MockApiClient.addMockResponse({ url: `/organizations/test-org/events-trace-light/${traceId}/`, body: [], match: [MockApiClient.matchQuery({event_id: eventId})], }); traceFullMock = MockApiClient.addMockResponse({ url: `/organizations/test-org/events-trace/${traceId}/`, body: [], }); traceMetaMock = MockApiClient.addMockResponse({ url: `/organizations/test-org/events-trace-meta/${traceId}/`, body: { projects: 4, transactions: 5, errors: 2, }, }); }); it('fetches data on mount and passes the event id', async function () { const wrapper = mountWithTheme( {renderQuickTrace} ); await tick(); wrapper.update(); expect(traceLiteMock).toHaveBeenCalledTimes(1); expect(traceFullMock).toHaveBeenCalledTimes(1); }); it('doesnt fetches meta when not needed', async function () { const wrapper = mountWithTheme( {renderQuickTrace} ); await tick(); wrapper.update(); expect(traceLiteMock).toHaveBeenCalledTimes(1); expect(traceFullMock).toHaveBeenCalledTimes(1); expect(traceMetaMock).toHaveBeenCalledTimes(0); }); it('uses lite results when it cannot find current event in full results', async function () { const wrapper = mountWithTheme( {renderQuickTrace} ); await tick(); wrapper.update(); expect(wrapper.find('div[data-test-id="type"]').text()).toEqual('partial'); }); it('uses full results when it finds current event', async function () { traceLiteMock = MockApiClient.addMockResponse({ url: `/organizations/test-org/events-trace-light/0${traceId}/`, body: [], match: [MockApiClient.matchQuery({event_id: eventId})], }); traceFullMock = MockApiClient.addMockResponse({ url: `/organizations/test-org/events-trace/0${traceId}/`, body: [{event_id: eventId, children: []}], }); traceMetaMock = MockApiClient.addMockResponse({ url: `/organizations/test-org/events-trace-meta/0${traceId}/`, body: { projects: 4, transactions: 5, errors: 2, }, }); event.contexts.trace.trace_id = `0${traceId}`; const wrapper = mountWithTheme( {renderQuickTrace} ); await tick(); wrapper.update(); expect(wrapper.find('div[data-test-id="type"]').text()).toEqual('full'); }); });