import {uuid4} from '@sentry/core'; import * as Sentry from '@sentry/react'; import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, waitFor} from 'sentry-test/reactTestingLibrary'; import ProjectsStore from 'sentry/stores/projectsStore'; import ContinuosProfileProvider from './continuousProfileProvider'; describe('ContinuousProfileProvider', () => { beforeEach(() => { MockApiClient.clearMockResponses(); }); it('fetches chunk', async () => { const {organization, project, router} = initializeOrg({ router: { location: { query: { start: new Date().toISOString(), end: new Date().toISOString(), profilerId: uuid4(), eventId: '1', }, }, }, }); ProjectsStore.loadInitialData([project]); const captureMessage = jest.spyOn(Sentry, 'captureMessage'); const chunkRequest = MockApiClient.addMockResponse({ url: `/organizations/${organization.slug}/profiling/chunks/`, body: {}, }); MockApiClient.addMockResponse({ url: `/projects/${organization.slug}/${project.slug}/events/1/`, body: {}, }); render({null}, { router, organization, }); await waitFor(() => expect(chunkRequest).toHaveBeenCalled()); expect(captureMessage).not.toHaveBeenCalled(); }); it('requires start, end and profilerId', async () => { for (const [start, end, profilerId] of [ [undefined, new Date().toISOString(), uuid4()], [new Date().toISOString(), undefined, uuid4()], [new Date().toISOString(), new Date().toISOString(), undefined], ]) { const {organization, project, router} = initializeOrg({ // params: {orgId: organization.slug, projectId: project.slug}, router: { location: { query: { start, end, profilerId, eventId: '1', }, }, }, }); MockApiClient.addMockResponse({ url: `/projects/${organization.slug}/${project.slug}/events/1/`, body: {}, }); const captureMessage = jest.spyOn(Sentry, 'captureMessage'); render({null}, { router, organization, }); await waitFor(() => expect(captureMessage).toHaveBeenCalledWith( expect.stringContaining( 'Failed to fetch continuous profile - invalid chunk parameters.' ) ) ); } }); });